diff --git a/enzevalos_iphone.xcodeproj/project.pbxproj b/enzevalos_iphone.xcodeproj/project.pbxproj index 0940e514337573c25cebb69ef5effb24b780a817..bdfaad849cc607f19adb8c8fc06bdcdcf9d439fd 100644 --- a/enzevalos_iphone.xcodeproj/project.pbxproj +++ b/enzevalos_iphone.xcodeproj/project.pbxproj @@ -86,7 +86,7 @@ 477120AE254C28F900B28C64 /* TabSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477120AD254C28F900B28C64 /* TabSupport.swift */; }; 477120BC254C401E00B28C64 /* AddressRecord+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477120BB254C401E00B28C64 /* AddressRecord+CoreDataProperties.swift */; }; 477120C2254C676000B28C64 /* ContactView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477120C1254C676000B28C64 /* ContactView.swift */; }; - 477120CD254C76AE00B28C64 /* FolderOverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477120CC254C76AE00B28C64 /* FolderOverView.swift */; }; + 477120CD254C76AE00B28C64 /* FolderListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477120CC254C76AE00B28C64 /* FolderListView.swift */; }; 4774DD7322CFFD0E00BD8CF6 /* AliceMultiIDs (439EE43C) – Public.asc in Resources */ = {isa = PBXBuildFile; fileRef = 4774DD7222CFFD0E00BD8CF6 /* AliceMultiIDs (439EE43C) – Public.asc */; }; 4774DD7522D0015F00BD8CF6 /* multiIDs.eml in Resources */ = {isa = PBXBuildFile; fileRef = 4774DD7422D0015F00BD8CF6 /* multiIDs.eml */; }; 4774DD7B22D3F5D100BD8CF6 /* multiIDs2.eml in Resources */ = {isa = PBXBuildFile; fileRef = 4774DD7A22D3F5D100BD8CF6 /* multiIDs2.eml */; }; @@ -195,7 +195,7 @@ 47F867E02052B47C00AA832F /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47F867DF2052B47C00AA832F /* Security.framework */; }; 47F867E22052B48E00AA832F /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 47F867E12052B48E00AA832F /* libz.tbd */; }; 47F867E42052B49800AA832F /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 47F867E32052B49800AA832F /* libbz2.tbd */; }; - 47FA8EA8254C7E5B006883D0 /* FolderRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47FA8EA7254C7E5B006883D0 /* FolderRow.swift */; }; + 47FA8EA8254C7E5B006883D0 /* FolderRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47FA8EA7254C7E5B006883D0 /* FolderRowView.swift */; }; 47FA8EAC254D77DE006883D0 /* MailListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47FA8EAB254D77DE006883D0 /* MailListView.swift */; }; 47FA8EC3254D9E01006883D0 /* RecipientFieldModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47FA8EC2254D9E01006883D0 /* RecipientFieldModel.swift */; }; 47FAE30E2524AA97005A1BCB /* DataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 47FAE30C2524AA97005A1BCB /* DataModel.xcdatamodeld */; }; @@ -474,7 +474,7 @@ 477120AD254C28F900B28C64 /* TabSupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabSupport.swift; sourceTree = "<group>"; }; 477120BB254C401E00B28C64 /* AddressRecord+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AddressRecord+CoreDataProperties.swift"; sourceTree = "<group>"; }; 477120C1254C676000B28C64 /* ContactView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactView.swift; sourceTree = "<group>"; }; - 477120CC254C76AE00B28C64 /* FolderOverView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FolderOverView.swift; sourceTree = "<group>"; }; + 477120CC254C76AE00B28C64 /* FolderListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FolderListView.swift; sourceTree = "<group>"; }; 4774DD7222CFFD0E00BD8CF6 /* AliceMultiIDs (439EE43C) – Public.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "AliceMultiIDs (439EE43C) – Public.asc"; sourceTree = "<group>"; }; 4774DD7422D0015F00BD8CF6 /* multiIDs.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = multiIDs.eml; sourceTree = "<group>"; }; 4774DD7A22D3F5D100BD8CF6 /* multiIDs2.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = multiIDs2.eml; sourceTree = "<group>"; }; @@ -570,7 +570,7 @@ 47F867DF2052B47C00AA832F /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 47F867E12052B48E00AA832F /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 47F867E32052B49800AA832F /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; }; - 47FA8EA7254C7E5B006883D0 /* FolderRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FolderRow.swift; sourceTree = "<group>"; }; + 47FA8EA7254C7E5B006883D0 /* FolderRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FolderRowView.swift; sourceTree = "<group>"; }; 47FA8EAB254D77DE006883D0 /* MailListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MailListView.swift; sourceTree = "<group>"; }; 47FA8EC2254D9E01006883D0 /* RecipientFieldModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipientFieldModel.swift; sourceTree = "<group>"; }; 47FAE30D2524AA97005A1BCB /* DataModel.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = DataModel.xcdatamodel; sourceTree = "<group>"; }; @@ -1044,8 +1044,8 @@ 477120CB254C766F00B28C64 /* FolderView */ = { isa = PBXGroup; children = ( - 477120CC254C76AE00B28C64 /* FolderOverView.swift */, - 47FA8EA7254C7E5B006883D0 /* FolderRow.swift */, + 477120CC254C76AE00B28C64 /* FolderListView.swift */, + 47FA8EA7254C7E5B006883D0 /* FolderRowView.swift */, ); path = FolderView; sourceTree = "<group>"; @@ -1949,7 +1949,7 @@ 3EC35F2420037651008BDF95 /* InvitationHelper.swift in Sources */, 47C112C22531D72E00621A07 /* PublicKeyRecord.swift in Sources */, 3FB75DCD25FFD37400919925 /* RecipientListView.swift in Sources */, - 477120CD254C76AE00B28C64 /* FolderOverView.swift in Sources */, + 477120CD254C76AE00B28C64 /* FolderListView.swift in Sources */, 4733B202252B142C00AB5600 /* Properties.swift in Sources */, 47FAE3492524FB58005A1BCB /* AddressRecord.swift in Sources */, 4775D7AA243F0E260052F2CC /* SimulatorData.swift in Sources */, @@ -1976,7 +1976,7 @@ 47BCAF70259F9E390008FE4B /* PasswordAlert.swift in Sources */, 477120C2254C676000B28C64 /* ContactView.swift in Sources */, 47EABF09241A9C8700774A93 /* AuthenticationModel.swift in Sources */, - 47FA8EA8254C7E5B006883D0 /* FolderRow.swift in Sources */, + 47FA8EA8254C7E5B006883D0 /* FolderRowView.swift in Sources */, A1EB05881D956879008659C1 /* ContactHandler.swift in Sources */, 47EABF2D2423C65F00774A93 /* AuthenticationView.swift in Sources */, 47BCAF68259F48840008FE4B /* TempKeyRow.swift in Sources */, diff --git a/enzevalos_iphone/SwiftUI/DisplayProtocols.swift b/enzevalos_iphone/SwiftUI/DisplayProtocols.swift index 65b5181471b5854798b82dd4749c6ff078ccf6f1..59ddc9046b574349d7eea04fd18bcb1f365904cc 100644 --- a/enzevalos_iphone/SwiftUI/DisplayProtocols.swift +++ b/enzevalos_iphone/SwiftUI/DisplayProtocols.swift @@ -76,19 +76,15 @@ enum ContactSecurityRating { var name: LocalizedStringKey { switch self { - case .Trustworthy: - return "ContactView.Rating.Trustworthy" - case .Forgable: - return "ContactView.Rating.Forgable" + case .Trustworthy: return "ContactView.Rating.Trustworthy" + case .Forgable: return "ContactView.Rating.Forgable" } } var color: Color { switch self { - case .Trustworthy: - return Color(ThemeManager.encryptedVerifiedMessageColor()) - case .Forgable: - return Color(ThemeManager.unencryptedMessageColor()) + case .Trustworthy: return Color(ThemeManager.encryptedVerifiedMessageColor()) + case .Forgable: return Color(ThemeManager.unencryptedMessageColor()) } } } @@ -100,10 +96,8 @@ protocol DisplayKey { var lastSeen: Date? { get } var type: CryptoScheme { get } var isPreferedKey: Bool { get } - var signedMailsCounter: Int { get } var sentMailsCounter: Int { get } - } protocol DisplayFolder { @@ -250,7 +244,6 @@ extension DisplayMail { } } - var dialog: DialogStruct { get { // TODO: Do we add new public key stuff? @@ -414,7 +407,6 @@ extension DisplayMail { case (.ValidedEncryptedWithCurrentKey, .NoSignature): return .EncNoSignature case (.ValidedEncryptedWithCurrentKey, .NoPublicKey): return .EncButMissingPublicKeyToVerify } - } diff --git a/enzevalos_iphone/SwiftUI/FolderView/FolderListView.swift b/enzevalos_iphone/SwiftUI/FolderView/FolderListView.swift new file mode 100644 index 0000000000000000000000000000000000000000..aabf01383b0a8350da744ef84cbd2723e137636b --- /dev/null +++ b/enzevalos_iphone/SwiftUI/FolderView/FolderListView.swift @@ -0,0 +1,54 @@ +// +// FolderOverView.swift +// enzevalos_iphone +// +// Created by Oliver Wiese on 30.10.20. +// Modified by Chris Offner & Claire Bräuer in March 2021. +// Copyright © 2020 fu-berlin. All rights reserved. +// + +import SwiftUI + +/// A view that lists all email folders and lets the user navigate to them. +struct FolderListView: View { + @Environment(\.managedObjectContext) var managedObjectContext + @FetchRequest(fetchRequest: FolderRecord.FetchRequest) + private var folders: FetchedResults<FolderRecord> + @State private var nameOfChosenFolder: String? + + var body: some View { + NavigationView { + List(folders, id: \.self) { f in + let name = formatName(f.name) + + NavigationLink(destination: InboxView(folderPath: f.path ?? name, name: name) + .environment(\.managedObjectContext, + PersistentDataProvider + .dataProvider + .persistentContainer + .viewContext), + tag: f.name, + selection: $nameOfChosenFolder, + label: { FolderRowView(folder: f) }) + } + .navigationBarTitle("Folders", displayMode: .large) + } + .onAppear { nameOfChosenFolder = "INBOX" } + } + + /// Capitalizes first letter, lowercases all subsequent letters of string. + /// + /// - Parameter name: String to be formatted + /// - Returns: Formatted string + private func formatName(_ name: String) -> String { + name.prefix(1).capitalized + name.dropFirst().lowercased() + } +} + +// Preview +struct FolderOverView_Previews: PreviewProvider { + static var previews: some View { + FolderListView() + } +} + diff --git a/enzevalos_iphone/SwiftUI/FolderView/FolderOverView.swift b/enzevalos_iphone/SwiftUI/FolderView/FolderOverView.swift deleted file mode 100644 index 2842f8ae43a3b7c7665a2667442f3b1ac4b2abc8..0000000000000000000000000000000000000000 --- a/enzevalos_iphone/SwiftUI/FolderView/FolderOverView.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// FolderOverView.swift -// enzevalos_iphone -// -// Created by Oliver Wiese on 30.10.20. -// Copyright © 2020 fu-berlin. All rights reserved. -// - -import SwiftUI - -struct FolderOverView: View { - @Environment(\.managedObjectContext) var managedObjectContext - @FetchRequest(fetchRequest: FolderRecord.FetchRequest) - var folders: FetchedResults<FolderRecord> - - - var body: some View { - List (folders, id: \.self){ f in - NavigationLink( - destination: MailListView(folderPath: f.path ?? f.name, folderName: f.name) - .environment(\.managedObjectContext, PersistentDataProvider.dataProvider.persistentContainer.viewContext) - ) { - FolderRow(folder: f) - } - } - .onAppear(perform: { - LetterboxModel.instance.mailHandler.allFolders({e in print("All folders: \(String(describing: e))")}) - }) - .navigationBarTitle("Folders", displayMode: .large) - } -} - -struct FolderOverView_Previews: PreviewProvider { - - static var previews: some View { - FolderOverView() - } -} - diff --git a/enzevalos_iphone/SwiftUI/FolderView/FolderRow.swift b/enzevalos_iphone/SwiftUI/FolderView/FolderRowView.swift similarity index 78% rename from enzevalos_iphone/SwiftUI/FolderView/FolderRow.swift rename to enzevalos_iphone/SwiftUI/FolderView/FolderRowView.swift index 406ab81d9026ef42a809bdb8d8a62f146f5b5f7d..557b31f70a9e0dccdd1b693ddc780d36f133cbc4 100644 --- a/enzevalos_iphone/SwiftUI/FolderView/FolderRow.swift +++ b/enzevalos_iphone/SwiftUI/FolderView/FolderRowView.swift @@ -8,14 +8,13 @@ import SwiftUI -struct FolderRow: View { +struct FolderRowView: View { //TODO: increase padding for each delimiter? -> Subfolder level? public var folder: DisplayFolder var body: some View { HStack { - folder.icon - .foregroundColor(.blue) + folder.icon.foregroundColor(.accentColor) Text(folder.name) Spacer() Text("\(folder.mails)") @@ -26,6 +25,6 @@ struct FolderRow: View { struct FolderRow_Previews: PreviewProvider { static var previews: some View { - FolderRow(folder: ProxyFolder(name: "Inbox")) + FolderRowView(folder: ProxyFolder(name: "Inbox")) } } diff --git a/enzevalos_iphone/SwiftUI/Inbox/InboxView.swift b/enzevalos_iphone/SwiftUI/Inbox/InboxView.swift index 86f5aa9babec9c8e73e53ebcc3d2e6a35f397ab2..421e01e0462e52339a34d84d2e89202bd64e3f0c 100644 --- a/enzevalos_iphone/SwiftUI/Inbox/InboxView.swift +++ b/enzevalos_iphone/SwiftUI/Inbox/InboxView.swift @@ -20,22 +20,20 @@ struct InboxView: View { @State private var goToFolders = false var body: some View { - NavigationView { - mailListView - .onAppear(perform: updateMails) - .sheet(isPresented: $composeMail) { ComposeView() } - .navigationBarItems(leading: folderButton, trailing: keyManagementButton) - .toolbar { - ToolbarItem(placement: .status) { - lastUpdate - } - - ToolbarItemGroup(placement: .bottomBar) { - Spacer() - composeButton - } + mailListView + .onAppear(perform: updateMails) + .sheet(isPresented: $composeMail) { ComposeView() } + .navigationBarItems(trailing: keyManagementButton) + .toolbar { + ToolbarItem(placement: .status) { + lastUpdate } - }.navigationViewStyle(DoubleColumnNavigationViewStyle()) + + ToolbarItemGroup(placement: .bottomBar) { + Spacer() + composeButton + } + } } private var mailListView: some View { @@ -107,7 +105,7 @@ struct InboxView: View { } label: { Image(systemName: "tray.2").imageScale(.large) } - .background(NavigationLink(destination: FolderOverView() + .background(NavigationLink(destination: FolderListView() .environment(\.managedObjectContext, PersistentDataProvider .dataProvider diff --git a/enzevalos_iphone/SwiftUI/LetterboxApp.swift b/enzevalos_iphone/SwiftUI/LetterboxApp.swift index e0fee28dfea811ad598044636bc90e31f3f8e0a1..25870715d77b86cc62c85b6bfb7b574d6a413bfa 100644 --- a/enzevalos_iphone/SwiftUI/LetterboxApp.swift +++ b/enzevalos_iphone/SwiftUI/LetterboxApp.swift @@ -16,11 +16,10 @@ struct LetterboxApp: App { var body: some Scene { WindowGroup { if testing { - NavigationView{ + NavigationView { KeyManagementOverview() } - } - else { + } else { switch model.currentState { case .PERMISSIONS: PermissionRequestView() @@ -31,8 +30,12 @@ struct LetterboxApp: App { case .GENERATEKEYS: PermissionRequestView() // TODO Wait case .LAUNCHEDBEFORE: - InboxView(folderPath: MailHandler.INBOX, name: NSLocalizedString("Inbox", comment: "Inbox")) - .environment(\.managedObjectContext, PersistentDataProvider.dataProvider.persistentContainer.viewContext) + FolderListView() + .environment(\.managedObjectContext, + PersistentDataProvider + .dataProvider + .persistentContainer + .viewContext) } } } diff --git a/enzevalos_iphone/persistentData/FolderRecord.swift b/enzevalos_iphone/persistentData/FolderRecord.swift index 668199e9ecd2a5e12b97087a86656f4c0f5eeb2c..06db902ecc33a4271253d0f55324c174bfd226fd 100644 --- a/enzevalos_iphone/persistentData/FolderRecord.swift +++ b/enzevalos_iphone/persistentData/FolderRecord.swift @@ -43,8 +43,11 @@ extension FolderRecord { var uids: MCOIndexSet { get { let indexSet = MCOIndexSet() - if let set = self.mailsInFolder, set.count > 0, let mails = set.allObjects as? [MailRecord] { - mails.forEach({indexSet.add(UInt64($0.uID))}) + if let set = self.mailsInFolder, set.count > 0, + let mails = set.allObjects as? [MailRecord] { + mails.forEach { + indexSet.add(UInt64($0.uID)) + } } return indexSet } @@ -71,14 +74,17 @@ extension FolderRecord { } static func lastDate(folder: String, date: Date) { - try? PersistentDataProvider.dataProvider.updateFolder(folder: folder, performingUpdates: {$0.lastUpdate = date}) - + try? PersistentDataProvider.dataProvider.updateFolder(folder: folder) { + $0.lastUpdate = date + } } } extension FolderRecord: DisplayFolder { var name: String { - if let delimiter = delimiter?.first, let n = path?.split(separator: delimiter), let last = n.last { + if let delimiter = delimiter?.first, + let n = path?.split(separator: delimiter), + let last = n.last { return String(last) } return path ?? "NO NAME" @@ -116,6 +122,4 @@ extension FolderRecord: DisplayFolder { } return 0 } - - }