Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 31 additions & 6 deletions App/Data Sources/MessageListDataSource.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,18 @@ final class MessageListDataSource: NSObject {
weak var deletionDelegate: MessageListDataSourceDeletionDelegate?
private let resultsController: NSFetchedResultsController<PrivateMessage>
private let tableView: UITableView
private let folder: PrivateMessageFolder?

init(managedObjectContext: NSManagedObjectContext, tableView: UITableView) throws {
init(managedObjectContext: NSManagedObjectContext, tableView: UITableView, folder: PrivateMessageFolder?) throws {
let fetchRequest = PrivateMessage.makeFetchRequest()
fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(PrivateMessage.sentDate), ascending: false)]

if let folder = folder {
fetchRequest.predicate = NSPredicate(format: "folder == %@", folder)
}

resultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
self.folder = folder

self.tableView = tableView
super.init()
Expand All @@ -34,6 +41,10 @@ final class MessageListDataSource: NSObject {
func message(at indexPath: IndexPath) -> PrivateMessage {
return resultsController.object(at: indexPath)
}

func indexPath(for message: PrivateMessage) -> IndexPath? {
return resultsController.indexPath(forObject: message)
}
}

private let cellReuseIdentifier = "MessageCell"
Expand Down Expand Up @@ -98,11 +109,16 @@ extension MessageListDataSource: UITableViewDataSource {
private func viewModelForMessage(at indexPath: IndexPath) -> MessageListCell.ViewModel {
let message = self.message(at: indexPath)
let theme = Theme.defaultTheme()


let displayName = message.isSent
? (message.to?.username ?? "Unknown")
: (message.fromUsername ?? "")
let labelPrefix = message.isSent ? "To: " : ""

return MessageListCell.ViewModel(
backgroundColor: theme["listBackgroundColor"]!,
selectedBackgroundColor: theme["listSelectedBackgroundColor"]!,
sender: NSAttributedString(string: message.fromUsername ?? "", attributes: [
sender: NSAttributedString(string: labelPrefix + displayName, attributes: [
.font: UIFont.preferredFontForTextStyle(.body, fontName: nil, sizeAdjustment: theme[double: "messageListSenderFontSizeAdjustment"]!, weight: .semibold),
.foregroundColor: theme[uicolor: "listSecondaryTextColor"]!]),
sentDate: message.sentDate ?? .distantPast,
Expand All @@ -117,7 +133,16 @@ extension MessageListDataSource: UITableViewDataSource {
.foregroundColor: theme[uicolor: "listTextColor"]!]),
tagImage: .image(name: message.threadTag?.imageName, placeholder: .privateMessage),
tagOverlayImage: {
if message.replied {
if message.isSent {
let image = UIImage(named: "pmforwarded")?
.stroked(with: theme["listBackgroundColor"]!, thickness: 3, quality: 1)
.withRenderingMode(.alwaysTemplate)

let imageView = UIImageView(image: image)
imageView.tintColor = theme["tintColor"]!

return imageView
} else if message.replied {
let image = UIImage(named: "pmreplied")?
.stroked(with: theme["listBackgroundColor"]!, thickness: 3, quality: 1)
.withRenderingMode(.alwaysTemplate)
Expand All @@ -126,7 +151,7 @@ extension MessageListDataSource: UITableViewDataSource {
imageView.tintColor = theme["listBackgroundColor"]!

return imageView
} else if message.forwarded {
} else if message.forwarded && !message.isSent {
let image = UIImage(named: "pmforwarded")?
.stroked(with: theme["listBackgroundColor"]!, thickness: 3, quality: 1)
.withRenderingMode(.alwaysTemplate)
Expand All @@ -135,7 +160,7 @@ extension MessageListDataSource: UITableViewDataSource {
imageView.tintColor = theme["listBackgroundColor"]!

return imageView
} else if !message.seen {
} else if !message.seen && !message.isSent {
let image = UIImage(named: "newpm")
let imageView = UIImageView(image: image)

Expand Down
286 changes: 286 additions & 0 deletions App/Resources/Localizable.xcstrings
Original file line number Diff line number Diff line change
Expand Up @@ -1093,6 +1093,193 @@
}
}
},
"private-message-folder.add-message" : {
"comment" : "Message in new folder dialog",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Enter a name for the new folder"
}
}
}
},
"private-message-folder.add-title" : {
"comment" : "Title of new folder dialog",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "New Folder"
}
}
}
},
"private-message-folder.create" : {
"comment" : "Button to create new folder",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Create"
}
}
}
},
"private-message-folder.create-error-title" : {
"comment" : "Error title when folder creation fails",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Could not create folder"
}
}
}
},
"private-message-folder.custom-folders-header" : {
"comment" : "Header for custom folders section",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Custom Folders"
}
}
}
},
"private-message-folder.delete-error-title" : {
"comment" : "Error title when folder deletion fails",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Could not delete folder"
}
}
}
},
"private-message-folder.delete-confirm-title" : {
"comment" : "Title of confirmation dialog when deleting a folder",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Delete Folder?"
}
}
}
},
"private-message-folder.delete-confirm-message" : {
"comment" : "Message shown when deleting a folder explaining that messages will be moved",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Messages in this folder will be moved to Inbox or Sent."
}
}
}
},
"private-message-folder.delete-button" : {
"comment" : "Button to confirm folder deletion",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Delete"
}
}
}
},
"private-message-folder.footer-editing" : {
"comment" : "Footer text shown in folder management when editing mode is active",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Tap the minus button to delete a folder."
}
}
}
},
"private-message-folder.footer-normal" : {
"comment" : "Footer text shown in folder management when not in editing mode",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Tap Edit to delete folders."
}
}
}
},
"private-message-folder.inbox" : {
"comment" : "Label for inbox folder in folder picker",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Inbox"
}
}
}
},
"private-message-folder.manage" : {
"comment" : "Menu item to manage folders",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Manage Folders"
}
}
}
},
"private-message-folder.manage-title" : {
"comment" : "Title of folder management screen",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Manage Folders"
}
}
}
},
"private-message-folder.more" : {
"comment" : "Label for more folders dropdown button",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Folders"
}
}
}
},
"private-message-folder.name-placeholder" : {
"comment" : "Placeholder text for folder name field",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Folder name"
}
}
}
},
"private-message-folder.sent" : {
"comment" : "Label for sent folder in folder picker",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sent"
}
}
}
},
"private-message-list.compose-button.accessibility-label" : {
"comment" : "Text read by VoiceOver for compose button in private messages list.",
"extractionState" : "migrated",
Expand Down Expand Up @@ -1177,6 +1364,28 @@
}
}
},
"private-messages-list.delete-confirm.message" : {
"comment" : "Message of confirmation alert when deleting multiple messages. Parameter is the count.",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Are you sure you want to delete %d messages?"
}
}
}
},
"private-messages-list.delete-confirm.title" : {
"comment" : "Title of confirmation alert when deleting multiple messages.",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Delete Messages?"
}
}
}
},
"private-messages-list.deletion-error.title" : {
"comment" : "Title of alert shown when there's a problem deleting a private message from the list.",
"extractionState" : "migrated",
Expand All @@ -1201,6 +1410,72 @@
}
}
},
"private-messages-list.move-error.title" : {
"comment" : "Title of alert shown when there's a problem moving a private message to a different folder.",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Could Not Move Message"
}
}
}
},
"private-messages-list.move-folder.message" : {
"comment" : "Message of alert shown when selecting a folder to move a message to.",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Select a folder to move this message to:"
}
}
}
},
"private-messages-list.move-folder.title" : {
"comment" : "Title of alert shown when selecting a folder to move a message to.",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Move to Folder"
}
}
}
},
"private-messages-list.move-multiple.message" : {
"comment" : "Message shown when moving multiple messages. Parameter is the count of messages.",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Move %d messages to:"
}
}
}
},
"private-messages-list.no-selection.message" : {
"comment" : "Message shown when trying to perform an action without selecting any messages.",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Please select at least one message first."
}
}
}
},
"private-messages-list.no-selection.title" : {
"comment" : "Title shown when trying to perform an action without selecting any messages.",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "No Messages Selected"
}
}
}
},
"Problem Logging In" : {

},
Expand Down Expand Up @@ -1440,6 +1715,17 @@
}
}
},
"table-view.action.move" : {
"comment" : "Text of move button shown in tables after swiping on the cell in edit mode.",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Move"
}
}
}
},
"thread-list.filter-button.change-filter" : {
"comment" : "Button title atop the thread list when some filter is set.",
"extractionState" : "migrated",
Expand Down
Loading
Loading