You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
3.2 KiB
79 lines
3.2 KiB
// Copyright © 2015 Abhishek Banthia |
|
|
|
import CoreModelKit |
|
import Foundation |
|
|
|
struct ConfigExport { |
|
private func generateJSON(from store: DataStore) { |
|
let selectedKeys: Set<String> = Set([ |
|
CLShowOnboardingFlow, |
|
CLSelectedTimeZoneFormatKey, |
|
CLThemeKey, |
|
CLShowDayInMenu, |
|
CLShowDateInMenu, |
|
CLShowPlaceInMenu, |
|
CLDisplayFutureSliderKey, |
|
CLStartAtLogin, |
|
CLShowAppInForeground, |
|
CLSunriseSunsetTime, |
|
CLUserFontSizePreference, |
|
CLShowUpcomingEventView, |
|
CLShowAllDayEventsInUpcomingView, |
|
CLShowMeetingInMenubar, |
|
CLTruncateTextLength, |
|
CLFutureSliderRange, |
|
CLSelectedCalendars, |
|
CLAppDisplayOptions, |
|
CLLongStatusBarWarningMessage, |
|
CLMenubarCompactMode, |
|
CLDefaultMenubarMode, |
|
CLInstallHomeIndicatorObject, |
|
CLSwitchToCompactModeAlert, |
|
]) |
|
let dictionaryRep = UserDefaults.standard.dictionaryRepresentation() |
|
var clockerPrefs: [String: Any] = [:] |
|
for (key, value) in dictionaryRep { |
|
if selectedKeys.contains(key) { |
|
print("Key is \(key) and value is \(value)") |
|
clockerPrefs[key] = value |
|
} |
|
} |
|
|
|
do { |
|
let decodeJSON: [[String: Any]] = store.timezones().compactMap { data -> [String: Any]? in |
|
guard let customObject = TimezoneData.customObject(from: data) else { return nil } |
|
let timezoneDictionary: [String: Any] = [ |
|
"Name": customObject.formattedAddress ?? "", |
|
"Custom": customObject.customLabel ?? "", |
|
"TimezoneID": customObject.timezoneID ?? "N/A", |
|
"Is System": customObject.isSystemTimezone ? 1 : 0, |
|
"Is Favorite": customObject.isFavourite == 1 ? 1 : 0, |
|
"Sunrise or Sunset": customObject.isSunriseOrSunset ? 1 : 0, |
|
"Latitude": customObject.latitude ?? 0.0, |
|
"Longitude": customObject.longitude ?? 0.0, |
|
"Place Identifier": customObject.placeID ?? "0.0", |
|
"Selection Type": "\(customObject.selectionType)", |
|
] |
|
return timezoneDictionary |
|
} |
|
|
|
let timezoneDict = ["Timezones": decodeJSON] |
|
clockerPrefs.merge(timezoneDict) { current, _ in current } |
|
|
|
guard let documentDirectoryUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return } |
|
let fileUrl = documentDirectoryUrl.appendingPathComponent("Persons.json") |
|
// Transform array into data and save it into file |
|
do { |
|
let data = try JSONSerialization.data(withJSONObject: clockerPrefs, options: []) |
|
try data.write(to: fileUrl, options: []) |
|
} catch { |
|
print(error) |
|
} |
|
|
|
let json = try JSONSerialization.data(withJSONObject: clockerPrefs, options: .prettyPrinted) |
|
print(json) |
|
} catch { |
|
print("Failure Observed \(error.localizedDescription)") |
|
} |
|
} |
|
}
|
|
|