2019-06-14 00:53:17 +00:00
// A d v a n c e d P r e f s V i e w . s w i f t
// T u s k e r
//
// C r e a t e d b y S h a d o w f a c t s o n 6 / 1 3 / 1 9 .
// C o p y r i g h t © 2 0 1 9 S h a d o w f a c t s . A l l r i g h t s r e s e r v e d .
//
import SwiftUI
import Pachyderm
struct AdvancedPrefsView : View {
2019-11-15 00:53:00 +00:00
@ ObservedObject var preferences = Preferences . shared
2019-06-14 00:53:17 +00:00
var body : some View {
List {
2019-07-28 01:43:08 +00:00
formattingSection
automationSection
2020-05-13 22:58:11 +00:00
cachingSection
2020-09-16 00:46:49 +00:00
}
2021-02-06 18:47:45 +00:00
. listStyle ( InsetGroupedListStyle ( ) )
2020-09-16 00:46:49 +00:00
. navigationBarTitle ( Text ( " Advanced " ) )
2019-07-28 01:43:08 +00:00
}
var formattingFooter : some View {
Text ( " This option is only supported for Pleroma and Mastodon instances with formatting enabled. On all other instances, formatting symbols will remain in the unformatted plain text. " ) . lineLimit ( nil )
}
var formattingSection : some View {
Section ( footer : formattingFooter ) {
2019-11-15 00:53:00 +00:00
Picker ( selection : $ preferences . statusContentType , label : Text ( " Post Content Type " ) ) {
2019-07-28 01:43:08 +00:00
ForEach ( StatusContentType . allCases , id : \ . self ) { type in
Text ( type . displayName ) . tag ( type )
} // . n a v i g a t i o n B a r T i t l e ( " P o s t C o n t e n t T y p e " )
// s e e F B 6 8 3 8 2 9 1
2019-06-14 00:53:17 +00:00
}
2019-07-28 01:43:08 +00:00
}
}
var automationSection : some View {
2020-08-16 18:58:02 +00:00
Section ( header : Text ( " Automation " ) ) {
2019-07-28 01:43:08 +00:00
NavigationLink ( destination : SilentActionPrefs ( ) ) {
Text ( " Silent Action Permissions " )
2019-06-14 00:53:17 +00:00
}
}
2019-07-28 01:43:08 +00:00
}
2020-05-13 22:58:11 +00:00
var cachingSection : some View {
2020-09-16 00:46:49 +00:00
Section ( header : Text ( " Caching " ) , footer : Text ( " Clearing caches will restart the app. " ) ) {
2020-05-13 22:58:11 +00:00
Button ( action : clearCache ) {
2020-09-12 14:49:08 +00:00
Text ( " Clear Mastodon Cache " )
} . foregroundColor ( . red )
Button ( action : clearImageCaches ) {
Text ( " Clear Image Caches " )
2020-05-13 22:58:11 +00:00
} . foregroundColor ( . red )
}
}
2020-09-12 14:49:08 +00:00
private func clearCache ( ) {
2020-05-13 22:58:11 +00:00
for account in LocalData . shared . accounts {
let controller = MastodonController . getForAccount ( account )
let coordinator = controller . persistentContainer . persistentStoreCoordinator
for store in coordinator . persistentStores {
try ! coordinator . destroyPersistentStore ( at : store . url ! , ofType : store . type , options : store . options )
}
}
2020-09-12 14:49:08 +00:00
resetUI ( )
}
private func clearImageCaches ( ) {
[
ImageCache . avatars ,
ImageCache . headers ,
ImageCache . attachments ,
ImageCache . emojis ,
] . forEach {
try ! $0 . reset ( )
}
resetUI ( )
}
private func resetUI ( ) {
2020-05-13 22:58:11 +00:00
let mostRecent = LocalData . shared . getMostRecentAccount ( ) !
NotificationCenter . default . post ( name : . activateAccount , object : nil , userInfo : [ " account " : mostRecent ] )
}
2019-07-28 01:43:08 +00:00
}
extension StatusContentType {
var displayName : String {
switch self {
case . plain :
return " Plain "
case . markdown :
return " Markdown "
case . html :
return " HTML "
}
2019-06-14 00:53:17 +00:00
}
}
#if DEBUG
struct AdvancedPrefsView_Previews : PreviewProvider {
static var previews : some View {
AdvancedPrefsView ( )
}
}
#endif