mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-08-04 13:07:04 -04:00
309 lines
8.3 KiB
Swift
309 lines
8.3 KiB
Swift
// This file is part of Kiwix for iOS & macOS.
|
|
//
|
|
// Kiwix is free software; you can redistribute it and/or modify it
|
|
// under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 3 of the License, or
|
|
// any later version.
|
|
//
|
|
// Kiwix is distributed in the hope that it will be useful, but
|
|
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
// General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Kiwix; If not, see https://www.gnu.org/licenses/.
|
|
|
|
import CoreData
|
|
import MapKit
|
|
|
|
import Defaults
|
|
|
|
enum ActiveAlert: String, Identifiable {
|
|
var id: String { rawValue }
|
|
|
|
case articleFailedToLoad
|
|
case downloadFailed
|
|
}
|
|
|
|
enum ActiveSheet: Hashable, Identifiable {
|
|
var id: Int { hashValue }
|
|
|
|
case outline
|
|
case bookmarks
|
|
case library(tabItem: LibraryTabItem? = nil)
|
|
case map(location: CLLocation?)
|
|
case settings
|
|
case safari(url: URL)
|
|
}
|
|
|
|
enum Category: String, CaseIterable, Identifiable, LosslessStringConvertible, Hashable {
|
|
var description: String { rawValue }
|
|
|
|
var id: String { rawValue }
|
|
|
|
case wikipedia
|
|
case wikibooks
|
|
case wikinews
|
|
case wikiquote
|
|
case wikisource
|
|
case wikiversity
|
|
case wikivoyage
|
|
case wiktionary
|
|
case vikidia
|
|
case ted
|
|
case stackExchange = "stack_exchange"
|
|
case other
|
|
|
|
init?(_ description: String) {
|
|
self.init(rawValue: description)
|
|
}
|
|
|
|
init?(rawValue: String?) {
|
|
self.init(rawValue: rawValue ?? "other")
|
|
}
|
|
|
|
var name: String {
|
|
switch self {
|
|
case .wikipedia:
|
|
return LocalString.enum_category_wikipedia
|
|
case .wikibooks:
|
|
return LocalString.enum_category_wikibooks
|
|
case .wikinews:
|
|
return LocalString.enum_category_wikinews
|
|
case .wikiquote:
|
|
return LocalString.enum_category_wikiquote
|
|
case .wikisource:
|
|
return LocalString.enum_category_wikisource
|
|
case .wikiversity:
|
|
return LocalString.enum_category_wikiversity
|
|
case .wikivoyage:
|
|
return LocalString.enum_category_wikivoyage
|
|
case .wiktionary:
|
|
return LocalString.enum_category_wiktionary
|
|
case .ted:
|
|
return LocalString.enum_category_ted
|
|
case .vikidia:
|
|
return LocalString.enum_category_vikidia
|
|
case .stackExchange:
|
|
return LocalString.enum_category_stackexchange
|
|
case .other:
|
|
return LocalString.enum_category_other
|
|
}
|
|
}
|
|
|
|
var icon: String {
|
|
switch self {
|
|
case .wikipedia:
|
|
return "Wikipedia"
|
|
case .wikibooks:
|
|
return "Wikibooks"
|
|
case .wikinews:
|
|
return "Wikinews"
|
|
case .wikiquote:
|
|
return "Wikiquote"
|
|
case .wikisource:
|
|
return "Wikisource"
|
|
case .wikiversity:
|
|
return "Wikiversity"
|
|
case .wikivoyage:
|
|
return "Wikivoyage"
|
|
case .wiktionary:
|
|
return "Wiktionary"
|
|
case .ted:
|
|
return "TED"
|
|
case .vikidia:
|
|
return "Vikidia"
|
|
case .stackExchange:
|
|
return "StackExchange"
|
|
case .other:
|
|
return "Other"
|
|
}
|
|
}
|
|
}
|
|
|
|
enum ExternalLinkLoadingPolicy: String, CaseIterable, Identifiable, Defaults.Serializable {
|
|
case alwaysAsk, alwaysLoad, neverLoad
|
|
|
|
var id: String { self.rawValue }
|
|
|
|
var name: String {
|
|
switch self {
|
|
case .alwaysAsk:
|
|
return LocalString.enum_external_link_loading_policy_always_ask
|
|
case .alwaysLoad:
|
|
return LocalString.enum_external_link_loading_policy_always_load
|
|
case .neverLoad:
|
|
return LocalString.enum_external_link_loading_policy_never_load
|
|
}
|
|
}
|
|
}
|
|
|
|
enum OpenURLContext: String {
|
|
case deepLink
|
|
case file
|
|
}
|
|
|
|
enum OpenFileContext: String {
|
|
case command
|
|
case file
|
|
case welcomeScreen
|
|
case library
|
|
}
|
|
|
|
enum Flavor: String, CustomStringConvertible {
|
|
case max = "maxi"
|
|
case noPic = "nopic"
|
|
case mini = "mini"
|
|
|
|
init?(rawValue: String?) {
|
|
self.init(rawValue: rawValue ?? "")
|
|
}
|
|
|
|
var description: String {
|
|
switch self {
|
|
case .max:
|
|
return LocalString.enum_flavor_max
|
|
case .noPic:
|
|
return LocalString.enum_flavor_no_pic
|
|
case .mini:
|
|
return LocalString.enum_flavor_mini
|
|
}
|
|
}
|
|
}
|
|
|
|
enum LibraryLanguageSortingMode: String, CaseIterable, Identifiable, Defaults.Serializable {
|
|
case alphabetically, byCounts
|
|
|
|
var id: String { self.rawValue }
|
|
|
|
var name: String {
|
|
switch self {
|
|
case .alphabetically:
|
|
return LocalString.enum_library_language_sorting_model_a_z
|
|
case .byCounts:
|
|
return LocalString.enum_library_language_sorting_model_by_count
|
|
}
|
|
}
|
|
}
|
|
|
|
enum LibraryTabItem: String, CaseIterable, Identifiable {
|
|
case categories, new, downloads, opened
|
|
|
|
var id: String { self.rawValue }
|
|
|
|
var name: String {
|
|
switch self {
|
|
case .opened:
|
|
return LocalString.enum_libray_tab_item_opened
|
|
case .categories:
|
|
return LocalString.enum_libray_tab_item_categories
|
|
case .downloads:
|
|
return LocalString.enum_libray_tab_item_downloads
|
|
case .new:
|
|
return LocalString.enum_libray_tab_item_new
|
|
}
|
|
}
|
|
|
|
var icon: String {
|
|
switch self {
|
|
case .opened:
|
|
return "folder"
|
|
case .categories:
|
|
return "books.vertical"
|
|
case .downloads:
|
|
return "tray.and.arrow.down"
|
|
case .new:
|
|
return "newspaper"
|
|
}
|
|
}
|
|
}
|
|
|
|
enum NavigationItem: Hashable, Identifiable {
|
|
var id: Int { hashValue }
|
|
|
|
case loading
|
|
case bookmarks, map(location: CLLocation?), tab(objectID: NSManagedObjectID)
|
|
case opened, categories, new, downloads
|
|
case settings
|
|
|
|
var name: String {
|
|
switch self {
|
|
case .loading:
|
|
return LocalString.enum_navigation_item_loading
|
|
case .bookmarks:
|
|
return LocalString.enum_navigation_item_bookmarks
|
|
case .map:
|
|
return LocalString.enum_navigation_item_map
|
|
case .tab:
|
|
#if os(macOS)
|
|
return LocalString.enum_navigation_item_reading
|
|
#else
|
|
return LocalString.enum_navigation_item_new_tab
|
|
#endif
|
|
case .opened:
|
|
return LocalString.enum_navigation_item_opened
|
|
case .categories:
|
|
return LocalString.enum_navigation_item_categories
|
|
case .new:
|
|
return LocalString.enum_navigation_item_new
|
|
case .downloads:
|
|
return LocalString.enum_navigation_item_downloads
|
|
case .settings:
|
|
return LocalString.enum_navigation_item_settings
|
|
}
|
|
}
|
|
|
|
var icon: String {
|
|
switch self {
|
|
case .loading:
|
|
return "loading"
|
|
case .bookmarks:
|
|
return "star"
|
|
case .map:
|
|
return "map"
|
|
case .tab:
|
|
#if os(macOS)
|
|
return "book"
|
|
#else
|
|
return "square"
|
|
#endif
|
|
case .opened:
|
|
return "folder"
|
|
case .categories:
|
|
return "books.vertical"
|
|
case .new:
|
|
return "newspaper"
|
|
case .downloads:
|
|
return "tray.and.arrow.down"
|
|
case .settings:
|
|
return "gear"
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Note: The cases were reduced from:
|
|
/// `case disabled, firstParagraph, firstSentence, matches`
|
|
/// which (due to enum values) accurately migrating our users, as of our intents
|
|
/// DO NOT change the order of the cases, as that might cause migration problems from version 3.4.0
|
|
/// see: https://github.com/kiwix/kiwix-apple/issues/853
|
|
enum SearchResultSnippetMode: String, CaseIterable, Identifiable, Defaults.Serializable {
|
|
case disabled, matches
|
|
|
|
var id: String { rawValue }
|
|
|
|
var name: String {
|
|
switch self {
|
|
case .disabled:
|
|
return LocalString.enum_search_result_snippet_mode_disabled
|
|
case .matches:
|
|
return LocalString.enum_search_result_snippet_mode_matches
|
|
}
|
|
}
|
|
}
|
|
|
|
enum SheetDisplayMode: String, Identifiable {
|
|
case outline, bookmarks, library, settings
|
|
|
|
var id: String { rawValue }
|
|
}
|