* feat(mobile): Adds file upload progress stats: current upload file size uploaded, current file size and formatted bytes per second upload speed. Closes#7379
* chore(mobile): Fix stan issues
* chore(mobile): Remove non-'en-US' translations, as I saw on another PR review (just looking around) that localisation is done via Localizely and this was the instruction (to only provide the en-US localisation).
* fix(mobile): Provide boundary checks to ensure overflow issues are accounted for on erroneous upload speed calculation, sometimes the numbers received back from the upload handler can be a bit wild.
* fix(mobile): Some heuristic bug fixing. Whilst thinking what could trigger overflow issues or 'zero' readouts, left over values from the previous file may do that. So adding the last upload sent bytes to the values to be reset may help! The time isn't necessary, as the period/cycle is inconsequential in this circumstance, well it should be anyway.
* fix(mobile): Actually, in combination to the last commit, some more heuristic bug fixing. I was thinking it would be advantageous not to reset the update time, as it would trigger a quicker first upload speed calculation. However, I realised that could also cause the calculation to be incorrect on the first cycle as the period wouldn't align. Not really sure if it would be a big deal, but I'm taking wild guesses in the dark here. Again, some purely heuristic debugging as I can't re-produce the underlying issue. This is mainly just ensuring that the state is fully reset and is a known state at the beginning of each file as a common strategy to reduce issues.
* refactor(mobile): Move the UI for the file progress to underneath the progress bar, it makes more sense there than in the file information table which contains only static information pertaining to the file itself. Switching to a monospace font to keep the UI from jumping around as the numbers change.
* refactor(mobile): In order to have the UI always present an 'active' upload speed (as per the discussion on PR #7760), this stores the 'upload speeds' (capped at the latest 10) in a list and calculates the current upload speed as the average over them. This way the UI can always display a 'constant' upload speed during uploading, instead of starting a fresh when each file starts uploading. Limiting it to the 10 latest keeps the average somewhat recent and ensures some level of sensible memory allocation.
* Adds image provider
* uses image provider
* wip load preview
* wip everything but activity asset thumbnail needs some help with a remote id
* Immich provider used in gallery
* First draft of the immich image provider, working nicely!
* Removed OriginalImageProvider
* Fixes for thumbnails
* feat(mobile): thumbhash support (#7028)
* feat(mobile): thumbhash support
* perf(mobile): store bmp thumbhash bytes in Isar
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* Uses octoimage for fade in and placeholders
* fixes thumbnails, removes unused values, adds better thumbnail size
* removes thumbhash support for now
* Forgot one thumbhash removal
* Use big thumbnail for local image on ios
* fix(mobile): Multipart image loading for iOS double swipe (#7064)
* uses local thumb first
* Multipart thumbnail
* Clean up file delete
* await file delete
* Fynn's comments, made thumbnail smaller and doesn't crash on erroring out on thumbnail
* lint
---------
Co-authored-by: Marty Fuhry <marty@fuhry.farm>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Moves http client to global private place for reuse
* Got rid of usePreview for local image providers since we always show a thumbnail anyway first
* linter
---------
Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Marty Fuhry <marty@fuhry.farm>
* feat(mobile): unify asset grid multiselect actions
* add favorite & archive page
* show edit date&place on main photos screen
* Reposition exit button
* Sort favorite with the same order as other view
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* chore: text correction
* fix: update activities stat only when the widget is mounted
* feat(mobile): edit date time
* feat(mobile): edit location
* chore(build): update gradle wrapper - 7.6.3
* style: dropdownmenu styling
* style: wrap locationpicker in singlechildscrollview
* test: add unit test for getTZAdjustedTimeAndOffset
* pr changes
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This fixes issue #4397 and automatically adds the https protocol to the server endpoint url if it is missing
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix(mobile): use proper context for popping out from share
* mobile: use proper context for popping
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* refactor: move all extensions to separate package
* refactor(mobile): add BuildContext extension
* refactor(mobile): use theme getters from context
* refactor(mobile): use media query size from context
* refactor(mobile): use auto router methods from context
* refactor(mobile): use navigator methods from context
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* fix(server): global activity like duplicate search
* mobile: user_circle_avatar - fallback to text icon if no profile pic available
* mobile: use favourite icon in search "your activity"
* feat(mobile): shared album activities
* mobile: align hearts with user profile icon
* styling
* replace bottom sheet with dismissible
* add auto focus to the input
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* add shared links page
* feat(mobile): shared link items
* feat(mobile): create / edit shared links page
* server: add changeExpiryTime to SharedLinkEditDto
* fix(mobile): edit expiry to never
* mobile: add icon when shares list is empty
* mobile: create new share from album / timeline
* mobile: add translation texts
* mobile: minor ui fixes
* fix: handle serverURL with /api path
* mobile: show share link on successful creation
* mobile: shared links list - 2 column layout
* mobile: use sharedlink pod class instead of dto
* mobile: show error on link creation
* mobile: show share icon only when remote assets are in selection
* mobile: use server endpoint instead of server url
* styling
* styling
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix: exclude albums filter in backup provider
* refactor: Separate builder methods for Top Control App Bar buttons
* fix: Show download button only for Remote only assets
* fix(mobile): Force Refresh duration is too low to trigger it consistently
* feat(mobile): Make Buttons dynamic in Home Selection DraggableScrollableSheet
* feat(mobile): Manual Asset upload
* refactor(mobile): Replace _showToast with ImmichToast calls
* refactor(mobile): home_page selectionAssetState handling
* chore(mobile): min and initial size of DraggableScrollState increased
This is to prevent the buttons in the bottom sheet getting clipped behind the 3 way navigation buttons
in the default density of Android devices
* feat(mobile): notifications for manual upload progress
* wording
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Add API service
* Added service, provider
* merge main
* update pubspec
* styling
* dev: add person search result page
* dev: display person asset on page
* dev: add rename form
* style form
* dev: mechanism to add name to faces
* styling
* fix bad merge
* update api
* test
* revert
* Add header widget
* change name
* show all people page
* fix test
* pr feedback
* Add name to app bar
* feedback
* styling
* Allow upload of AVIF and x-canon-cr2 mime types
* Allow generic RAW file mime type image/x-dcraw
* Another place to uploading avif and cr2
* Determine mime type for .avif and .cr2 files correctly
* Update asset-upload.config.spec.ts for CR2 and AVIF files
* More changes for AVIF & CR2 files
Found some other places where avif and cr2 should be mentioned.
* Merge in upstream changes
* Allow uploading and using most of the formats that libraw supports
* Add raw files to allowable mobile uploads
* Update asset-upload.config.spec.ts
Fix errant commas.
* Update asset-utils.ts
Remove duplicate entry in hash table.
* Fix missing k25 mime type in server upload check.
Fix prettier formatting message in web file-uploader.
* fix test
---------
Co-authored-by: Elliot Lee <sopwith@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* use imagemagick and libraw for raw image support
imagemagick and libraw have generally good support for raw images, including
Sony's ARW format. These tools should also allow Immich to support many more
image formats in future without any major code changes.
https://www.libraw.org/supported-cameras
I've tested and verified this change with .ARW files and other standard formats.
Fixes: #2156
* Add additional type for awr
* pr feedback
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Insta360 "raw" formats `insv` and `insp` are actually
mp4 (video) and jpeg (picture) respectively.
However, we don't want user to rename the original files,
because they follow Insta360 convention, which is required
by Insta360 Studio.
* compare different sha1 implementations
* remove openssl sha1
* sync via checksum
* hash assets in batches
* hash in background, show spinner in tab
* undo tmp changes
* migrate by clearing assets
* ignore duplicate assets
* error handling
* trigger sync/merge after download and update view
* review feedback improvements
* hash in background isolate on iOS
* rework linking assets with existing from DB
* fine-grained errors on unique index violation
* hash lenth validation
* revert compute in background on iOS
* ignore duplicate assets on device
* fix bug with batching based on accumulated size
---------
Co-authored-by: Fynn Petersen-Frey <zoodyy@users.noreply.github.com>
* feat(mobile): partner sharing
* getAllAssets for other users
* i18n
* fix tests
* try to fix web tests
* shared with/by confusion
* error logging
* guard against outdated server version
* fix(mobile): allow syncing duplicate local IDs
* enable to run isar unit tests on CI
* serialize sync operations, add pull to refresh on timeline
---------
Co-authored-by: Fynn Petersen-Frey <zoodyy@users.noreply.github.com>
* Added placeholder for search explore
* refactor immich asset grid to use ref and provider
* all videos page
* got favorites, recently added, videos, and motion videos all using the immich grid
* Fixed issue with hero animations
* theming
* localization
* delete empty file
* style text
* Styling icons
* more styling
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feature(mobile): no longer wait for background backup in settings
migrate all Hive boxes required for the backup process to Isar
* add final modifier
* feature(mobile): sync assets, albums & users to local database on device
* try to fix tests
* move DB sync operations to new SyncService
* clear db on user logout
* fix reason for endless loading timeline
* fix error when deleting album
* fix thumbnail of device albums
* add a few comments
* fix Hive box not open in album service when loading local assets
* adjust tests to int IDs
* fix bug: show all albums when Recent is selected
* update generated api
* reworked Recents album isAll handling
* guard against wrongly interleaved sync operations
* fix: timeline asset ordering (sort asset state by created at)
* fix: sort assets in albums by created at
* refactor(mobile): add Isar DB & Store class
new Store: globally accessible key-value store like Hive (but based on Isar)
replace first few places of Hive usage with the new Store
* reduce max. DB size to prevent errors on older iOS devices
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat(.well-known): add .well-known/immich to reference API endpoint
* feat(.well-known): make schema optional (defaults to https)
* adjust method comment to be a little less confusing
* fix casting issue with resovled url
* include when checking Well-known, update server hint
* add validation for login form's server url
* consolidate common process into resolveAndSetEndpoint
* fix missed prettier formatting
* revert translation changes
* update environment variable description, hopefully a bit clearer
* rename environment variable to IMMICH_API_URL_EXTERNAL
* comment out optional env variables
* fix(web): browser-side api client to include authorization token
* Revert "fix(web): browser-side api client to include authorization token"
This reverts commit 60e338938f.
* remove multi-domain related changes
* feat(mobile): use cached asset info if unchanged instead of downloading all assets
This adds an HTTP ETag to the getAllAssets endpoint and client-side support in the app.
If locally cache content is identical to the content on the server, the potentially large list of all assets does not need to be downloaded.
* use ts import instead of require
* Use custom caches in all modules
* Cache Settings
* Fix wrong key
* Create custom cache repository based on hive
* Show cache usage in settings
* Show cache sizes
* Change settings ranges and default value
* Handle cache clear by operating system
* Resolve review comments
* styling light and dark theme
* Icon topbar
* Fixed app bar title dark theme
* Fixed issue with getting thumbnail for things
* Refactor sharing page
* Refactor scroll thumb
* Refactor chip in auto backup indiation button
* Refactor sharing page
* Added theme toggle
* Up version for testflight build
* Refactor backup controller page
* Refactor album selection page
* refactor album pages
* Refactor gradient color profile header
* Added theme switcher
* Register app theme correctly
* Added locale to the app
* Added translation key
* Styling for bottomsheet colors
* up server version
* Fixed font size
* Fixed overlapsed sliverappbar on photos screen
* First performance tweaks (caching and rendering improvemetns)
* Revert asset response caching
* 3-step image loading in asset viewer
* Prevent panning and zooming until full-scale version is loaded
* Loading indicator
* Adapt to gallery PR
* Cleanup
* Dart format
* Fix exif sheet
* Disable three stage loading until settings are available
* Added webp as supported file type, allow continue upload when an image fail
* Added webp as supported file type, allow continue upload when an image fail
* Solved issue with bad assets cause backup to stop
* Support HEIC/HEIF backup
* Storing backup directly from original file from the phone
* Directly read and backup video file - Improve performance on video backup
* Implementing video upload features
* setup image resize processor
* Add video thumbnail with duration and icon
* Fixed issue with video upload timeout and upper case file type on ios
* Added video player page
* Added video player page
* Fixing video player not play on ios
* Added partial file streaming for ios/android video request
* Added nginx as proxy server for better file serving
* update nginx and docker-compose file
* Video player working correctly
* Video player working correctly
* Split duration to the second