Complete rename across all bundle IDs, App Groups, CloudKit containers, StoreKit product IDs, data store filenames, URL schemes, logger subsystems, Swift identifiers, user-facing strings (7 languages), file names, directory names, Xcode project, schemes, assets, and documentation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
375 lines
17 KiB
Swift
375 lines
17 KiB
Swift
//
|
|
// CustomIcon.swift
|
|
// Reflect (iOS)
|
|
//
|
|
// Created by Trey Tartt on 2/13/22.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
class CustomWidgetModel: ObservableObject, Codable, NSCopying {
|
|
static let numberOfBGItems = 109
|
|
|
|
static var randomWidget: CustomWidgetModel {
|
|
return CustomWidgetModel(leftEye: CustomWidgeImageOptions.defaultOption,
|
|
rightEye: CustomWidgeImageOptions.defaultOption,
|
|
mouth: CustomWidgeImageOptions.defaultOption,
|
|
background: CustomWidgetBackGroundOptions.defaultOption,
|
|
bgColor: Color.random(),
|
|
innerColor: Color.random(),
|
|
bgOverlayColor: Color.random(),
|
|
rightEyeColor: Color.random(),
|
|
leftEyeColor: Color.random(),
|
|
mouthColor: Color.random(),
|
|
circleStrokeColor: Color.random(),
|
|
inUse: true,
|
|
uuid: UUID().uuidString,
|
|
isSaved: false,
|
|
createdDate: Date())
|
|
}
|
|
|
|
init(leftEye: CustomWidgeImageOptions,
|
|
rightEye: CustomWidgeImageOptions,
|
|
mouth: CustomWidgeImageOptions,
|
|
background: CustomWidgetBackGroundOptions,
|
|
bgColor: Color,
|
|
innerColor: Color,
|
|
bgOverlayColor: Color,
|
|
rightEyeColor: Color,
|
|
leftEyeColor: Color,
|
|
mouthColor: Color,
|
|
circleStrokeColor: Color,
|
|
inUse: Bool,
|
|
uuid: String,
|
|
isSaved: Bool,
|
|
createdDate: Date) {
|
|
self.leftEye = leftEye
|
|
self.rightEye = rightEye
|
|
self.mouth = mouth
|
|
self.background = background
|
|
self.bgColor = bgColor
|
|
self.innerColor = innerColor
|
|
self.bgOverlayColor = bgOverlayColor
|
|
self.rightEyeColor = rightEyeColor
|
|
self.leftEyeColor = leftEyeColor
|
|
self.mouthColor = mouthColor
|
|
self.circleStrokeColor = circleStrokeColor
|
|
self.inUse = inUse
|
|
self.uuid = uuid
|
|
self.isSaved = isSaved
|
|
self.createdDate = createdDate
|
|
}
|
|
|
|
@Published var leftEye: CustomWidgeImageOptions
|
|
@Published var rightEye: CustomWidgeImageOptions
|
|
@Published var mouth: CustomWidgeImageOptions
|
|
|
|
@Published var background: CustomWidgetBackGroundOptions
|
|
@Published var bgColor: Color
|
|
@Published var innerColor: Color
|
|
@Published var bgOverlayColor: Color
|
|
|
|
@Published var leftEyeColor: Color
|
|
@Published var rightEyeColor: Color
|
|
@Published var mouthColor: Color
|
|
|
|
@Published var circleStrokeColor: Color
|
|
@Published var inUse: Bool
|
|
@Published var uuid: String
|
|
@Published var isSaved: Bool
|
|
@Published var createdDate: Date
|
|
|
|
private var oldBackground: CustomWidgetBackGroundOptions?
|
|
private var oldBackgroundImages: [(Image, String)]?
|
|
|
|
public var backgroundImages : [(Image, String)] {
|
|
if let oldBackgroundImages = oldBackgroundImages,
|
|
oldBackground == background {
|
|
return oldBackgroundImages
|
|
}
|
|
|
|
oldBackground = background
|
|
|
|
if background == .random {
|
|
var blah = [(Image, String)]()
|
|
for _ in 0...CustomWidgetModel.numberOfBGItems {
|
|
let image = CustomWidgetBackGroundOptions.selectable.randomElement()?.image ?? CustomWidgetBackGroundOptions.defaultOption.image
|
|
blah.append((image, UUID().uuidString))
|
|
}
|
|
oldBackgroundImages = blah
|
|
} else {
|
|
var blah = [(Image, String)]()
|
|
for _ in 0...CustomWidgetModel.numberOfBGItems {
|
|
blah.append((background.image, UUID().uuidString))
|
|
}
|
|
oldBackgroundImages = blah
|
|
}
|
|
return oldBackgroundImages!
|
|
}
|
|
|
|
enum CodingKeys: CodingKey {
|
|
case leftEye, rightEye, mouth, background, bgColor, innerColor, bgOverlayColor, leftEyeColor, rightEyeColor, mouthColor, circleStrokeColor, inUse, uuid, isSaved, createdDate
|
|
}
|
|
|
|
required init(from decoder: Decoder) throws {
|
|
let container = try decoder.container(keyedBy: CodingKeys.self)
|
|
leftEye = try container.decode(CustomWidgeImageOptions.self, forKey: .leftEye)
|
|
rightEye = try container.decode(CustomWidgeImageOptions.self, forKey: .rightEye)
|
|
mouth = try container.decode(CustomWidgeImageOptions.self, forKey: .mouth)
|
|
|
|
background = try container.decode(CustomWidgetBackGroundOptions.self, forKey: .background)
|
|
bgColor = try container.decode(Color.self, forKey: .bgColor)
|
|
innerColor = try container.decode(Color.self, forKey: .innerColor)
|
|
bgOverlayColor = try container.decode(Color.self, forKey: .bgOverlayColor)
|
|
leftEyeColor = try container.decode(Color.self, forKey: .leftEyeColor)
|
|
rightEyeColor = try container.decode(Color.self, forKey: .rightEyeColor)
|
|
mouthColor = try container.decode(Color.self, forKey: .mouthColor)
|
|
circleStrokeColor = try container.decode(Color.self, forKey: .circleStrokeColor)
|
|
inUse = try container.decode(Bool.self, forKey: .inUse)
|
|
uuid = try container.decode(String.self, forKey: .uuid)
|
|
isSaved = try container.decode(Bool.self, forKey: .isSaved)
|
|
createdDate = try container.decode(Date.self, forKey: .createdDate)
|
|
}
|
|
|
|
func encode(to encoder: Encoder) throws {
|
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
try container.encode(leftEye, forKey: .leftEye)
|
|
try container.encode(rightEye, forKey: .rightEye)
|
|
try container.encode(mouth, forKey: .mouth)
|
|
|
|
try container.encode(background, forKey: .background)
|
|
try container.encode(bgColor, forKey: .bgColor)
|
|
try container.encode(innerColor, forKey: .innerColor)
|
|
try container.encode(bgOverlayColor, forKey: .bgOverlayColor)
|
|
try container.encode(leftEyeColor, forKey: .leftEyeColor)
|
|
try container.encode(rightEyeColor, forKey: .rightEyeColor)
|
|
try container.encode(mouthColor, forKey: .mouthColor)
|
|
try container.encode(circleStrokeColor, forKey: .circleStrokeColor)
|
|
try container.encode(inUse, forKey: .inUse)
|
|
try container.encode(uuid, forKey: .uuid)
|
|
try container.encode(isSaved, forKey: .isSaved)
|
|
try container.encode(createdDate, forKey: .createdDate)
|
|
}
|
|
|
|
func copy(with zone: NSZone? = nil) -> Any {
|
|
let copy = CustomWidgetModel(leftEye: self.leftEye,
|
|
rightEye: self.rightEye,
|
|
mouth: self.mouth,
|
|
background: self.background,
|
|
bgColor: self.bgColor,
|
|
innerColor: self.innerColor,
|
|
bgOverlayColor: self.bgOverlayColor,
|
|
rightEyeColor: self.rightEyeColor,
|
|
leftEyeColor: self.leftEyeColor,
|
|
mouthColor: self.mouthColor,
|
|
circleStrokeColor: self.circleStrokeColor,
|
|
inUse: self.inUse,
|
|
uuid: self.uuid,
|
|
isSaved: self.isSaved,
|
|
createdDate: self.createdDate)
|
|
return copy
|
|
}
|
|
}
|
|
|
|
enum CustomWidgetBackGroundOptions: String, CaseIterable, Codable {
|
|
case horrible
|
|
case bad
|
|
case average
|
|
case good
|
|
case great
|
|
case random
|
|
|
|
static var selectable: [CustomWidgetBackGroundOptions] {
|
|
return [.great, .good, .average, .bad, .horrible]
|
|
}
|
|
|
|
static public var defaultOption: CustomWidgetBackGroundOptions {
|
|
CustomWidgetBackGroundOptions.random
|
|
}
|
|
|
|
public var image: Image {
|
|
return Image(self.rawValue, bundle: .main)
|
|
}
|
|
}
|
|
|
|
enum CustomWidgetEyes: String, Codable {
|
|
case left
|
|
case right
|
|
}
|
|
|
|
enum CustomWidgeImageOptions: String, CaseIterable, Codable {
|
|
case star_solid = "custom_icon/star-solid"
|
|
case jet_fighter_solid = "custom_icon/jet-fighter-solid"
|
|
case circle_xmark_solid = "custom_icon/circle-xmark-solid"
|
|
case frown_regular = "custom_icon/frown-regular"
|
|
case virus_covid_solid = "custom_icon/virus-covid-solid"
|
|
case bullhorn_solid = "custom_icon/bullhorn-solid"
|
|
case caret_down_solid = "custom_icon/caret-down-solid"
|
|
case meteor_solid = "custom_icon/meteor-solid"
|
|
case eye_solid = "custom_icon/eye-solid"
|
|
case battery_half_solid = "custom_icon/battery-half-solid"
|
|
case heart_crack_solid = "custom_icon/heart-crack-solid"
|
|
case heart_solid = "custom_icon/heart-solid"
|
|
case divide_solid = "custom_icon/divide-solid"
|
|
case location_crosshairs_solid = "custom_icon/location-crosshairs-solid"
|
|
case bitcoin_brands = "custom_icon/bitcoin-brands"
|
|
case baby_solid = "custom_icon/baby-solid"
|
|
case grin_regular = "custom_icon/grin-regular"
|
|
case poo_storm_solid = "custom_icon/poo-storm-solid"
|
|
case btc_brands = "custom_icon/btc-brands"
|
|
case shuttle_space_solid = "custom_icon/shuttle-space-solid"
|
|
case chess_king_solid = "custom_icon/chess-king-solid"
|
|
case chess_queen_solid = "custom_icon/chess-queen-solid"
|
|
case lightbulb_solid = "custom_icon/lightbulb-solid"
|
|
case skull_solid = "custom_icon/skull-solid"
|
|
case dice_one_solid = "custom_icon/dice-one-solid"
|
|
case fan_solid = "custom_icon/fan-solid"
|
|
case bolt_solid = "custom_icon/bolt-solid"
|
|
case dharmachakra_solid = "custom_icon/dharmachakra-solid"
|
|
case ban_solid = "custom_icon/ban-solid"
|
|
case skull_crossbones_solid = "custom_icon/skull-crossbones-solid"
|
|
case sad_tear_regular = "custom_icon/sad-tear-regular"
|
|
case floppy_disk_solid = "custom_icon/floppy-disk-solid"
|
|
case crosshairs_solid = "custom_icon/crosshairs-solid"
|
|
case exclamation_solid = "custom_icon/exclamation-solid"
|
|
case lemon_solid = "custom_icon/lemon-solid"
|
|
case caret_right_solid = "custom_icon/caret-right-solid"
|
|
case poo_solid = "custom_icon/poo-solid"
|
|
case rainbow_solid = "custom_icon/rainbow-solid"
|
|
case apple_brands = "custom_icon/apple-brands"
|
|
case x_solid = "custom_icon/x-solid"
|
|
case pizza_slice_solid = "custom_icon/pizza-slice-solid"
|
|
case empire_brands = "custom_icon/empire-brands"
|
|
case caret_up_solid = "custom_icon/caret-up-solid"
|
|
case life_ring_solid = "custom_icon/life-ring-solid"
|
|
case dragon_solid = "custom_icon/dragon-solid"
|
|
case cannabis_solid = "custom_icon/cannabis-solid"
|
|
case bullseye_solid = "custom_icon/bullseye-solid"
|
|
case code_compare_solid = "custom_icon/code-compare-solid"
|
|
case battery_empty_solid = "custom_icon/battery-empty-solid"
|
|
case moon_solid = "custom_icon/moon-solid"
|
|
case android_brands = "custom_icon/android-brands"
|
|
case smile_beam_regular = "custom_icon/smile-beam-regular"
|
|
case futbol_solid = "custom_icon/futbol-solid"
|
|
case dollar_sign_solid = "custom_icon/dollar-sign-solid"
|
|
case cross_solid = "custom_icon/cross-solid"
|
|
case bomb_solid = "custom_icon/bomb-solid"
|
|
case battery_full_solid = "custom_icon/battery-full-solid"
|
|
case arrow_up_solid = "custom_icon/arrow-up-solid"
|
|
case gem_solid = "custom_icon/gem-solid"
|
|
case code_solid = "custom_icon/code-solid"
|
|
case bolt_lightning_solid = "custom_icon/bolt-lightning-solid"
|
|
case caret_left_solid = "custom_icon/caret-left-solid"
|
|
case fort_awesome_brands = "custom_icon/fort-awesome-brands"
|
|
case fire_solid = "custom_icon/fire-solid"
|
|
case hotjar_brands = "custom_icon/hotjar-brands"
|
|
case burger_solid = "custom_icon/burger-solid"
|
|
case egg_solid = "custom_icon/egg-solid"
|
|
case meh_regular = "custom_icon/meh-regular"
|
|
case battery_three_quarters_solid = "custom_icon/battery-three-quarters-solid"
|
|
case crown_solid = "custom_icon/crown-solid"
|
|
case clock_solid = "custom_icon/clock-solid"
|
|
case battery_quarter_solid = "custom_icon/battery-quarter-solid"
|
|
case fly_brands = "custom_icon/fly-brands"
|
|
case baseball_solid = "custom_icon/baseball-solid"
|
|
case dice_d20_solid = "custom_icon/dice-d20-solid"
|
|
case microphone_solid = "custom_icon/microphone-solid"
|
|
case peace_solid = "custom_icon/peace-solid"
|
|
|
|
static public var defaultOption: CustomWidgeImageOptions {
|
|
CustomWidgeImageOptions.bomb_solid
|
|
}
|
|
|
|
public var image: Image {
|
|
return Image(self.rawValue, bundle: .main)
|
|
}
|
|
}
|
|
|
|
enum CustomWidgetMouthOptions: String, CaseIterable, Codable {
|
|
case star_solid = "custom_icon/star-solid"
|
|
case jet_fighter_solid = "custom_icon/jet-fighter-solid"
|
|
case circle_xmark_solid = "custom_icon/circle-xmark-solid"
|
|
case frown_regular = "custom_icon/frown-regular"
|
|
case virus_covid_solid = "custom_icon/virus-covid-solid"
|
|
case bullhorn_solid = "custom_icon/bullhorn-solid"
|
|
case caret_down_solid = "custom_icon/caret-down-solid"
|
|
case meteor_solid = "custom_icon/meteor-solid"
|
|
case eye_solid = "custom_icon/eye-solid"
|
|
case battery_half_solid = "custom_icon/battery-half-solid"
|
|
case heart_crack_solid = "custom_icon/heart-crack-solid"
|
|
case heart_solid = "custom_icon/heart-solid"
|
|
case divide_solid = "custom_icon/divide-solid"
|
|
case location_crosshairs_solid = "custom_icon/location-crosshairs-solid"
|
|
case bitcoin_brands = "custom_icon/bitcoin-brands"
|
|
case baby_solid = "custom_icon/baby-solid"
|
|
case grin_regular = "custom_icon/grin-regular"
|
|
case poo_storm_solid = "custom_icon/poo-storm-solid"
|
|
case btc_brands = "custom_icon/btc-brands"
|
|
case shuttle_space_solid = "custom_icon/shuttle-space-solid"
|
|
case chess_king_solid = "custom_icon/chess-king-solid"
|
|
case chess_queen_solid = "custom_icon/chess-queen-solid"
|
|
case lightbulb_solid = "custom_icon/lightbulb-solid"
|
|
case skull_solid = "custom_icon/skull-solid"
|
|
case dice_one_solid = "custom_icon/dice-one-solid"
|
|
case fan_solid = "custom_icon/fan-solid"
|
|
case bolt_solid = "custom_icon/bolt-solid"
|
|
case dharmachakra_solid = "custom_icon/dharmachakra-solid"
|
|
case ban_solid = "custom_icon/ban-solid"
|
|
case skull_crossbones_solid = "custom_icon/skull-crossbones-solid"
|
|
case sad_tear_regular = "custom_icon/sad-tear-regular"
|
|
case floppy_disk_solid = "custom_icon/floppy-disk-solid"
|
|
case crosshairs_solid = "custom_icon/crosshairs-solid"
|
|
case exclamation_solid = "custom_icon/exclamation-solid"
|
|
case lemon_solid = "custom_icon/lemon-solid"
|
|
case caret_right_solid = "custom_icon/caret-right-solid"
|
|
case poo_solid = "custom_icon/poo-solid"
|
|
case rainbow_solid = "custom_icon/rainbow-solid"
|
|
case apple_brands = "custom_icon/apple-brands"
|
|
case x_solid = "custom_icon/x-solid"
|
|
case pizza_slice_solid = "custom_icon/pizza-slice-solid"
|
|
case empire_brands = "custom_icon/empire-brands"
|
|
case caret_up_solid = "custom_icon/caret-up-solid"
|
|
case life_ring_solid = "custom_icon/life-ring-solid"
|
|
case dragon_solid = "custom_icon/dragon-solid"
|
|
case cannabis_solid = "custom_icon/cannabis-solid"
|
|
case bullseye_solid = "custom_icon/bullseye-solid"
|
|
case code_compare_solid = "custom_icon/code-compare-solid"
|
|
case battery_empty_solid = "custom_icon/battery-empty-solid"
|
|
case moon_solid = "custom_icon/moon-solid"
|
|
case android_brands = "custom_icon/android-brands"
|
|
case smile_beam_regular = "custom_icon/smile-beam-regular"
|
|
case futbol_solid = "custom_icon/futbol-solid"
|
|
case dollar_sign_solid = "custom_icon/dollar-sign-solid"
|
|
case cross_solid = "custom_icon/cross-solid"
|
|
case bomb_solid = "custom_icon/bomb-solid"
|
|
case battery_full_solid = "custom_icon/battery-full-solid"
|
|
case arrow_up_solid = "custom_icon/arrow-up-solid"
|
|
case gem_solid = "custom_icon/gem-solid"
|
|
case code_solid = "custom_icon/code-solid"
|
|
case bolt_lightning_solid = "custom_icon/bolt-lightning-solid"
|
|
case caret_left_solid = "custom_icon/caret-left-solid"
|
|
case fort_awesome_brands = "custom_icon/fort-awesome-brands"
|
|
case fire_solid = "custom_icon/fire-solid"
|
|
case hotjar_brands = "custom_icon/hotjar-brands"
|
|
case burger_solid = "custom_icon/burger-solid"
|
|
case egg_solid = "custom_icon/egg-solid"
|
|
case meh_regular = "custom_icon/meh-regular"
|
|
case battery_three_quarters_solid = "custom_icon/battery-three-quarters-solid"
|
|
case crown_solid = "custom_icon/crown-solid"
|
|
case clock_solid = "custom_icon/clock-solid"
|
|
case battery_quarter_solid = "custom_icon/battery-quarter-solid"
|
|
case fly_brands = "custom_icon/fly-brands"
|
|
case baseball_solid = "custom_icon/baseball-solid"
|
|
case dice_d20_solid = "custom_icon/dice-d20-solid"
|
|
case microphone_solid = "custom_icon/microphone-solid"
|
|
case peace_solid = "custom_icon/peace-solid"
|
|
|
|
static public var defaultOption: CustomWidgetMouthOptions {
|
|
CustomWidgetMouthOptions.bomb_solid
|
|
}
|
|
|
|
public var image: Image {
|
|
return Image(self.rawValue, bundle: .main)
|
|
}
|
|
}
|