switch to actions for flagged
- ID
2c52306- date
2023-05-13 13:29:24+00:00- author
Alex Chan <alex@alexwlchan.net>- parent
19c8508- message
switch to actions for flagged- changed files
4 files, 53 additions, 109 deletions
Changed files
actions/run_action.swift (1951) → actions/run_action.swift (2382)
diff --git a/actions/run_action.swift b/actions/run_action.swift
index 9efb986..4a9a4e2 100644
--- a/actions/run_action.swift
+++ b/actions/run_action.swift
@@ -36,6 +36,22 @@ func getPhotoWith(uuid: String) -> PHAsset {
}
}
+func isPhotoInAlbum(photo: PHAsset, collection: PHAssetCollection) -> Bool {
+ let collections = PHAssetCollection.fetchAssetCollectionsContaining(
+ photo, with: .album, options: nil
+ )
+
+ var result = false
+
+ collections.enumerateObjects({ (album, index, stop) in
+ if (album == collection) {
+ result = true
+ }
+ })
+
+ return result
+}
+
let arguments = CommandLine.arguments
guard arguments.count == 3 else {
@@ -52,25 +68,29 @@ let needsAction = getAlbumWith(name: "Needs Action")
let photo = getPhotoWith(uuid: arguments[1])
try PHPhotoLibrary.shared().performChangesAndWait {
+ let changeAsset = PHAssetChangeRequest(for: photo)
+
+ let changeFlagged =
+ PHAssetCollectionChangeRequest(for: flagged)!
+ let changeRejected =
+ PHAssetCollectionChangeRequest(for: rejected)!
+ let changeNeedsAction =
+ PHAssetCollectionChangeRequest(for: needsAction)!
+ let assets = [photo] as NSFastEnumeration
if action == "toggle-favorite" {
- let request = PHAssetChangeRequest(for: photo)
- request.isFavorite = !photo.isFavorite
+ changeAsset.isFavorite = !photo.isFavorite
}
-}
-// try PHPhotoLibrary.shared().performChangesAndWait {
-// let changeFlagged =
-// PHAssetCollectionChangeRequest(for: flagged)!
-// let changeRejected =
-// PHAssetCollectionChangeRequest(for: rejected)!
-// let changeNeedsAction =
-// PHAssetCollectionChangeRequest(for: needsAction)!
-//
-// let assets = [photo] as NSFastEnumeration
-//
-// changeFlagged.addAssets(assets)
-// changeRejected.removeAssets(assets)
-// changeNeedsAction.removeAssets(assets)
-// }
+ if action == "toggle-flagged" {
+ changeRejected.removeAssets(assets)
+ changeNeedsAction.removeAssets(assets)
+
+ if (isPhotoInAlbum(photo: photo, collection: flagged)) {
+ changeFlagged.addAssets(assets)
+ } else {
+ changeFlagged.removeAssets(assets)
+ }
+ }
+}
scripts/flag.swift (1687) → scripts/flag.swift (0)
diff --git a/scripts/flag.swift b/scripts/flag.swift
deleted file mode 100644
index 147317a..0000000
--- a/scripts/flag.swift
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env swift
-
-import Photos
-
-func getAlbumWith(name: String) -> PHAssetCollection {
- let collections =
- PHAssetCollection
- .fetchAssetCollections(with: .album, subtype: .albumRegular, options: nil)
-
- var thisAssetCollection: PHAssetCollection? = nil
-
- collections.enumerateObjects({ (album, index, stop) in
- let assetCollection = album
-
- if assetCollection.localizedTitle == Optional(name) {
- thisAssetCollection = assetCollection
- }
- })
-
- if thisAssetCollection != nil {
- return thisAssetCollection!
- } else {
- fputs("Unable to find album with name: \(name).\n", stderr)
- exit(1)
- }
-}
-
-func getPhotoWith(uuid: String) -> PHAsset {
- let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: [uuid], options: nil)
-
- if fetchResult.count == 1 {
- return fetchResult.firstObject!
- } else {
- fputs("Unable to find photo with ID: \(uuid).\n", stderr)
- exit(1)
- }
-}
-
-let arguments = CommandLine.arguments
-
-guard arguments.count == 2 else {
- fputs("Usage: \(arguments[0]) PHOTO_ID\n", stderr)
- exit(1)
-}
-
-let flagged = getAlbumWith(name: "Flagged")
-let rejected = getAlbumWith(name: "Rejected")
-let needsAction = getAlbumWith(name: "Needs Action")
-
-let photo = getPhotoWith(uuid: arguments[1])
-
-try PHPhotoLibrary.shared().performChangesAndWait {
- let changeFlagged =
- PHAssetCollectionChangeRequest(for: flagged)!
- let changeRejected =
- PHAssetCollectionChangeRequest(for: rejected)!
- let changeNeedsAction =
- PHAssetCollectionChangeRequest(for: needsAction)!
-
- let assets = [photo] as NSFastEnumeration
-
- changeFlagged.addAssets(assets)
- changeRejected.removeAssets(assets)
- changeNeedsAction.removeAssets(assets)
-}
server.py (6136) → server.py (6064)
diff --git a/server.py b/server.py
index c40995d..c035354 100755
--- a/server.py
+++ b/server.py
@@ -64,25 +64,14 @@ class PhotosData:
if action == 'toggle-favorite':
this_asset['isFavorite'] = not this_asset['isFavorite']
+ elif action == 'toggle-flagged':
+ this_asset['albums'].discard('Rejected')
+ this_asset['albums'].discard('Needs Action')
- self.get_response.cache_clear()
-
- def flag(self, local_identifier):
- subprocess.check_call(['swift', 'scripts/flag.swift', local_identifier])
-
- this_asset = self.all_assets[self.all_positions[local_identifier]]
-
- try:
- this_asset['albums'].remove('Rejected')
- except KeyError:
- pass
-
- try:
- this_asset['albums'].remove('Needs Action')
- except KeyError:
- pass
-
- this_asset['albums'].add('Flagged')
+ try:
+ this_asset['albums'].remove('Flagged')
+ except KeyError:
+ this_asset['albums'].add('Flagged')
this_asset['state'] = get_asset_state(this_asset)
@@ -178,11 +167,6 @@ def _perform_action(request, callback):
return redirect(url_for('index', localIdentifier=redirect_to))
-@app.route('/actions/flag')
-def flag():
- return _perform_action(request, photos_data.flag)
-
-
@app.route('/actions/reject')
def reject():
return _perform_action(request, photos_data.reject)
@@ -202,7 +186,10 @@ def run_action():
if action == 'toggle-favorite':
return redirect(url_for('index', localIdentifier=local_identifier))
-
+ else:
+ position = photos_data.all_positions[local_identifier]
+ redirect_to = photos_data.all_assets[position - 1]['localIdentifier']
+ return redirect(url_for('index', localIdentifier=redirect_to))
@app.route('/image')
def image():
templates/index.html (8152) → templates/index.html (8173)
diff --git a/templates/index.html b/templates/index.html
index 895d4ca..bb2e54e 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -202,14 +202,16 @@ document.onkeydown = function(e) {
{% if next_five %}
window.location = "/?localIdentifier={{ next_five[0]['localIdentifier'] }}";
{% endif %}
- } else if (e.key === "1") {
- window.location = "/actions/flag?localIdentifier={{ this_asset['localIdentifier'] }}";
+ } else
+ if (e.key === "1") {
+ window.location = "/actions?localIdentifier={{ this_asset['localIdentifier'] }}&action=toggle-flagged";
} else if (e.key === "2") {
window.location = "/actions/reject?localIdentifier={{ this_asset['localIdentifier'] }}";
} else if (e.key === "3") {
window.location = "/actions/needs_action?localIdentifier={{ this_asset['localIdentifier'] }}";
}
- else if (e.key === "f") {
+ else
+ if (e.key === "f") {
window.location = "/actions?localIdentifier={{ this_asset['localIdentifier'] }}&action=toggle-favorite";
}
}