2021-02-05 08:58:48 +01:00
|
|
|
//
|
2021-02-07 07:42:50 +01:00
|
|
|
// HomeTimelineViewController+DebugAction.swift
|
2021-02-05 08:58:48 +01:00
|
|
|
// Mastodon
|
|
|
|
//
|
|
|
|
// Created by MainasuK Cirno on 2021-2-5.
|
|
|
|
//
|
|
|
|
|
|
|
|
import os.log
|
|
|
|
import UIKit
|
2021-03-02 08:51:16 +01:00
|
|
|
import CoreData
|
|
|
|
import CoreDataStack
|
2021-02-05 08:58:48 +01:00
|
|
|
|
|
|
|
#if DEBUG
|
2021-02-07 07:42:50 +01:00
|
|
|
extension HomeTimelineViewController {
|
2021-02-05 08:58:48 +01:00
|
|
|
var debugMenu: UIMenu {
|
|
|
|
let menu = UIMenu(
|
|
|
|
title: "Debug Tools",
|
|
|
|
image: nil,
|
|
|
|
identifier: nil,
|
|
|
|
options: .displayInline,
|
|
|
|
children: [
|
2021-03-02 08:51:16 +01:00
|
|
|
dropMenu,
|
2021-02-24 11:07:11 +01:00
|
|
|
UIAction(title: "Show Public Timeline", image: UIImage(systemName: "list.dash"), attributes: []) { [weak self] action in
|
|
|
|
guard let self = self else { return }
|
|
|
|
self.showPublicTimelineAction(action)
|
|
|
|
},
|
2021-02-05 08:58:48 +01:00
|
|
|
UIAction(title: "Sign Out", image: UIImage(systemName: "escape"), attributes: .destructive) { [weak self] action in
|
|
|
|
guard let self = self else { return }
|
|
|
|
self.signOutAction(action)
|
|
|
|
}
|
|
|
|
]
|
|
|
|
)
|
|
|
|
return menu
|
|
|
|
}
|
2021-03-02 08:51:16 +01:00
|
|
|
|
|
|
|
var dropMenu: UIMenu {
|
|
|
|
return UIMenu(
|
|
|
|
title: "Drop…",
|
|
|
|
image: UIImage(systemName: "minus.circle"),
|
|
|
|
identifier: nil,
|
|
|
|
options: [],
|
|
|
|
children: [50, 100, 150, 200, 250, 300].map { count in
|
|
|
|
UIAction(title: "Drop Recent \(count) Tweets", image: nil, attributes: [], handler: { [weak self] action in
|
|
|
|
guard let self = self else { return }
|
|
|
|
self.dropRecentTweetsAction(action, count: count)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
2021-02-05 08:58:48 +01:00
|
|
|
}
|
|
|
|
|
2021-02-07 07:42:50 +01:00
|
|
|
extension HomeTimelineViewController {
|
2021-02-05 08:58:48 +01:00
|
|
|
|
2021-03-02 08:51:16 +01:00
|
|
|
@objc private func dropRecentTweetsAction(_ sender: UIAction, count: Int) {
|
|
|
|
guard let diffableDataSource = viewModel.diffableDataSource else { return }
|
|
|
|
let snapshotTransitioning = diffableDataSource.snapshot()
|
|
|
|
|
|
|
|
let droppingObjectIDs = snapshotTransitioning.itemIdentifiers.prefix(count).compactMap { item -> NSManagedObjectID? in
|
|
|
|
switch item {
|
|
|
|
case .homeTimelineIndex(let objectID, _): return objectID
|
|
|
|
default: return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
var droppingTootObjectIDs: [NSManagedObjectID] = []
|
|
|
|
context.apiService.backgroundManagedObjectContext.performChanges { [weak self] in
|
|
|
|
guard let self = self else { return }
|
|
|
|
for objectID in droppingObjectIDs {
|
|
|
|
guard let homeTimelineIndex = try? self.context.apiService.backgroundManagedObjectContext.existingObject(with: objectID) as? HomeTimelineIndex else { continue }
|
|
|
|
droppingTootObjectIDs.append(homeTimelineIndex.toot.objectID)
|
|
|
|
self.context.apiService.backgroundManagedObjectContext.delete(homeTimelineIndex)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.sink { [weak self] result in
|
|
|
|
guard let self = self else { return }
|
|
|
|
switch result {
|
|
|
|
case .success:
|
|
|
|
self.context.apiService.backgroundManagedObjectContext.performChanges { [weak self] in
|
|
|
|
guard let self = self else { return }
|
|
|
|
for objectID in droppingTootObjectIDs {
|
|
|
|
guard let toot = try? self.context.apiService.backgroundManagedObjectContext.existingObject(with: objectID) as? Toot else { continue }
|
|
|
|
self.context.apiService.backgroundManagedObjectContext.delete(toot)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case .failure(let error):
|
|
|
|
assertionFailure(error.localizedDescription)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.store(in: &disposeBag)
|
|
|
|
}
|
|
|
|
|
2021-02-24 11:07:11 +01:00
|
|
|
@objc private func showPublicTimelineAction(_ sender: UIAction) {
|
|
|
|
coordinator.present(scene: .publicTimeline, from: self, transition: .show)
|
|
|
|
}
|
|
|
|
|
2021-02-05 08:58:48 +01:00
|
|
|
}
|
|
|
|
#endif
|