Auto-upload: with "delete from camera roll" active, photos that are already present on the server are not deleted from the camera roll

Aperta
#4,335 2 commenti 1 reazione 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

  • #4395 di @mvanhorn — chiusa senza merge

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
72/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
swift
Ambito
mobile

Direzione di ricerca

Start in NCAutoUpload.swift around autoUploadBackgroundSync at line 376, then trace removeUploadedAssetsIfNeeded and the handling of a successful PROPFIND. Reproduce with existing server photos and remove_photo_CameraRoll enabled; done means those already-present assets are removed from the camera roll without changing the handling of upload errors.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug
How to use GitHub
  • Please use the 👍 reaction to show that you are affected by the same issue.
  • Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue.
  • Subscribe to receive notifications on status change and new comments.

Steps to reproduce
  1. reinstall app with pictures (previously uploaded to the server) still present on the camera roll (for whatever reason, see #4307, #4306 for instance)
  2. setup app for automatic uploading, "new_photos_only" not set, and "remove_photo_CameraRoll" set
  3. maintain app in foreground with a good connection (test setup: iPhone and server on the same LAN)
  4. wait for upload termination
Expected behaviour

I believe these files should be deleted from the camera roll (at least that's the exact reason I reinstalled the app)

Actual behaviour

Out of more than 600 files, only 58 got deleted (including videos that were not uploaded because of #4304 ).

Analysis

When a photo is found in the camera roll, autoUploadBackgroundSync (NCAutoUpload.swift:376) will PROPFIND the server, with 3 outcomes

  • .errorCode == 404: extract and upload file
  • other errors (503, 401, 423, ...): do nothing, we'll see on next pass
  • .success: file exists, deletes the local asset row -> this is where the decision is made to not delete the file

Note: the existence check is only based on the name of the file. In my case, with default _filenamemask_ and _autoupload_create_subfolder_ set, there is a very thin chance this could cause collisions, so it's fine. Perhaps other users may encounter issues -- and perhaps changing this is way too costly..

A remark: a few more logs could help better diagnose the auto-upload system, such as upload successes, photos deletion requests (removeUploadedAssetsIfNeeded), logging getCameraRollAssets filtered vs unfiltered counts, etc.

            let unfilteredCount = collections.reduce(0) { $0 + PHAsset.fetchAssets(in: $1, options: nil).count }
            nkLog(tag: self.global.logTagBgSync,
                  message: "getCameraRollAssets: collections=\(collections.count), filteredCount=\(allAssets.count), unfilteredLibraryCount=\(unfilteredCount)",
                  minimumLogLevel: .verbose)
Logs

issue-existing-photos-not-deleted-1.txt

Reasoning or why should it be changed/implemented?

Like I said, IMHO the app should not make the difference between a file that is already there and one that has just been uploaded, so the setting "remove_photo_CameraRoll" should apply to both. Plus, with current auto-upload issues, that would have given me an workaround to clean my camera roll ;). Right now, though, I can safely clear my camera roll

Environment data

iOS version: iOS 18.7

Nextcloud iOS app version: 35.0.0.8

Server operating system: Nextcloud AIO 14.1.1

Web server: Nextcloud AIO 14.1.1

Database: Nextcloud AIO 14.1.1

PHP version: Nextcloud AIO 14.1.1

Nextcloud version: 34.0.4

Lingua principale
Swift
Stelle
2.5k
Fork
1k
Merge medio
2g 1h
PR unite (30g)
21

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di nextcloud/ios

Tutte le issue di nextcloud/ios

Issue simili

Altre issue su Swift

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.