Source code for the WriteFreely SwiftUI app for iOS, iPadOS, and macOS
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

64 rader
2.4 KiB

  1. import SwiftUI
  2. import CoreData
  3. enum PostAppearance: String {
  4. case sans = "OpenSans-Regular"
  5. case mono = "Hack-Regular"
  6. case serif = "Lora-Regular"
  7. }
  8. struct PostEditorModel {
  9. @AppStorage("showAllPostsFlag") var showAllPostsFlag: Bool = false
  10. @AppStorage("selectedCollectionURL") var selectedCollectionURL: URL?
  11. @AppStorage("lastDraftURL") var lastDraftURL: URL?
  12. func saveLastDraft(_ post: WFAPost) {
  13. self.lastDraftURL = post.status != PostStatus.published.rawValue ? post.objectID.uriRepresentation() : nil
  14. }
  15. func clearLastDraft() {
  16. self.lastDraftURL = nil
  17. }
  18. func fetchLastDraftFromAppStorage() -> WFAPost? {
  19. guard let postURL = lastDraftURL else { return nil }
  20. guard let post = fetchManagedObject(from: postURL) as? WFAPost else { return nil }
  21. return post
  22. }
  23. func generateNewLocalPost(withFont appearance: Int) -> WFAPost {
  24. let managedPost = WFAPost(context: LocalStorageManager.standard.container.viewContext)
  25. managedPost.createdDate = Date()
  26. managedPost.title = ""
  27. managedPost.body = ""
  28. managedPost.status = PostStatus.local.rawValue
  29. managedPost.collectionAlias = WriteFreelyModel.shared.selectedCollection?.alias
  30. switch appearance {
  31. case 1:
  32. managedPost.appearance = "sans"
  33. case 2:
  34. managedPost.appearance = "wrap"
  35. default:
  36. managedPost.appearance = "serif"
  37. }
  38. if let languageCode = Locale.current.languageCode {
  39. managedPost.language = languageCode
  40. managedPost.rtl = Locale.characterDirection(forLanguage: languageCode) == .rightToLeft
  41. }
  42. return managedPost
  43. }
  44. func fetchSelectedCollectionFromAppStorage() -> WFACollection? {
  45. guard let collectionURL = selectedCollectionURL else { return nil }
  46. guard let collection = fetchManagedObject(from: collectionURL) as? WFACollection else { return nil }
  47. return collection
  48. }
  49. private func fetchManagedObject(from objectURL: URL) -> NSManagedObject? {
  50. let coordinator = LocalStorageManager.standard.container.persistentStoreCoordinator
  51. guard let managedObjectID = coordinator.managedObjectID(forURIRepresentation: objectURL) else { return nil }
  52. let object = LocalStorageManager.standard.container.viewContext.object(with: managedObjectID)
  53. return object
  54. }
  55. }