Merge branch 'develop'
This commit is contained in:
commit
ed75dba228
31 changed files with 114 additions and 105 deletions
|
@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
## <a id="unreleased"></a>[Unreleased]
|
## <a id="unreleased"></a>[Unreleased]
|
||||||
|
|
||||||
|
## <a id="v1.10.9"></a>[v1.10.9] - 2024-04-14
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- rendering of SVG with viewbox offset
|
||||||
|
- superfluous media store reinitialization when relaunching app from launcher
|
||||||
|
|
||||||
## <a id="v1.10.8"></a>[v1.10.8] - 2024-04-01
|
## <a id="v1.10.8"></a>[v1.10.8] - 2024-04-01
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -47,7 +47,7 @@ android {
|
||||||
namespace 'deckers.thibault.aves'
|
namespace 'deckers.thibault.aves'
|
||||||
compileSdk 34
|
compileSdk 34
|
||||||
// cf https://developer.android.com/studio/projects/install-ndk#default-ndk-per-agp
|
// cf https://developer.android.com/studio/projects/install-ndk#default-ndk-per-agp
|
||||||
ndkVersion '25.1.8937393'
|
ndkVersion '26.1.10909125'
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility JavaVersion.VERSION_17
|
sourceCompatibility JavaVersion.VERSION_17
|
||||||
|
|
|
@ -82,6 +82,7 @@ class SvgRegionFetcher internal constructor(
|
||||||
(regionRect.right + bleedX) / xf,
|
(regionRect.right + bleedX) / xf,
|
||||||
(regionRect.bottom + bleedY) / yf,
|
(regionRect.bottom + bleedY) / yf,
|
||||||
)
|
)
|
||||||
|
effectiveRect.offset(viewBox.left, viewBox.top)
|
||||||
|
|
||||||
val renderOptions = RenderOptions()
|
val renderOptions = RenderOptions()
|
||||||
renderOptions.viewBox(effectiveRect.left, effectiveRect.top, effectiveRect.width(), effectiveRect.height())
|
renderOptions.viewBox(effectiveRect.left, effectiveRect.top, effectiveRect.width(), effectiveRect.height())
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<string name="search_shortcut_short_label">搜索</string>
|
<string name="search_shortcut_short_label">搜索</string>
|
||||||
<string name="videos_shortcut_short_label">视频</string>
|
<string name="videos_shortcut_short_label">视频</string>
|
||||||
<string name="analysis_channel_name">媒体扫描</string>
|
<string name="analysis_channel_name">媒体扫描</string>
|
||||||
<string name="analysis_notification_default_title">正在扫描媒体库</string>
|
<string name="analysis_notification_default_title">正在扫描媒体</string>
|
||||||
<string name="analysis_notification_action_stop">停止</string>
|
<string name="analysis_notification_action_stop">停止</string>
|
||||||
<string name="safe_mode_shortcut_short_label">安全模式</string>
|
<string name="safe_mode_shortcut_short_label">安全模式</string>
|
||||||
</resources>
|
</resources>
|
|
@ -1,6 +1,6 @@
|
||||||
buildscript {
|
buildscript {
|
||||||
ext {
|
ext {
|
||||||
agp_version = '8.3.1' // same as `settings.ext.agp_version` in `/android/settings.gradle`
|
agp_version = '8.4.0-rc02' // same as `settings.ext.agp_version` in `/android/settings.gradle`
|
||||||
glide_version = '4.16.0'
|
glide_version = '4.16.0'
|
||||||
// AppGallery Connect plugin versions: https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Guides/agc-sdk-changenotes-0000001058732550
|
// AppGallery Connect plugin versions: https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Guides/agc-sdk-changenotes-0000001058732550
|
||||||
huawei_agconnect_version = '1.9.1.300'
|
huawei_agconnect_version = '1.9.1.300'
|
||||||
|
|
|
@ -10,7 +10,7 @@ pluginManagement {
|
||||||
|
|
||||||
settings.ext.kotlin_version = '1.9.21'
|
settings.ext.kotlin_version = '1.9.21'
|
||||||
settings.ext.ksp_version = "$kotlin_version-1.0.15"
|
settings.ext.ksp_version = "$kotlin_version-1.0.15"
|
||||||
settings.ext.agp_version = '8.3.1'
|
settings.ext.agp_version = '8.4.0-rc02'
|
||||||
|
|
||||||
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
|
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
|
||||||
|
|
||||||
|
|
4
fastlane/metadata/android/en-US/changelogs/118.txt
Normal file
4
fastlane/metadata/android/en-US/changelogs/118.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
In v1.10.9:
|
||||||
|
- rename in bulk using tags
|
||||||
|
- repeat a section section section of a video
|
||||||
|
Full changelog available on GitHub
|
4
fastlane/metadata/android/en-US/changelogs/11801.txt
Normal file
4
fastlane/metadata/android/en-US/changelogs/11801.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
In v1.10.9:
|
||||||
|
- rename in bulk using tags
|
||||||
|
- repeat a section section section of a video
|
||||||
|
Full changelog available on GitHub
|
|
@ -1,5 +1,5 @@
|
||||||
<i>Aves</i> can handle all sorts of images and videos, including your typical JPEGs and MP4s, but also more exotic things like <b>multi-page TIFFs, SVGs, old AVIs and more</b>! It scans your media collection to identify <b>motion photos</b>, <b>panoramas</b> (aka photo spheres), <b>360° videos</b>, as well as <b>GeoTIFF</b> files.
|
<i>Aves</i>는 일반적인 JPEG 및 MP4를 포함한 모든 종류의 사진과 비디오를 처리할 수 있지만, <b>다중 페이지 TIFF, SVG, 오래된 AVI 등</b>과 같은 보다 이국적인 것도 처리할 수 있습니다! 미디어 컬렉션을 스캔하여 <b>모션 사진</b>, <b>파노라마</b>, <b>360° 비디오</b> 및 <b>GeoTIFF</b> 파일을 식별합니다.
|
||||||
|
|
||||||
<b>Navigation and search</b> is an important part of <i>Aves</i>. The goal is for users to easily flow from albums to photos to tags to maps, etc.
|
<b>네비게이션과 검색</b>은 <i>Aves</i>의 중요한 부분입니다. 사용자가 앨범에서 사진, 태그에서 지도 등으로 쉽게 흘러갈 수 있도록 하는 것이 목표입니다.
|
||||||
|
|
||||||
<i>Aves</i> integrates with Android (from KitKat to Android 14, including Android TV) with features such as <b>widgets</b>, <b>app shortcuts</b>, <b>screen saver</b> and <b>global search</b> handling. It also works as a <b>media viewer and picker</b>.
|
<i>Aves</i>는 Android(KitKat에서 Android 14까지)에서 사용할 수 있습니다. <b>앱 바로 가기</b> 및 <b>글로벌 검색</b>과 같은 기능과 통합됩니다. 또한 <b>미디어 뷰어 및 선택기</b>로도 작동합니다.
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Gallery and metadata explorer
|
갤러리 및 메타데이터 탐색기
|
|
@ -3,7 +3,8 @@ enum AppMode {
|
||||||
pickCollectionFiltersExternal,
|
pickCollectionFiltersExternal,
|
||||||
pickSingleMediaExternal,
|
pickSingleMediaExternal,
|
||||||
pickMultipleMediaExternal,
|
pickMultipleMediaExternal,
|
||||||
pickMediaInternal,
|
pickFilteredMediaInternal,
|
||||||
|
pickUnfilteredMediaInternal,
|
||||||
pickFilterInternal,
|
pickFilterInternal,
|
||||||
screenSaver,
|
screenSaver,
|
||||||
setWallpaper,
|
setWallpaper,
|
||||||
|
@ -40,6 +41,7 @@ extension ExtraAppMode on AppMode {
|
||||||
bool get isPickingMedia => {
|
bool get isPickingMedia => {
|
||||||
AppMode.pickSingleMediaExternal,
|
AppMode.pickSingleMediaExternal,
|
||||||
AppMode.pickMultipleMediaExternal,
|
AppMode.pickMultipleMediaExternal,
|
||||||
AppMode.pickMediaInternal,
|
AppMode.pickFilteredMediaInternal,
|
||||||
|
AppMode.pickUnfilteredMediaInternal,
|
||||||
}.contains(this);
|
}.contains(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1524,5 +1524,13 @@
|
||||||
"setHomeCustomCollection": "Egyéni gyűjtemény",
|
"setHomeCustomCollection": "Egyéni gyűjtemény",
|
||||||
"@setHomeCustomCollection": {},
|
"@setHomeCustomCollection": {},
|
||||||
"collectionActionSetHome": "Kezdőlapnak beállít",
|
"collectionActionSetHome": "Kezdőlapnak beállít",
|
||||||
"@collectionActionSetHome": {}
|
"@collectionActionSetHome": {},
|
||||||
|
"stopTooltip": "Állj",
|
||||||
|
"@stopTooltip": {},
|
||||||
|
"videoRepeatActionSetStart": "Kezdőpont beállítása",
|
||||||
|
"@videoRepeatActionSetStart": {},
|
||||||
|
"videoActionABRepeat": "A-B ismétlés",
|
||||||
|
"@videoActionABRepeat": {},
|
||||||
|
"videoRepeatActionSetEnd": "Végpont beállítása",
|
||||||
|
"@videoRepeatActionSetEnd": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1366,5 +1366,13 @@
|
||||||
"collectionActionSetHome": "Definir como início",
|
"collectionActionSetHome": "Definir como início",
|
||||||
"@collectionActionSetHome": {},
|
"@collectionActionSetHome": {},
|
||||||
"setHomeCustomCollection": "Coleção personalizada",
|
"setHomeCustomCollection": "Coleção personalizada",
|
||||||
"@setHomeCustomCollection": {}
|
"@setHomeCustomCollection": {},
|
||||||
|
"videoActionABRepeat": "Repetição A-B",
|
||||||
|
"@videoActionABRepeat": {},
|
||||||
|
"videoRepeatActionSetEnd": "Definir fim",
|
||||||
|
"@videoRepeatActionSetEnd": {},
|
||||||
|
"stopTooltip": "Parar",
|
||||||
|
"@stopTooltip": {},
|
||||||
|
"videoRepeatActionSetStart": "Definir início",
|
||||||
|
"@videoRepeatActionSetStart": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1366,5 +1366,13 @@
|
||||||
"newVaultWarningDialogMessage": "Kilitli albümlere yalnızca bu uygulama erişebilir, başka herhangi bir uygulama erişemez.\n\nBu uygulamayı kaldırır veya verilerini silerseniz kilitli albümlerdeki bütün ögeleri kaybedersiniz.",
|
"newVaultWarningDialogMessage": "Kilitli albümlere yalnızca bu uygulama erişebilir, başka herhangi bir uygulama erişemez.\n\nBu uygulamayı kaldırır veya verilerini silerseniz kilitli albümlerdeki bütün ögeleri kaybedersiniz.",
|
||||||
"@newVaultWarningDialogMessage": {},
|
"@newVaultWarningDialogMessage": {},
|
||||||
"castDialogTitle": "Yakındaki Cihazlar",
|
"castDialogTitle": "Yakındaki Cihazlar",
|
||||||
"@castDialogTitle": {}
|
"@castDialogTitle": {},
|
||||||
|
"stopTooltip": "Bitir",
|
||||||
|
"@stopTooltip": {},
|
||||||
|
"videoActionABRepeat": "A-B döngü",
|
||||||
|
"@videoActionABRepeat": {},
|
||||||
|
"videoRepeatActionSetStart": "Başlangıç noktası seç",
|
||||||
|
"@videoRepeatActionSetStart": {},
|
||||||
|
"videoRepeatActionSetEnd": "Bitiş noktası seç",
|
||||||
|
"@videoRepeatActionSetEnd": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -175,7 +175,7 @@
|
||||||
"@filterFavouriteLabel": {},
|
"@filterFavouriteLabel": {},
|
||||||
"filterNoDateLabel": "未注明日期",
|
"filterNoDateLabel": "未注明日期",
|
||||||
"@filterNoDateLabel": {},
|
"@filterNoDateLabel": {},
|
||||||
"filterNoLocationLabel": "未定位",
|
"filterNoLocationLabel": "无定位",
|
||||||
"@filterNoLocationLabel": {},
|
"@filterNoLocationLabel": {},
|
||||||
"filterNoRatingLabel": "未评分",
|
"filterNoRatingLabel": "未评分",
|
||||||
"@filterNoRatingLabel": {},
|
"@filterNoRatingLabel": {},
|
||||||
|
@ -187,7 +187,7 @@
|
||||||
"@filterOnThisDayLabel": {},
|
"@filterOnThisDayLabel": {},
|
||||||
"filterRecentlyAddedLabel": "最近添加",
|
"filterRecentlyAddedLabel": "最近添加",
|
||||||
"@filterRecentlyAddedLabel": {},
|
"@filterRecentlyAddedLabel": {},
|
||||||
"filterRatingRejectedLabel": "拒绝",
|
"filterRatingRejectedLabel": "拒绝评分",
|
||||||
"@filterRatingRejectedLabel": {},
|
"@filterRatingRejectedLabel": {},
|
||||||
"filterTypeAnimatedLabel": "动图",
|
"filterTypeAnimatedLabel": "动图",
|
||||||
"@filterTypeAnimatedLabel": {},
|
"@filterTypeAnimatedLabel": {},
|
||||||
|
@ -1045,7 +1045,7 @@
|
||||||
"@viewerInfoBackToViewerTooltip": {},
|
"@viewerInfoBackToViewerTooltip": {},
|
||||||
"viewerInfoUnknown": "未知",
|
"viewerInfoUnknown": "未知",
|
||||||
"@viewerInfoUnknown": {},
|
"@viewerInfoUnknown": {},
|
||||||
"viewerInfoLabelDescription": "备注",
|
"viewerInfoLabelDescription": "描述",
|
||||||
"@viewerInfoLabelDescription": {},
|
"@viewerInfoLabelDescription": {},
|
||||||
"viewerInfoLabelTitle": "标题",
|
"viewerInfoLabelTitle": "标题",
|
||||||
"@viewerInfoLabelTitle": {},
|
"@viewerInfoLabelTitle": {},
|
||||||
|
@ -1273,7 +1273,7 @@
|
||||||
"@vaultLockTypePin": {},
|
"@vaultLockTypePin": {},
|
||||||
"editorTransformCrop": "裁剪",
|
"editorTransformCrop": "裁剪",
|
||||||
"@editorTransformCrop": {},
|
"@editorTransformCrop": {},
|
||||||
"filterTaggedLabel": "已标记",
|
"filterTaggedLabel": "有标签",
|
||||||
"@filterTaggedLabel": {},
|
"@filterTaggedLabel": {},
|
||||||
"statePageTitle": "区域",
|
"statePageTitle": "区域",
|
||||||
"@statePageTitle": {},
|
"@statePageTitle": {},
|
||||||
|
@ -1309,7 +1309,7 @@
|
||||||
"@statsTopStatesSectionTitle": {},
|
"@statsTopStatesSectionTitle": {},
|
||||||
"settingsVideoPlaybackPageTitle": "播放",
|
"settingsVideoPlaybackPageTitle": "播放",
|
||||||
"@settingsVideoPlaybackPageTitle": {},
|
"@settingsVideoPlaybackPageTitle": {},
|
||||||
"filterLocatedLabel": "位于",
|
"filterLocatedLabel": "有定位",
|
||||||
"@filterLocatedLabel": {},
|
"@filterLocatedLabel": {},
|
||||||
"settingsAccessibilityShowPinchGestureAlternatives": "显示触屏手势可选方案",
|
"settingsAccessibilityShowPinchGestureAlternatives": "显示触屏手势可选方案",
|
||||||
"@settingsAccessibilityShowPinchGestureAlternatives": {},
|
"@settingsAccessibilityShowPinchGestureAlternatives": {},
|
||||||
|
|
|
@ -80,6 +80,8 @@ class Contributors {
|
||||||
Contributor('Marc Amorós', 'marquitus99@gmail.com'),
|
Contributor('Marc Amorós', 'marquitus99@gmail.com'),
|
||||||
Contributor('elea11', 'p.manuel.warnecke@gmail.com'),
|
Contributor('elea11', 'p.manuel.warnecke@gmail.com'),
|
||||||
Contributor('しいたけ', 'Shiitake@users.noreply.hosted.weblate.org'),
|
Contributor('しいたけ', 'Shiitake@users.noreply.hosted.weblate.org'),
|
||||||
|
Contributor('wanzh', 'wanzh66666@gmail.com'),
|
||||||
|
Contributor('ID J', 'tabby4442@gmail.com'),
|
||||||
// Contributor('Alvi Khan', 'aveenalvi@gmail.com'), // Bengali
|
// Contributor('Alvi Khan', 'aveenalvi@gmail.com'), // Bengali
|
||||||
// Contributor('Htet Oo Hlaing', 'htetoh2006@outlook.com'), // Burmese
|
// Contributor('Htet Oo Hlaing', 'htetoh2006@outlook.com'), // Burmese
|
||||||
// Contributor('Khant', 'khant@users.noreply.hosted.weblate.org'), // Burmese
|
// Contributor('Khant', 'khant@users.noreply.hosted.weblate.org'), // Burmese
|
||||||
|
|
|
@ -385,14 +385,7 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
|
||||||
case AppMode.pickMultipleMediaExternal:
|
case AppMode.pickMultipleMediaExternal:
|
||||||
_saveTopEntries();
|
_saveTopEntries();
|
||||||
break;
|
break;
|
||||||
case AppMode.pickCollectionFiltersExternal:
|
default:
|
||||||
case AppMode.pickMediaInternal:
|
|
||||||
case AppMode.pickFilterInternal:
|
|
||||||
case AppMode.screenSaver:
|
|
||||||
case AppMode.setWallpaper:
|
|
||||||
case AppMode.slideshow:
|
|
||||||
case AppMode.view:
|
|
||||||
case AppMode.edit:
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AppLifecycleState.resumed:
|
case AppLifecycleState.resumed:
|
||||||
|
@ -626,14 +619,6 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onNewIntent(Map? intentData) {
|
void _onNewIntent(Map? intentData) {
|
||||||
debugPrint('$runtimeType onNewIntent with intentData=$intentData');
|
|
||||||
|
|
||||||
// do not reset when relaunching the app
|
|
||||||
if (_appModeNotifier.value == AppMode.main && (intentData == null || intentData.isEmpty == true)) {
|
|
||||||
reportService.log('Relaunch');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
reportService.log('New intent data=$intentData');
|
reportService.log('New intent data=$intentData');
|
||||||
_navigatorKey.currentState!.pushReplacement(DirectMaterialPageRoute(
|
_navigatorKey.currentState!.pushReplacement(DirectMaterialPageRoute(
|
||||||
settings: const RouteSettings(name: HomePage.routeName),
|
settings: const RouteSettings(name: HomePage.routeName),
|
||||||
|
|
|
@ -163,7 +163,7 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
|
||||||
child: AnimatedBuilder(
|
child: AnimatedBuilder(
|
||||||
animation: collection.filterChangeNotifier,
|
animation: collection.filterChangeNotifier,
|
||||||
builder: (context, child) {
|
builder: (context, child) {
|
||||||
final removableFilters = appMode != AppMode.pickMediaInternal;
|
final canRemoveFilters = appMode != AppMode.pickFilteredMediaInternal;
|
||||||
return Selector<Query, bool>(
|
return Selector<Query, bool>(
|
||||||
selector: (context, query) => query.enabled,
|
selector: (context, query) => query.enabled,
|
||||||
builder: (context, queryEnabled, child) {
|
builder: (context, queryEnabled, child) {
|
||||||
|
@ -172,7 +172,7 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
|
||||||
builder: (context, _, child) {
|
builder: (context, _, child) {
|
||||||
final useTvLayout = settings.useTvLayout;
|
final useTvLayout = settings.useTvLayout;
|
||||||
final actions = _buildActions(context, selection);
|
final actions = _buildActions(context, selection);
|
||||||
final onFilterTap = removableFilters ? collection.removeFilter : null;
|
final onFilterTap = canRemoveFilters ? collection.removeFilter : null;
|
||||||
return AvesAppBar(
|
return AvesAppBar(
|
||||||
contentHeight: appBarContentHeight,
|
contentHeight: appBarContentHeight,
|
||||||
pinned: context.select<Selection<AvesEntry>, bool>((selection) => selection.isSelecting),
|
pinned: context.select<Selection<AvesEntry>, bool>((selection) => selection.isSelecting),
|
||||||
|
|
|
@ -251,7 +251,7 @@ class _CollectionGridContentState extends State<_CollectionGridContent> {
|
||||||
if (selection.isSelecting) {
|
if (selection.isSelecting) {
|
||||||
child = MultiProvider(
|
child = MultiProvider(
|
||||||
providers: [
|
providers: [
|
||||||
ListenableProvider<ValueNotifier<AppMode>>.value(value: ValueNotifier(AppMode.pickMediaInternal)),
|
ListenableProvider<ValueNotifier<AppMode>>.value(value: ValueNotifier(AppMode.pickFilteredMediaInternal)),
|
||||||
ChangeNotifierProvider<Selection<AvesEntry>>.value(value: selection),
|
ChangeNotifierProvider<Selection<AvesEntry>>.value(value: selection),
|
||||||
],
|
],
|
||||||
child: child,
|
child: child,
|
||||||
|
|
|
@ -201,15 +201,7 @@ class _CollectionPageState extends State<CollectionPage> {
|
||||||
IntentService.submitPickedCollectionFilters(filters);
|
IntentService.submitPickedCollectionFilters(filters);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
case AppMode.main:
|
default:
|
||||||
case AppMode.pickSingleMediaExternal:
|
|
||||||
case AppMode.pickMediaInternal:
|
|
||||||
case AppMode.pickFilterInternal:
|
|
||||||
case AppMode.screenSaver:
|
|
||||||
case AppMode.setWallpaper:
|
|
||||||
case AppMode.slideshow:
|
|
||||||
case AppMode.view:
|
|
||||||
case AppMode.edit:
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,8 @@ class InteractiveTile extends StatelessWidget {
|
||||||
case AppMode.pickMultipleMediaExternal:
|
case AppMode.pickMultipleMediaExternal:
|
||||||
final selection = context.read<Selection<AvesEntry>>();
|
final selection = context.read<Selection<AvesEntry>>();
|
||||||
selection.toggleSelection(entry);
|
selection.toggleSelection(entry);
|
||||||
case AppMode.pickMediaInternal:
|
case AppMode.pickFilteredMediaInternal:
|
||||||
|
case AppMode.pickUnfilteredMediaInternal:
|
||||||
Navigator.maybeOf(context)?.pop(entry);
|
Navigator.maybeOf(context)?.pop(entry);
|
||||||
case AppMode.pickCollectionFiltersExternal:
|
case AppMode.pickCollectionFiltersExternal:
|
||||||
case AppMode.pickFilterInternal:
|
case AppMode.pickFilterInternal:
|
||||||
|
|
|
@ -124,6 +124,7 @@ class _AddShortcutDialogState extends State<AddShortcutDialog> {
|
||||||
source: _collection.source,
|
source: _collection.source,
|
||||||
filters: pickFilters,
|
filters: pickFilters,
|
||||||
),
|
),
|
||||||
|
canRemoveFilters: false,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
fullscreenDialog: true,
|
fullscreenDialog: true,
|
||||||
|
|
|
@ -322,21 +322,31 @@ class _EditEntryDateDialogState extends State<EditEntryDateDialog> {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CollectionLens? _createPickCollection() {
|
||||||
|
final baseCollection = widget.collection;
|
||||||
|
return baseCollection != null
|
||||||
|
? CollectionLens(
|
||||||
|
source: baseCollection.source,
|
||||||
|
filters: baseCollection.filters,
|
||||||
|
)
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> _pickCopyItemSource() async {
|
Future<void> _pickCopyItemSource() async {
|
||||||
final _collection = widget.collection;
|
final pickCollection = _createPickCollection();
|
||||||
if (_collection == null) return;
|
if (pickCollection == null) return;
|
||||||
|
|
||||||
final entry = await Navigator.maybeOf(context)?.push<AvesEntry>(
|
final entry = await Navigator.maybeOf(context)?.push<AvesEntry>(
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
settings: const RouteSettings(name: ItemPickPage.routeName),
|
settings: const RouteSettings(name: ItemPickPage.routeName),
|
||||||
builder: (context) => ItemPickPage(
|
builder: (context) => ItemPickPage(
|
||||||
collection: CollectionLens(
|
collection: pickCollection,
|
||||||
source: _collection.source,
|
canRemoveFilters: true,
|
||||||
),
|
|
||||||
),
|
),
|
||||||
fullscreenDialog: true,
|
fullscreenDialog: true,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
pickCollection.dispose();
|
||||||
if (entry != null) {
|
if (entry != null) {
|
||||||
setState(() => _copyItemSource = entry);
|
setState(() => _copyItemSource = entry);
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,9 +169,9 @@ class _EditEntryLocationDialogState extends State<EditEntryLocationDialog> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _pickLocation() async {
|
CollectionLens? _createPickCollection() {
|
||||||
final baseCollection = widget.collection;
|
final baseCollection = widget.collection;
|
||||||
final mapCollection = baseCollection != null
|
return baseCollection != null
|
||||||
? CollectionLens(
|
? CollectionLens(
|
||||||
source: baseCollection.source,
|
source: baseCollection.source,
|
||||||
filters: {
|
filters: {
|
||||||
|
@ -180,17 +180,21 @@ class _EditEntryLocationDialogState extends State<EditEntryLocationDialog> {
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
: null;
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _pickLocation() async {
|
||||||
|
final pickCollection = _createPickCollection();
|
||||||
final latLng = await Navigator.maybeOf(context)?.push(
|
final latLng = await Navigator.maybeOf(context)?.push(
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
settings: const RouteSettings(name: LocationPickPage.routeName),
|
settings: const RouteSettings(name: LocationPickPage.routeName),
|
||||||
builder: (context) => LocationPickPage(
|
builder: (context) => LocationPickPage(
|
||||||
collection: mapCollection,
|
collection: pickCollection,
|
||||||
initialLocation: _mapCoordinates,
|
initialLocation: _mapCoordinates,
|
||||||
),
|
),
|
||||||
fullscreenDialog: true,
|
fullscreenDialog: true,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
mapCollection?.dispose();
|
pickCollection?.dispose();
|
||||||
if (latLng != null) {
|
if (latLng != null) {
|
||||||
settings.mapDefaultCenter = latLng;
|
settings.mapDefaultCenter = latLng;
|
||||||
setState(() {
|
setState(() {
|
||||||
|
@ -218,20 +222,20 @@ class _EditEntryLocationDialogState extends State<EditEntryLocationDialog> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _pickCopyItemSource() async {
|
Future<void> _pickCopyItemSource() async {
|
||||||
final _collection = widget.collection;
|
final pickCollection = _createPickCollection();
|
||||||
if (_collection == null) return;
|
if (pickCollection == null) return;
|
||||||
|
|
||||||
final entry = await Navigator.maybeOf(context)?.push<AvesEntry>(
|
final entry = await Navigator.maybeOf(context)?.push<AvesEntry>(
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
settings: const RouteSettings(name: ItemPickPage.routeName),
|
settings: const RouteSettings(name: ItemPickPage.routeName),
|
||||||
builder: (context) => ItemPickPage(
|
builder: (context) => ItemPickPage(
|
||||||
collection: CollectionLens(
|
collection: pickCollection,
|
||||||
source: _collection.source,
|
canRemoveFilters: true,
|
||||||
),
|
|
||||||
),
|
),
|
||||||
fullscreenDialog: true,
|
fullscreenDialog: true,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
pickCollection.dispose();
|
||||||
if (entry != null) {
|
if (entry != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_copyItemSource = entry;
|
_copyItemSource = entry;
|
||||||
|
|
|
@ -344,6 +344,7 @@ class _CoverSelectionDialogState extends State<CoverSelectionDialog> {
|
||||||
source: context.read<CollectionSource>(),
|
source: context.read<CollectionSource>(),
|
||||||
filters: {filter},
|
filters: {filter},
|
||||||
),
|
),
|
||||||
|
canRemoveFilters: false,
|
||||||
),
|
),
|
||||||
fullscreenDialog: true,
|
fullscreenDialog: true,
|
||||||
),
|
),
|
||||||
|
|
|
@ -16,10 +16,12 @@ class ItemPickPage extends StatefulWidget {
|
||||||
static const routeName = '/item_pick';
|
static const routeName = '/item_pick';
|
||||||
|
|
||||||
final CollectionLens collection;
|
final CollectionLens collection;
|
||||||
|
final bool canRemoveFilters;
|
||||||
|
|
||||||
const ItemPickPage({
|
const ItemPickPage({
|
||||||
super.key,
|
super.key,
|
||||||
required this.collection,
|
required this.collection,
|
||||||
|
required this.canRemoveFilters,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -38,8 +40,9 @@ class _ItemPickPageState extends State<ItemPickPage> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final liveFilter = collection.filters.firstWhereOrNull((v) => v is QueryFilter && v.live) as QueryFilter?;
|
final liveFilter = collection.filters.firstWhereOrNull((v) => v is QueryFilter && v.live) as QueryFilter?;
|
||||||
|
final mode = widget.canRemoveFilters ? AppMode.pickUnfilteredMediaInternal : AppMode.pickFilteredMediaInternal;
|
||||||
return ListenableProvider<ValueNotifier<AppMode>>.value(
|
return ListenableProvider<ValueNotifier<AppMode>>.value(
|
||||||
value: ValueNotifier(AppMode.pickMediaInternal),
|
value: ValueNotifier(mode),
|
||||||
child: AvesScaffold(
|
child: AvesScaffold(
|
||||||
body: SelectionProvider<AvesEntry>(
|
body: SelectionProvider<AvesEntry>(
|
||||||
child: QueryProvider(
|
child: QueryProvider(
|
||||||
|
|
|
@ -67,13 +67,7 @@ class _InteractiveFilterTileState<T extends CollectionFilter> extends State<Inte
|
||||||
}
|
}
|
||||||
case AppMode.pickFilterInternal:
|
case AppMode.pickFilterInternal:
|
||||||
Navigator.maybeOf(context)?.pop<T>(filter);
|
Navigator.maybeOf(context)?.pop<T>(filter);
|
||||||
case AppMode.pickMediaInternal:
|
default:
|
||||||
case AppMode.screenSaver:
|
|
||||||
case AppMode.setWallpaper:
|
|
||||||
case AppMode.slideshow:
|
|
||||||
case AppMode.view:
|
|
||||||
case AppMode.edit:
|
|
||||||
case null:
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,10 +195,12 @@ class _HomePageState extends State<HomePage> {
|
||||||
unawaited(GlobalSearch.registerCallback());
|
unawaited(GlobalSearch.registerCallback());
|
||||||
unawaited(AnalysisService.registerCallback());
|
unawaited(AnalysisService.registerCallback());
|
||||||
final source = context.read<CollectionSource>();
|
final source = context.read<CollectionSource>();
|
||||||
|
if (source.initState != SourceInitializationState.full) {
|
||||||
await source.init(
|
await source.init(
|
||||||
loadTopEntriesFirst: settings.homePage == HomePageSetting.collection && settings.homeCustomCollection.isEmpty,
|
loadTopEntriesFirst: settings.homePage == HomePageSetting.collection && settings.homeCustomCollection.isEmpty,
|
||||||
canAnalyze: !safeMode,
|
canAnalyze: !safeMode,
|
||||||
);
|
);
|
||||||
|
}
|
||||||
case AppMode.screenSaver:
|
case AppMode.screenSaver:
|
||||||
final source = context.read<CollectionSource>();
|
final source = context.read<CollectionSource>();
|
||||||
await source.init(
|
await source.init(
|
||||||
|
@ -221,9 +223,7 @@ class _HomePageState extends State<HomePage> {
|
||||||
case AppMode.edit:
|
case AppMode.edit:
|
||||||
case AppMode.setWallpaper:
|
case AppMode.setWallpaper:
|
||||||
await _initViewerEssentials();
|
await _initViewerEssentials();
|
||||||
case AppMode.pickMediaInternal:
|
default:
|
||||||
case AppMode.pickFilterInternal:
|
|
||||||
case AppMode.slideshow:
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,12 +331,7 @@ class _HomePageState extends State<HomePage> {
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
case AppMode.main:
|
default:
|
||||||
case AppMode.pickCollectionFiltersExternal:
|
|
||||||
case AppMode.pickMediaInternal:
|
|
||||||
case AppMode.pickFilterInternal:
|
|
||||||
case AppMode.screenSaver:
|
|
||||||
case AppMode.slideshow:
|
|
||||||
routeName = _initialRouteName ?? settings.homePage.routeName;
|
routeName = _initialRouteName ?? settings.homePage.routeName;
|
||||||
filters = _initialFilters ?? (settings.homePage == HomePageSetting.collection ? settings.homeCustomCollection : {});
|
filters = _initialFilters ?? (settings.homePage == HomePageSetting.collection ? settings.homeCustomCollection : {});
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ repository: https://github.com/deckerst/aves
|
||||||
# - play changelog: /whatsnew/whatsnew-en-US
|
# - play changelog: /whatsnew/whatsnew-en-US
|
||||||
# - izzy changelog: /fastlane/metadata/android/en-US/changelogs/XXX01.txt
|
# - izzy changelog: /fastlane/metadata/android/en-US/changelogs/XXX01.txt
|
||||||
# - libre changelog: /fastlane/metadata/android/en-US/changelogs/XXX.txt
|
# - libre changelog: /fastlane/metadata/android/en-US/changelogs/XXX.txt
|
||||||
version: 1.10.8+117
|
version: 1.10.9+118
|
||||||
publish_to: none
|
publish_to: none
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -4829,13 +4829,6 @@
|
||||||
"filePickerUseThisFolder"
|
"filePickerUseThisFolder"
|
||||||
],
|
],
|
||||||
|
|
||||||
"hu": [
|
|
||||||
"stopTooltip",
|
|
||||||
"videoActionABRepeat",
|
|
||||||
"videoRepeatActionSetStart",
|
|
||||||
"videoRepeatActionSetEnd"
|
|
||||||
],
|
|
||||||
|
|
||||||
"is": [
|
"is": [
|
||||||
"stopTooltip",
|
"stopTooltip",
|
||||||
"videoActionABRepeat",
|
"videoActionABRepeat",
|
||||||
|
@ -7260,13 +7253,6 @@
|
||||||
"filePickerUseThisFolder"
|
"filePickerUseThisFolder"
|
||||||
],
|
],
|
||||||
|
|
||||||
"pt": [
|
|
||||||
"stopTooltip",
|
|
||||||
"videoActionABRepeat",
|
|
||||||
"videoRepeatActionSetStart",
|
|
||||||
"videoRepeatActionSetEnd"
|
|
||||||
],
|
|
||||||
|
|
||||||
"ro": [
|
"ro": [
|
||||||
"stopTooltip",
|
"stopTooltip",
|
||||||
"videoActionABRepeat",
|
"videoActionABRepeat",
|
||||||
|
@ -9373,13 +9359,6 @@
|
||||||
"filePickerUseThisFolder"
|
"filePickerUseThisFolder"
|
||||||
],
|
],
|
||||||
|
|
||||||
"tr": [
|
|
||||||
"stopTooltip",
|
|
||||||
"videoActionABRepeat",
|
|
||||||
"videoRepeatActionSetStart",
|
|
||||||
"videoRepeatActionSetEnd"
|
|
||||||
],
|
|
||||||
|
|
||||||
"vi": [
|
"vi": [
|
||||||
"stopTooltip",
|
"stopTooltip",
|
||||||
"videoActionABRepeat",
|
"videoActionABRepeat",
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
In v1.10.8:
|
In v1.10.9:
|
||||||
- rename in bulk using tags
|
- rename in bulk using tags
|
||||||
- repeat a section section section of a video
|
- repeat a section section section of a video
|
||||||
Full changelog available on GitHub
|
Full changelog available on GitHub
|
Loading…
Reference in a new issue