Merge branch 'mkirk/only-watch-deletes' into release/3.0.0
This commit is contained in:
commit
56e9a91b36
@ -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;
|
||||
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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.")
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user