Skip to content
Snippets Groups Projects
Commit fef96d40 authored by cruxfilm's avatar cruxfilm
Browse files

- added .onDelete functionality in MailListView

- refactored some properties from MailListView into InboxView to make proper toolbar and navigation bar work
- changed slider button label for key/ID to slanted key
parent 4120cff8
Branches
No related tags found
1 merge request!76Resolve "InboxView & MailListView improvements"
...@@ -17,7 +17,7 @@ struct FolderOverView: View { ...@@ -17,7 +17,7 @@ struct FolderOverView: View {
var body: some View { var body: some View {
List (folders, id: \.self){ f in List (folders, id: \.self){ f in
NavigationLink( NavigationLink(
destination: MailListView(folderpath: f.path ?? f.name, name: f.name) destination: MailListView(folderPath: f.path ?? f.name, folderName: f.name)
.environment(\.managedObjectContext, PersistentDataProvider.dataProvider.persistentContainer.viewContext) .environment(\.managedObjectContext, PersistentDataProvider.dataProvider.persistentContainer.viewContext)
) { ) {
FolderRow(folder: f) FolderRow(folder: f)
......
...@@ -12,58 +12,109 @@ import CoreData ...@@ -12,58 +12,109 @@ import CoreData
// Updating text -> Last update, updating, no connection... // Updating text -> Last update, updating, no connection...
struct InboxView: View { struct InboxView: View {
var folderpath: String var folderPath: String
var name: String var name: String
@State private var updating = false
@State var goToFolders = false @State private var composeMail = false
@State private var goToFolders = false
var body: some View { var body: some View {
NavigationView{ NavigationView {
MailListView(folderpath: folderpath, name: name) mailListView
.environment(\.managedObjectContext, .onAppear(perform: updateMails)
PersistentDataProvider .sheet(isPresented: $composeMail) { ComposeView() }
.dataProvider .navigationBarItems(leading: folderButton, trailing: keyManagementButton)
.persistentContainer .toolbar {
.viewContext) ToolbarItem(placement: .status) {
.navigationBarItems(leading: self.folderButton, trailing: keyManagementButton) lastUpdate
}
ToolbarItemGroup(placement: .bottomBar) {
Spacer()
composeButton
}
}
}.navigationViewStyle(DoubleColumnNavigationViewStyle())
}
private var mailListView: some View {
MailListView(folderPath: folderPath, folderName: name)
.environment(\.managedObjectContext,
PersistentDataProvider
.dataProvider
.persistentContainer
.viewContext)
}
private var composeButton: some View {
Button {
composeMail = true
} label: {
Image(systemName: "square.and.pencil").imageScale(.large)
} }
} }
private var keyManagementButton: some View { private var keyManagementButton: some View {
NavigationLink(destination: KeyManagementOverview()) { NavigationLink(destination: KeyManagementOverview()) {
Image(systemName: "slider.horizontal.3") Image(systemName: "key")
.imageScale(.large) .imageScale(.large)
.rotationEffect(Angle(degrees: 45))
} }
} }
private var folderButton: some View { private var lastUpdate: some View {
Button(action: { var text = NSLocalizedString("Updating", comment: "updating...")
goToFolders = true
}) { if !updating {
Image(systemName: "tray.2") let last = Date()
.imageScale(.large) let dateFormatter = DateFormatter()
dateFormatter.locale = Locale.current
dateFormatter.timeStyle = .medium
let dateString = dateFormatter.string(from: last)
text = NSLocalizedString("LastUpdate", comment: "") + " " + dateString
}
return Button(action: updateMails) {
Text(text).font(.callout)
}
}
private func updateMails() {
guard !updating else {
return
} }
.background(
NavigationLink(destination: FolderOverView() LetterboxModel
.environment(\.managedObjectContext, .instance
PersistentDataProvider .mailHandler
.dataProvider .updateFolder(folderpath: folderPath) { error in
.persistentContainer if error == nil {
.viewContext), self.updating = false
isActive: $goToFolders) { }
EmptyView() // TODO: Add error message
} }
.hidden() updating = true
)
} }
private var folderButton: some View {
Button {
goToFolders = true
} label: {
Image(systemName: "tray.2").imageScale(.large)
}
.background(NavigationLink(destination: FolderOverView()
.environment(\.managedObjectContext,
PersistentDataProvider
.dataProvider
.persistentContainer
.viewContext),
isActive: $goToFolders) {})
}
} }
struct InboxView_Previews: PreviewProvider { struct InboxView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
return InboxView(folderpath: "INBOX", name: "INBOX") return InboxView(folderPath: "INBOX", name: "INBOX")
.environment(\.managedObjectContext, .environment(\.managedObjectContext,
PersistentDataProvider PersistentDataProvider
.proxyPersistentDataProvider .proxyPersistentDataProvider
......
...@@ -18,16 +18,15 @@ struct MailListView: View { ...@@ -18,16 +18,15 @@ struct MailListView: View {
var folderPath: String var folderPath: String
var folderName: String var folderName: String
@State private var updating = false
@State private var showUser = false @State private var showUser = false
@State private var searchText = "" @State private var searchText = ""
@State private var searchType = SearchType.All @State private var searchType = SearchType.All
@State private var composeMail = false
init(folderpath: String, name: String) {
fetchRequest = MailRecord.mailsInFolderFetchRequest(folderpath: folderpath) init(folderPath: String, folderName: String) {
self.folderPath = folderpath fetchRequest = MailRecord.mailsInFolderFetchRequest(folderpath: folderPath)
self.folderName = name self.folderPath = folderPath
self.folderName = folderName
} }
var body: some View { var body: some View {
...@@ -36,72 +35,21 @@ struct MailListView: View { ...@@ -36,72 +35,21 @@ struct MailListView: View {
mailList.padding(-12) mailList.padding(-12)
} }
.navigationBarTitle(folderName, displayMode: .inline) .navigationBarTitle(folderName, displayMode: .inline)
.onAppear { updateMails() }
.sheet(isPresented: $composeMail) { ComposeView() }
.toolbar {
ToolbarItem(placement: .status) {
lastUpdate
}
ToolbarItemGroup(placement: .bottomBar) {
Spacer()
composeButton
}
}
} }
private var mailList: some View { private var mailList: some View {
List(self.mails.filter(filterKeyRecord), id: \.self) { record in List {
NavigationLink(destination: ReadMainView(model: ReadModel(mail: record))) { ForEach(self.mails.filter(filterKeyRecord), id: \.self) { email in
MailRowView(mail: record) NavigationLink(destination: ReadMainView(model: ReadModel(mail: email))) {
MailRowView(mail: email)
}
}
.onDelete {_ in
// TODO: Perform actual deletion of email
} }
} }
.listStyle(InsetGroupedListStyle()) .listStyle(InsetGroupedListStyle())
.resignKeyboardOnDragGesture() // hide keyboard when dragging
}
private var composeButton: some View {
Button {
composeMail = true
} label: {
Image(systemName: "square.and.pencil").imageScale(.large)
}
}
private var lastUpdate: some View {
var text = NSLocalizedString("Updating", comment: "updating...")
if !updating {
let last = Date()
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale.current
dateFormatter.timeStyle = .medium
let dateString = dateFormatter.string(from: last)
text = NSLocalizedString("LastUpdate", comment: "") + " " + dateString
}
return Button(action: updateMails) {
Text(text)
.font(.callout)
}
}
func updateMails() {
guard !updating else {
return
}
LetterboxModel
.instance
.mailHandler
.updateFolder(folderpath: folderPath) { error in
if error == nil {
self.updating = false
}
// TODO: Add error message
}
updating = true
} }
func filterKeyRecord(keyRecord: MailRecord) -> Bool { func filterKeyRecord(keyRecord: MailRecord) -> Bool {
...@@ -133,7 +81,7 @@ struct MailListView: View { ...@@ -133,7 +81,7 @@ struct MailListView: View {
struct MailListView_Previews: PreviewProvider { struct MailListView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
MailListView(folderpath: "INBOX", name: "INBOX") MailListView(folderPath: "INBOX", folderName: "INBOX")
.environment(\.managedObjectContext, PersistentDataProvider.proxyPersistentDataProvider.persistentContainer.viewContext) .environment(\.managedObjectContext, PersistentDataProvider.proxyPersistentDataProvider.persistentContainer.viewContext)
} }
} }
...@@ -31,7 +31,7 @@ struct LetterboxApp: App { ...@@ -31,7 +31,7 @@ struct LetterboxApp: App {
case .GENERATEKEYS: case .GENERATEKEYS:
PermissionRequestView() // TODO Wait PermissionRequestView() // TODO Wait
case .LAUNCHEDBEFORE: case .LAUNCHEDBEFORE:
InboxView(folderpath: MailHandler.INBOX, name: NSLocalizedString("Inbox", comment: "Inbox")) InboxView(folderPath: MailHandler.INBOX, name: NSLocalizedString("Inbox", comment: "Inbox"))
.environment(\.managedObjectContext, PersistentDataProvider.dataProvider.persistentContainer.viewContext) .environment(\.managedObjectContext, PersistentDataProvider.dataProvider.persistentContainer.viewContext)
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment