* add store entity and migration
* make store service take both isar and drift repos
* migrate and switch store on beta timeline state change
* chore: make drift variables final
* dispose old store before switching repos
* use store to update values for beta timeline
* change log service to use the proper store
* migrate store when beta already enabled
* use isar repository to check beta timeline in store service
* remove unused update method from store repo
* dispose after create
* change watchAll signature in store repo
* fix test
* rename init isar to initDB
* request user to close and reopen on beta migration
* fix tests
* handle empty version in migration
* wait for cache to be populated after migration
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* skip albums selected or excluded from backups from deletions
* filter empty local albums from library page
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* platform image providers
* use key
* fix cache manager
* more logs, cancel on dispose instead
* split into separate files
* fix saving to cache
* cancel multi-stage provider
* refactored `getInitialImage`
* only wait for disposal for full images
* cached image works
* formatting
* lower asset viewer ram usage
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix(mobile): newest/oldest album sort
* chore: use sqlite to determine album asset timestamps
* Fix missing future
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix: async handling of sort
* chore: tests
* chore: code review changes
* fix: use created at for newest asset
* fix: use localDateTime for sorting
* chore: cleanup
* chore: use final
* feat: loading indicator
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
- App will now kick off hashing after local sync if the lifecycle is in resumed or active state
- We now wait for hashing to complete before we kick off the upload process
* feat: drift edit time and date action
* feat: add edit button on asset viewer bottom sheet
* update localDateTime column in addition to createdAt to keep consistency
* fix: dont update local dateTime
Server calcs this anyway and it will be synced when the change is applied. We don't use localDateTime on mobile so there is no reason to update this value
* fix: padding around edit icon in ListTile
Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
* chore: format
* fix: hide date edit control when asset does not have a remote
* fix: pull timezones correctly from image
---------
Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
* fix(download): handle completed downloads and refresh albums
* fix(download): remove use of outdated AlbumService
---------
Co-authored-by: Peter Ombodi <peter.ombodi@gmail.com>
* fix user icons in album view
* revert updateUsersV1 change
* fix: UserDto merge issues
* fix: update user entity
* revert what I thought were merge issues
turns out drift cant figure out when it needs to gen a file...
* fix removed line
* handle defaults for older servers
* feat: checkpoint migrations
* fix: use parenthesis instead of brackets
* Update 1753800911775-ProfileImageCheckpointRemoval.ts
* fix: sync stream updateUsersV1
* show only local assets from albums selected for backup
# Conflicts:
# mobile/lib/infrastructure/repositories/db.repository.drift.dart
* ignore backup selection
* fix: backup album ownerId
* fix: backup album ownerId
* only show local only assets that are selected for backup
* add index on visibility and backup selection
* fix: video not playing in search view
* remove safe area from bottom bar
* refactor stack count with a CTE and local asset with a SELECT
* fix lint
* remove redundant COALESCE
* remove stack count from main timeline query
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* show beta sync stats
* show status next to jobs
* use drift devtools reset database impl
* dcm fixes
* fix: hash count
* styling
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat: add toggle to switch between Isar and Sqlite
* reset sqlite on beta
* start sync on app open in new timeline
* fix lint
* migrate hashes when new timeline is selected
* migrate hashes immediately after beta is enabled
* show loading indicator in change timeline page
* some stylings
* fix some styling issue
* release resources on isolate close
* replace route and styling
* handle migration back to old timeline
* check if a provider is mounted before calling dispose on it
* styling
* styling and button
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* feat(mobile): drift place page
* merge main
* feat(mobile): drift place detail page (#19915)
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat(mobile): drift local albums page
* fix: lint
* refactor: use AsyncValue
* fix: lint
* local album thumbnail
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* reduce timeline rebuilds
* feat: adds bottom sheet map and actions (#19692)
* adds bottom sheet map and actions
* PR feedbacks
* only reload the asset viewer if asset is changed
* styling tweak
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* rename singleton and remove event prefix
* adds bottom sheet map and actions
* PR feedbacks
* refactor: use provider for viewer state
* feat: adds top and bottom app bar
* add safe area to bottom app bar
* change app and bottom bar color
* viewer - always have black background
* use the full width for the bottom sheet on landscape as well
* constraint the bottom sheet to not expand all the way
* add padding for location details in landscape
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* add full image provider and refactor thumb providers
* photo_view updates
* wip: asset-viewer
* fix controller dispose on page change
* wip: bottom sheet
* fix interactions
* more bottomsheet changes
* generate schema
* PR feedback
* refactor asset viewer
* never rotate and fix background on page change
* use photoview as the loading builder
* precache after delay
* claude: optimizing rebuild of image provider
* claude: optimizing image decoding and caching
* use proper cache for new full size image providers
* chore: load local HEIC fullsize for iOS
* make controller callbacks nullable
* remove imageprovider cache
* do not handle drag gestures when zoomed
* use loadOriginal setting for HEIC / larger images
* preload assets outside timer
* never use same controllers in photo-view gallery
* fix: cannot scroll down once swipe with bottom sheet
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat(mobile): add album asset sync
* add SyncAlbumToAssetDeleteV1 to openapi-spec
* update delete queries to use where in statements
* clear remote album when clear remote data
* fix: bad merge
* fix: bad merge
* fix: _SyncAckV1 return type
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: wuzihao051119 <wuzihao051119@outlook.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
do not skip cloud albums during local sync
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat: working widgets
* chore/feat: cleaned up API, added album picker to random widget
* album filtering for requests
* check album and throw if not found
* fix app IDs and project configuration
* switch to repository/service model for updating widgets
* fix: remove home widget import
* revert info.plist formatting changes
* ran swift-format on widget code
* more formatting changes (this time run from xcode)
* show memory on widget picker snapshot
* fix: dart changes from code review
* fix: swift code review changes (not including task groups)
* fix: use task groups to run image retrievals concurrently, get rid of do catch in favor of if let
* chore: cleanup widget service in dart app
* chore: format swift
* fix: remove comma
why does xcode not freak out over this >:(
* switch to preview size for thumbnail
* chore: cropped large image
* fix: properly resize widgets so we dont OOM
* fix: set app group on logout
happens on first install
* fix: stupid app ids
* fix: revert back to thumbnail
we are hitting OOM exceptions due to resizing, once we have on-the-fly resizing on server this can be upgraded
* fix: more memory efficient resizing method, remove extraneous resize commands from API call
* fix: random widget use 12 entries instead of 24 to save memory
* fix: modify duration of entries to 20 minutes and only generate 10 at a time to avoid OOM
* feat: toggle to show album name on random widget
* Podfile lock
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* initial cast framework complete and mocked cast dialog working
* wip casting
* casting works!
just need to add session key check and remote video controls
* cleanup of classes
* add session expiration checks
* cast dialog now shows connected device at top of list with a list header. Discovered devices are also cached for app session.
* cast video player finalized
* show fullsize assets on casting
* translation already happens on the text element
* remove prints
* fix lintings
* code review changes from @shenlong-tanwen
* fix connect method override
* fix alphabetization
* remove important
* filter chromecast audio devices
* fix some disconnect command ordering issues and unawaited futures
* remove prints
* only disconnect if we are connected
* don't try to reconnect if its the current device
* add cast button to top bar
* format sessions api
* more formatting issues fixed
* add snack bar to tell user that we cannot cast an asset that is not uploaded to server
* make casting icon change to primary color when casting is active
* only show casting snackbar if we are casting
* dont show cast button if asset is remote and we are not casting
* stop playing media if we seek to an asset that is not remote
* remove https check since it works with local http IP addresses
* remove unneeded imports
* fix recasting when socket closes
* fix info plist formatting
* only show cast button if there is an active websocket connection (ie the server is accessible)
* add device capability bitmask checks
* small comment about bitmask
* fix(mobile): remove dialog wrapper around share asset
* removed from multiple share and delete share dialog class
* Revert change to ShareDialog and useRootNavigator: false for showDialog
* feat(mobile): add album description functionality
- Introduced a new optional `description` field in the `Album` entity.
- Updated `AlbumViewerPageState` to manage `editDescriptionText`.
- Created `AlbumDescription` and `AlbumViewerEditableDescription` widgets for displaying and editing album descriptions.
- Enhanced `CreateAlbumPage` to include a description input field.
- Implemented backend support for updating album descriptions in `AlbumApiRepository` and `AlbumService`.
- Updated sync logic to handle album descriptions during data synchronization.
- Adjusted UI components to accommodate the new description feature.
* fix dart analysis error
* remove comment that shouldn't be there
* Album header styling
* fix: disable edit after album creation
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat(mobile): add bulk download functionality and update UI messages
- Added `downloadAll` method to `IDownloadRepository` and its implementation in `DownloadRepository` to handle multiple asset downloads.
- Implemented `downloadAllAsset` in `DownloadStateNotifier` to trigger bulk downloads.
- Updated `DownloadService` to create download tasks for all selected assets.
- Enhanced UI with new download success and failure messages in `en.json`.
- Added download button to `ControlBottomAppBar` and integrated download functionality in `MultiselectGrid`.
* translations use i18n method t()
* Update mobile/lib/services/download.service.dart
Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
* fix(mobile): update download logic in DownloadService
- Changed the download method to utilize downloadAll for handling multiple tasks.
- Simplified remoteId check by removing unnecessary condition.
* sort i18n keys
* remove the download signature from interface and logic as we use the downloadAll now
---------
Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
* feat: delta sync
* fix: ignore iCloud assets
* feat: dev logs
* add full sync button
* remove photo_manager dep for sync
* misc logs and fix
* add time taken to DLog
* fix: build release iOS
* ios sync go brrr
* rename local sync service
* update isar fork
* rename to platform assets / albums
* fix ci check
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>