* fix: add markFinished parameter to loadRequest and loadCodecRequest methods
* update loadRequest and loadCodecRequest methods to use isFinal
* Apply suggestions from code review
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
* remove redundant check
* fix: ensure isFinished is set correctly during cache eviction
* formatting
---------
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
* refactor: replace DispatchQueue + DispatchSemaphore with OperationQueue for image processing
* implement RequestRegistry and UnfairLock for managing cancellable requests
* implement requests registry for local and remote image processing
* remove Cancellable protocol and cancel method from request registry
* use mutex
---------
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* refactor listener tracking for image stream completers and fix early cancel call
* fix: improve cache listener identification in image stream tracking
* add documentation and test cases for listener tracking in ImageStreamCompleter
* fix: remove unnecessary image provision flag from listener tracking
* fix: override setImage method in cache aware listener tracker mixin
* fix: rename test file
* Add support for showing animated images in AssetViewer with AnimatedImageStreamCompleter
* Add GIF overlay to thumbnail tile for animated assets
* formatting
* require isAnimated parameter in image providers for better asset handling
* feat: refactor AnimatedImageStreamCompleter to use streams for codec loading and initial image handling
* formatting
* add isAnimatedImage property to BaseAsset
* remove ApiService.getRequestHeaders() usage
* feat(android): enhance playback style detection using MIME type
* feat(android): improve playback style detection for GIF and WebP formats
* fix(android): make playback style detection faster
* refactor(android): simplify XMP reading logic for API 29 and below
* update playback style detection documentation
* use DefaultImageHeaderParser instead of all available ones for webp playbackStyle type detection
* fix(android): detect supported version for special format column
* fix(android): remove unnecessary suppression for new API in special format check
* fix(android): change visibility of hasSpecialFormatColumn method to private
* feat: add playbackStyle to local asset entity and related database schema
* implement conversion function for playbackStyle in local sync service
* implement conversion function for playbackStyle in local sync service
* refactor: remove deducedPlaybackStyle from TrashedLocalAssetEntityData
* add playbackStyle column to trashed local asset entity
* make playbackStyle non-nullable across the mobile codebase
* Streamline playbackStyle backfill:
- only backfill local assets playbackStyle in flutter/dart code
- only update trashed local assets in db migration
* bump target database version to 23 and update migration logic for playbackStyle
* set playback_style to 0 in merged_asset.drift as its a getter in base asset
* run make pigeon
* Populate playbackStyle for trashed assets during native migration
* feat(mobile): add support for encoded image requests in local and remote image APIs
* fix(mobile): handle memory cleanup for cancelled image requests
* refactor(mobile): simplify memory management and response handling for encoded image requests
* fix(mobile): correct formatting in cancellation check for image requests
* Apply suggestion from @mertalev
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
* refactor(mobile): rename 'encoded' parameter to 'preferEncoded' for clarity in image request APIs
* fix(mobile): ensure proper resource cleanup for cancelled image requests
* refactor(mobile): streamline codec handling by removing unnecessary descriptor disposal in loadCodec request
---------
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
* feat(mobile): add playbackStyle to native sync API
Adds a `playbackStyle` field to `PlatformAsset` in the pigeon sync API so
native platforms can communicate the asset's playback style (image, video,
animated, livePhoto) to Flutter during sync.
- Add `playbackStyleValue` computed property to `PHAsset` extension (iOS)
- Populate `playbackStyle` in `toPlatformAsset()` and the full-sync path
- Update generated Dart/Kotlin/Swift files
* fix(tests): add playbackStyle to local asset test cases
* fix(tests): update playbackStyle to use integer values in local sync tests
* feat(mobile): extend playbackStyle enum to include videoLooping
* Update PHAssetExtensions.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix(playback): simplify playbackStyleValue implementation by removing iOS version check
* feat(android): implement proper playbackStyle detection
* add PlatformAssetPlaybackStyle enum
* linting
---------
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Fix image cancellation to be stream-scoped instead of widget-scoped
* fix(OneFramePlaceholderImageStreamCompleter): make onLastListenerRemoved callback synchronous with removing the last listener
* fix(OneFrameMultiImageStreamCompleter): remove unnecessary blank line in code
* fix(OneFramePlaceholderImageStreamCompleter): cancel pending requests when only cache listener remains
* fix(OneFrameMultiImageStreamCompleter): ensure onLastListenerRemoved callback is invoked only once
* feat: enhance album sorting functionality with effective order handling
* mobile: formatting
* test: align album sorting order in unit tests with defaultSortOrder
* test(mobile): add reverse order validation for album sorting
* chore(PR): remove OppositeSortOrder Extension and move it directly into SortOrder enum
* refactor: return sorted list directly in album sorting function
* refactor: remove sort_order_extensions.dart