Merge branch 'mkirk/only-watch-deletes' into release/3.0.0

This commit is contained in:
Michael Kirk 2019-11-19 09:53:01 -07:00
commit 56e9a91b36
5 changed files with 32 additions and 47 deletions

View File

@ -19,9 +19,6 @@ typedef NS_OPTIONS(NSInteger, MediaGalleryOption) {
@protocol MediaDetailViewControllerDelegate <NSObject>
- (void)mediaDetailViewController:(MediaDetailViewController *)mediaDetailViewController
requestDeleteAttachment:(TSAttachment *)attachment;
- (void)mediaDetailViewController:(MediaDetailViewController *)mediaDetailViewController
isPlayingVideo:(BOOL)isPlayingVideo;

View File

@ -337,7 +337,7 @@ class MediaGallery {
return deletedItem
}
delete(items: deletedItems, initiatedBy: self)
delete(items: deletedItems, initiatedBy: self, deleteFromDB: false)
}
// MARK: -
@ -599,7 +599,7 @@ class MediaGallery {
_delegates = _delegates.filter({ $0.value != nil}) + [Weak(value: delegate)]
}
func delete(items: [MediaGalleryItem], initiatedBy: AnyObject) {
func delete(items: [MediaGalleryItem], initiatedBy: AnyObject, deleteFromDB: Bool) {
AssertIsOnMainThread()
guard items.count > 0 else {
@ -615,14 +615,16 @@ class MediaGallery {
self.deletedAttachments.insert(item.attachmentStream)
}
self.databaseStorage.asyncWrite { transaction in
for item in items {
let message = item.message
let attachment = item.attachmentStream
message.removeAttachment(attachment, transaction: transaction)
if message.attachmentIds.count == 0 {
Logger.debug("removing message after removing last media attachment")
message.anyRemove(transaction: transaction)
if deleteFromDB {
self.databaseStorage.asyncWrite { transaction in
for item in items {
let message = item.message
let attachment = item.attachmentStream
message.removeAttachment(attachment, transaction: transaction)
if message.attachmentIds.count == 0 {
Logger.debug("removing message after removing last media attachment")
message.anyRemove(transaction: transaction)
}
}
}
}

View File

@ -450,7 +450,7 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
let deleteAction = ActionSheetAction(title: NSLocalizedString("TXT_DELETE_TITLE", comment: ""),
style: .destructive) { _ in
let deletedItem = currentViewController.galleryItem
self.mediaGallery.delete(items: [deletedItem], initiatedBy: self)
self.mediaGallery.delete(items: [deletedItem], initiatedBy: self, deleteFromDB: true)
}
actionSheet.addAction(OWSActionSheets.cancelAction)
actionSheet.addAction(deleteAction)
@ -669,20 +669,6 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
self.shouldHideToolbars = !self.shouldHideToolbars
}
public func mediaDetailViewController(_ mediaDetailViewController: MediaDetailViewController, requestDelete attachment: TSAttachment) {
guard let galleryItem = mediaGallery.galleryItems.first(where: { $0.attachmentStream == attachment }) else {
owsFailDebug("galleryItem was unexpectedly nil")
self.presentingViewController?.dismiss(animated: true)
return
}
dismissSelf(animated: true) {
self.mediaGallery.delete(items: [galleryItem], initiatedBy: self)
}
}
public func mediaDetailViewController(_ mediaDetailViewController: MediaDetailViewController, isPlayingVideo: Bool) {
guard mediaDetailViewController == currentViewController else {
Logger.verbose("ignoring stale delegate.")

View File

@ -607,7 +607,7 @@ public class MediaTileViewController: UICollectionViewController, MediaGalleryDe
}()
let deleteAction = ActionSheetAction(title: confirmationTitle, style: .destructive) { _ in
self.mediaGallery.delete(items: items, initiatedBy: self)
self.mediaGallery.delete(items: items, initiatedBy: self, deleteFromDB: true)
self.endSelectMode()
}

View File

@ -28,27 +28,27 @@ public class MediaGalleryDatabaseObserver: NSObject {
private typealias RowId = Int64
private var _pendingChanges: Set<RowId> = Set()
private var pendingChanges: Set<RowId> {
private var _pendingDeletes: Set<RowId> = Set()
private var pendingDeletes: Set<RowId> {
get {
AssertIsOnUIDatabaseObserverSerialQueue()
return _pendingChanges
return _pendingDeletes
}
set {
AssertIsOnUIDatabaseObserverSerialQueue()
_pendingChanges = newValue
_pendingDeletes = newValue
}
}
private var _committedChanges: Set<RowId>?
private var committedChanges: Set<RowId>? {
private var _committedDeletes: Set<RowId>?
private var committedDeletes: Set<RowId>? {
get {
AssertIsOnMainThread()
return _committedChanges
return _committedDeletes
}
set {
AssertIsOnMainThread()
_committedChanges = newValue
_committedDeletes = newValue
}
}
@ -71,25 +71,25 @@ extension MediaGalleryDatabaseObserver: DatabaseSnapshotDelegate {
public func snapshotTransactionDidChange(with event: DatabaseEvent) {
AssertIsOnUIDatabaseObserverSerialQueue()
if event.tableName == AttachmentRecord.databaseTableName {
_ = pendingChanges.insert(event.rowID)
if event.kind == .delete && event.tableName == AttachmentRecord.databaseTableName {
_ = pendingDeletes.insert(event.rowID)
}
}
public func snapshotTransactionDidCommit(db: Database) {
AssertIsOnUIDatabaseObserverSerialQueue()
let pendingChanges = self.pendingChanges
self.pendingChanges = Set()
let pendingDeletes = self.pendingDeletes
self.pendingDeletes = Set()
DispatchQueue.main.async {
self.committedChanges = pendingChanges
self.committedDeletes = pendingDeletes
}
}
public func snapshotTransactionDidRollback(db: Database) {
owsFailDebug("we should verify this works if we ever start to use rollbacks")
AssertIsOnUIDatabaseObserverSerialQueue()
pendingChanges = Set()
pendingDeletes = Set()
}
// MARK: - Snapshot LifeCycle (Post Commit)
@ -98,14 +98,14 @@ extension MediaGalleryDatabaseObserver: DatabaseSnapshotDelegate {
AssertIsOnMainThread()
do {
guard let committedChanges = self.committedChanges else {
throw OWSErrorMakeAssertionError("committedChanges were unexpectedly nil")
guard let committedDeletes = self.committedDeletes else {
throw OWSErrorMakeAssertionError("committedDeletes were unexpectedly nil")
}
self.committedChanges = nil
self.committedDeletes = nil
assert(self.deletedAttachmentIds == nil)
try databaseStorage.uiReadThrows { transaction in
self.deletedAttachmentIds = try self.attachmentIds(forRowIds: committedChanges, transaction: transaction)
self.deletedAttachmentIds = try self.attachmentIds(forRowIds: committedDeletes, transaction: transaction)
}
for delegate in snapshotDelegates {
delegate.mediaGalleryDatabaseSnapshotWillUpdate()