diff --git a/cmdupload/e2e_upload_folder_test.go b/cmdupload/e2e_upload_folder_test.go index 2790d8f6..6b91d79a 100644 --- a/cmdupload/e2e_upload_folder_test.go +++ b/cmdupload/e2e_upload_folder_test.go @@ -161,6 +161,7 @@ func Test_DescriptionAndFavorite(t *testing.T) { name: "Test_DescriptionAndFavorite", args: []string{ "-google-photos", + "-discard-archived", "TEST_DATA/Takeout1", }, resetImmich: true, diff --git a/cmdupload/upload.go b/cmdupload/upload.go index b38f6d99..66b3b205 100644 --- a/cmdupload/upload.go +++ b/cmdupload/upload.go @@ -68,6 +68,7 @@ type UpCmd struct { CreateStacks bool // Stack jpg/raw/burst (Default: TRUE) StackJpgRaws bool // Stack jpg/raw (Default: TRUE) StackBurst bool // Stack burst (Default: TRUE) + DiscardArchived bool // Don't import archived assets (Default: FALSE) BrowserConfig Configuration @@ -136,6 +137,10 @@ func NewUpCmd(ctx context.Context, ic iClient, log logger.Logger, args []string) "use-album-folder-as-name", " google-photos only: Use folder name and ignore albums' title (default:FALSE)", myflag.BoolFlagFn(&app.UseFolderAsAlbumName, false)) + cmd.BoolFunc( + "discard-archived", + " google-photos only: Do not import archived photos (default FALSE)", myflag.BoolFlagFn(&app.DiscardArchived, false)) + cmd.BoolFunc( "create-stacks", "Stack jpg/raw or bursts (default TRUE)", myflag.BoolFlagFn(&app.CreateStacks, true)) @@ -332,6 +337,11 @@ func (app *UpCmd) handleAsset(ctx context.Context, a *browser.LocalAssetFile) er return nil } + if app.DiscardArchived && a.Archived { + app.journalAsset(a, logger.NOT_SELECTED, "asset excluded because archives are discarded") + return nil + } + if app.DateRange.IsSet() { d := a.DateTaken if d.IsZero() { @@ -474,6 +484,7 @@ func (app *UpCmd) handleAsset(ctx context.Context, a *browser.LocalAssetFile) er shouldUpdate = shouldUpdate || a.Favorite shouldUpdate = shouldUpdate || a.Longitude != 0 || a.Latitude != 0 shouldUpdate = shouldUpdate || !a.DateTaken.IsZero() + shouldUpdate = shouldUpdate || a.Archived if !app.DryRun && shouldUpdate { _, err := app.client.UpdateAsset(ctx, ID, a) diff --git a/docs/releases.md b/docs/releases.md index 48a92e12..7729bb41 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1,6 +1,9 @@ # Release notes -## Release next +## Release 0.9.6 + +### feat: control archived Google photos +`-discard-archived` deactivate the import of archived photos. ### feat: better handling of boolean flags Just mention the `-flag` to activate the functionality diff --git a/readme.md b/readme.md index 483935f9..7c423218 100644 --- a/readme.md +++ b/readme.md @@ -81,7 +81,7 @@ Fine-tune import based on specific dates:
### Google photos options: -Specialized options for Google Photos management: +Specialized options for Google Photos management:
`-google-photos` import from a Google Photos structured archive, recreating corresponding albums.
`-from-album "GP Album"` Create the album in `immich` and import album's assets.
`-create-albums ` Controls creation of Google Photos albums in Immich (default TRUE).
@@ -89,6 +89,7 @@ Specialized options for Google Photos management: `-use-album-folder-as-name ` Use the folder's name instead of the album title (default: FALSE).
`-keep-partner ` Specifies inclusion or exclusion of partner-taken photos (default: TRUE).
`-partner-album "partner's album"` import assets from partner into given album.
+`-discard-archived ` don't import archived assets (default: FALSE).
Read [here](docs/google-takeout.md) to understand how Google Photos takeout isn't easy to handle.