mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-03-06 07:18:50 +01:00
Simplify localized string access
This commit is contained in:
parent
2472f839e8
commit
bbb9eb14be
30 changed files with 250 additions and 301 deletions
8
lib/app_localizations.dart
Normal file
8
lib/app_localizations.dart
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
|
/// Simplify localized string access
|
||||||
|
class L10n {
|
||||||
|
static AppLocalizations of(BuildContext context) =>
|
||||||
|
AppLocalizations.of(context)!;
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/exception.dart';
|
import 'package:nc_photos/exception.dart';
|
||||||
|
|
||||||
/// Convert an exception to a user-facing string
|
/// Convert an exception to a user-facing string
|
||||||
|
@ -10,16 +10,16 @@ import 'package:nc_photos/exception.dart';
|
||||||
String toUserString(dynamic exception, BuildContext context) {
|
String toUserString(dynamic exception, BuildContext context) {
|
||||||
if (exception is ApiException) {
|
if (exception is ApiException) {
|
||||||
if (exception.response.statusCode == 401) {
|
if (exception.response.statusCode == 401) {
|
||||||
return AppLocalizations.of(context)!.errorUnauthenticated;
|
return L10n.of(context).errorUnauthenticated;
|
||||||
} else if (exception.response.statusCode == 423) {
|
} else if (exception.response.statusCode == 423) {
|
||||||
return AppLocalizations.of(context)!.errorLocked;
|
return L10n.of(context).errorLocked;
|
||||||
} else if (exception.response.statusCode == 500) {
|
} else if (exception.response.statusCode == 500) {
|
||||||
return AppLocalizations.of(context)!.errorServerError;
|
return L10n.of(context).errorServerError;
|
||||||
}
|
}
|
||||||
} else if (exception is SocketException) {
|
} else if (exception is SocketException) {
|
||||||
return AppLocalizations.of(context)!.errorDisconnected;
|
return L10n.of(context).errorDisconnected;
|
||||||
} else if (exception is InvalidBaseUrlException) {
|
} else if (exception is InvalidBaseUrlException) {
|
||||||
return AppLocalizations.of(context)!.errorInvalidBaseUrl;
|
return L10n.of(context).errorInvalidBaseUrl;
|
||||||
}
|
}
|
||||||
return exception.toString();
|
return exception.toString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/entity/file.dart';
|
import 'package:nc_photos/entity/file.dart';
|
||||||
import 'package:nc_photos/exception.dart';
|
import 'package:nc_photos/exception.dart';
|
||||||
import 'package:nc_photos/exception_util.dart' as exception_util;
|
import 'package:nc_photos/exception_util.dart' as exception_util;
|
||||||
|
@ -23,7 +23,7 @@ class ShareHandler {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => ProcessingDialog(
|
builder: (context) => ProcessingDialog(
|
||||||
text: AppLocalizations.of(context)!.shareDownloadingDialogContent),
|
text: L10n.of(context).shareDownloadingDialogContent),
|
||||||
);
|
);
|
||||||
final results = <Tuple2<File, dynamic>>[];
|
final results = <Tuple2<File, dynamic>>[];
|
||||||
for (final f in files) {
|
for (final f in files) {
|
||||||
|
@ -33,8 +33,8 @@ class ShareHandler {
|
||||||
} on PermissionException catch (_) {
|
} on PermissionException catch (_) {
|
||||||
_log.warning("[shareFiles] Permission not granted");
|
_log.warning("[shareFiles] Permission not granted");
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content:
|
||||||
.downloadFailureNoPermissionNotification),
|
Text(L10n.of(context).downloadFailureNoPermissionNotification),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
// dismiss the dialog
|
// dismiss the dialog
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/exception_util.dart' as exception_util;
|
import 'package:nc_photos/exception_util.dart' as exception_util;
|
||||||
import 'package:nc_photos/k.dart' as k;
|
import 'package:nc_photos/k.dart' as k;
|
||||||
import 'package:nc_photos/pref.dart';
|
import 'package:nc_photos/pref.dart';
|
||||||
|
@ -48,7 +48,7 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
|
||||||
Icons.close,
|
Icons.close,
|
||||||
color: AppTheme.getSecondaryTextColor(context),
|
color: AppTheme.getSecondaryTextColor(context),
|
||||||
),
|
),
|
||||||
tooltip: AppLocalizations.of(context)!.deleteTooltip,
|
tooltip: L10n.of(context).deleteTooltip,
|
||||||
onPressed: () => _onRemoveItemPressed(a),
|
onPressed: () => _onRemoveItemPressed(a),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -63,7 +63,7 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
|
||||||
..pushNamed(SignIn.routeName);
|
..pushNamed(SignIn.routeName);
|
||||||
},
|
},
|
||||||
child: Tooltip(
|
child: Tooltip(
|
||||||
message: AppLocalizations.of(context)!.addServerTooltip,
|
message: L10n.of(context).addServerTooltip,
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Icons.add,
|
Icons.add,
|
||||||
|
@ -89,7 +89,7 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
|
||||||
Icons.edit,
|
Icons.edit,
|
||||||
color: AppTheme.getSecondaryTextColor(context),
|
color: AppTheme.getSecondaryTextColor(context),
|
||||||
),
|
),
|
||||||
tooltip: AppLocalizations.of(context)!.editTooltip,
|
tooltip: L10n.of(context).editTooltip,
|
||||||
onPressed: () => _onEditPressed(),
|
onPressed: () => _onEditPressed(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -112,8 +112,8 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
|
||||||
_accounts = Pref.inst().getAccounts()!;
|
_accounts = Pref.inst().getAccounts()!;
|
||||||
});
|
});
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content:
|
||||||
.removeServerSuccessNotification(account.url)),
|
Text(L10n.of(context).removeServerSuccessNotification(account.url)),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -143,8 +143,8 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
|
||||||
// the app passwords are unique to each entry, but just in case
|
// the app passwords are unique to each entry, but just in case
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content:
|
||||||
.editAccountConflictFailureNotification),
|
Text(L10n.of(context).editAccountConflictFailureNotification),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/entity/file.dart';
|
import 'package:nc_photos/entity/file.dart';
|
||||||
import 'package:nc_photos/iterable_extension.dart';
|
import 'package:nc_photos/iterable_extension.dart';
|
||||||
import 'package:nc_photos/k.dart' as k;
|
import 'package:nc_photos/k.dart' as k;
|
||||||
|
@ -86,7 +86,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
AppLocalizations.of(context)!.albumDirPickerHeaderText,
|
L10n.of(context).albumDirPickerHeaderText,
|
||||||
style: Theme.of(context).textTheme.headline5,
|
style: Theme.of(context).textTheme.headline5,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
|
@ -94,7 +94,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
|
||||||
Align(
|
Align(
|
||||||
alignment: AlignmentDirectional.topStart,
|
alignment: AlignmentDirectional.topStart,
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context)!.albumDirPickerSubHeaderText,
|
L10n.of(context).albumDirPickerSubHeaderText,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -117,7 +117,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
|
||||||
),
|
),
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
onPressed: () => _onConfirmPressed(context),
|
onPressed: () => _onConfirmPressed(context),
|
||||||
child: Text(AppLocalizations.of(context)!.confirmButtonLabel),
|
child: Text(L10n.of(context).confirmButtonLabel),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -131,8 +131,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
|
||||||
final picked = getPickedDirs();
|
final picked = getPickedDirs();
|
||||||
if (picked.isEmpty) {
|
if (picked.isEmpty) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text(L10n.of(context).albumDirPickerListEmptyNotification),
|
||||||
AppLocalizations.of(context)!.albumDirPickerListEmptyNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/bloc/list_importable_album.dart';
|
import 'package:nc_photos/bloc/list_importable_album.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/album/cover_provider.dart';
|
import 'package:nc_photos/entity/album/cover_provider.dart';
|
||||||
|
@ -102,7 +102,7 @@ class _AlbumImporterState extends State<AlbumImporter> {
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
AppLocalizations.of(context)!.albumImporterHeaderText,
|
L10n.of(context).albumImporterHeaderText,
|
||||||
style: Theme.of(context).textTheme.headline5,
|
style: Theme.of(context).textTheme.headline5,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
|
@ -110,7 +110,7 @@ class _AlbumImporterState extends State<AlbumImporter> {
|
||||||
Align(
|
Align(
|
||||||
alignment: AlignmentDirectional.topStart,
|
alignment: AlignmentDirectional.topStart,
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context)!.albumImporterSubHeaderText,
|
L10n.of(context).albumImporterSubHeaderText,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -145,7 +145,7 @@ class _AlbumImporterState extends State<AlbumImporter> {
|
||||||
),
|
),
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
onPressed: () => _onImportPressed(context),
|
onPressed: () => _onImportPressed(context),
|
||||||
child: Text(AppLocalizations.of(context)!.importButtonLabel),
|
child: Text(L10n.of(context).importButtonLabel),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -217,8 +217,8 @@ class _AlbumImporterState extends State<AlbumImporter> {
|
||||||
showDialog(
|
showDialog(
|
||||||
barrierDismissible: false,
|
barrierDismissible: false,
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => ProcessingDialog(
|
builder: (context) =>
|
||||||
text: AppLocalizations.of(context)!.albumImporterProgressText),
|
ProcessingDialog(text: L10n.of(context).albumImporterProgressText),
|
||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
await _createAllAlbums(context);
|
await _createAllAlbums(context);
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:kiwi/kiwi.dart';
|
import 'package:kiwi/kiwi.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/bloc/list_album.dart';
|
import 'package:nc_photos/bloc/list_album.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/album/provider.dart';
|
import 'package:nc_photos/entity/album/provider.dart';
|
||||||
|
@ -81,7 +81,7 @@ class _AlbumPickerDialogState extends State<AlbumPickerDialog> {
|
||||||
SimpleDialogOption(
|
SimpleDialogOption(
|
||||||
onPressed: () => _onNewAlbumPressed(context),
|
onPressed: () => _onNewAlbumPressed(context),
|
||||||
child: Tooltip(
|
child: Tooltip(
|
||||||
message: AppLocalizations.of(context)!.createAlbumTooltip,
|
message: L10n.of(context).createAlbumTooltip,
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Icons.add,
|
Icons.add,
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/bloc/album_search.dart';
|
import 'package:nc_photos/bloc/album_search.dart';
|
||||||
import 'package:nc_photos/bloc/album_search_suggestion.dart';
|
import 'package:nc_photos/bloc/album_search_suggestion.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
|
@ -17,8 +17,7 @@ import 'package:nc_photos/widget/builder/album_grid_item_builder.dart';
|
||||||
class AlbumSearchDelegate extends SearchDelegate {
|
class AlbumSearchDelegate extends SearchDelegate {
|
||||||
AlbumSearchDelegate(BuildContext context, this.account)
|
AlbumSearchDelegate(BuildContext context, this.account)
|
||||||
: super(
|
: super(
|
||||||
searchFieldLabel:
|
searchFieldLabel: L10n.of(context).albumSearchTextFieldHint,
|
||||||
AppLocalizations.of(context)!.albumSearchTextFieldHint,
|
|
||||||
) {
|
) {
|
||||||
final fileRepo = FileRepo(FileCachedDataSource());
|
final fileRepo = FileRepo(FileCachedDataSource());
|
||||||
final albumRepo = AlbumRepo(AlbumCachedDataSource());
|
final albumRepo = AlbumRepo(AlbumCachedDataSource());
|
||||||
|
@ -38,7 +37,7 @@ class AlbumSearchDelegate extends SearchDelegate {
|
||||||
return [
|
return [
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.clear),
|
icon: Icon(Icons.clear),
|
||||||
tooltip: AppLocalizations.of(context)!.clearTooltip,
|
tooltip: L10n.of(context).clearTooltip,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
query = "";
|
query = "";
|
||||||
},
|
},
|
||||||
|
@ -88,7 +87,7 @@ class AlbumSearchDelegate extends SearchDelegate {
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Text(
|
Text(
|
||||||
AppLocalizations.of(context)!.listNoResultsText,
|
L10n.of(context).listNoResultsText,
|
||||||
style: const TextStyle(fontSize: 24),
|
style: const TextStyle(fontSize: 24),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/album/item.dart';
|
import 'package:nc_photos/entity/album/item.dart';
|
||||||
import 'package:nc_photos/entity/album/provider.dart';
|
import 'package:nc_photos/entity/album/provider.dart';
|
||||||
|
@ -107,8 +107,7 @@ class _AlbumViewerState extends State<AlbumViewer>
|
||||||
|
|
||||||
if (!SessionStorage().hasShowDragRearrangeNotification) {
|
if (!SessionStorage().hasShowDragRearrangeNotification) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text(L10n.of(context).albumEditDragRearrangeNotification),
|
||||||
AppLocalizations.of(context)!.albumEditDragRearrangeNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
SessionStorage().hasShowDragRearrangeNotification = true;
|
SessionStorage().hasShowDragRearrangeNotification = true;
|
||||||
|
@ -230,14 +229,14 @@ class _AlbumViewerState extends State<AlbumViewer>
|
||||||
if (platform_k.isAndroid)
|
if (platform_k.isAndroid)
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.share),
|
icon: const Icon(Icons.share),
|
||||||
tooltip: AppLocalizations.of(context)!.shareSelectedTooltip,
|
tooltip: L10n.of(context).shareSelectedTooltip,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_onSelectionAppBarSharePressed(context);
|
_onSelectionAppBarSharePressed(context);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.remove),
|
icon: const Icon(Icons.remove),
|
||||||
tooltip: AppLocalizations.of(context)!.removeSelectedFromAlbumTooltip,
|
tooltip: L10n.of(context).removeSelectedFromAlbumTooltip,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_onSelectionAppBarRemovePressed();
|
_onSelectionAppBarRemovePressed();
|
||||||
},
|
},
|
||||||
|
@ -249,12 +248,12 @@ class _AlbumViewerState extends State<AlbumViewer>
|
||||||
return buildEditAppBar(context, widget.account, widget.album, actions: [
|
return buildEditAppBar(context, widget.account, widget.album, actions: [
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.text_fields),
|
icon: Icon(Icons.text_fields),
|
||||||
tooltip: AppLocalizations.of(context)!.albumAddTextTooltip,
|
tooltip: L10n.of(context).albumAddTextTooltip,
|
||||||
onPressed: _onEditAppBarAddTextPressed,
|
onPressed: _onEditAppBarAddTextPressed,
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.sort_by_alpha),
|
icon: Icon(Icons.sort_by_alpha),
|
||||||
tooltip: AppLocalizations.of(context)!.sortTooltip,
|
tooltip: L10n.of(context).sortTooltip,
|
||||||
onPressed: _onEditAppBarSortPressed,
|
onPressed: _onEditAppBarSortPressed,
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
|
@ -282,8 +281,7 @@ class _AlbumViewerState extends State<AlbumViewer>
|
||||||
.toList();
|
.toList();
|
||||||
if (selected.isEmpty) {
|
if (selected.isEmpty) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content:
|
content: Text(L10n.of(context).shareSelectedEmptyNotification),
|
||||||
Text(AppLocalizations.of(context)!.shareSelectedEmptyNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
return;
|
return;
|
||||||
|
@ -312,7 +310,7 @@ class _AlbumViewerState extends State<AlbumViewer>
|
||||||
);
|
);
|
||||||
UpdateAlbum(albumRepo)(widget.account, newAlbum).then((_) {
|
UpdateAlbum(albumRepo)(widget.account, newAlbum).then((_) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.removeSelectedFromAlbumSuccessNotification(
|
.removeSelectedFromAlbumSuccessNotification(
|
||||||
selectedIndexes.length)),
|
selectedIndexes.length)),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
|
@ -327,7 +325,7 @@ class _AlbumViewerState extends State<AlbumViewer>
|
||||||
stacktrace);
|
stacktrace);
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text(
|
||||||
"${AppLocalizations.of(context)!.removeSelectedFromAlbumFailureNotification}: "
|
"${L10n.of(context).removeSelectedFromAlbumFailureNotification}: "
|
||||||
"${exception_util.toUserString(e, context)}"),
|
"${exception_util.toUserString(e, context)}"),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
|
@ -342,10 +340,10 @@ class _AlbumViewerState extends State<AlbumViewer>
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => FancyOptionPicker(
|
builder: (context) => FancyOptionPicker(
|
||||||
title: AppLocalizations.of(context)!.sortOptionDialogTitle,
|
title: L10n.of(context).sortOptionDialogTitle,
|
||||||
items: [
|
items: [
|
||||||
FancyOptionPickerItem(
|
FancyOptionPickerItem(
|
||||||
label: AppLocalizations.of(context)!.sortOptionTimeAscendingLabel,
|
label: L10n.of(context).sortOptionTimeAscendingLabel,
|
||||||
isSelected: sortProvider is AlbumTimeSortProvider &&
|
isSelected: sortProvider is AlbumTimeSortProvider &&
|
||||||
sortProvider.isAscending,
|
sortProvider.isAscending,
|
||||||
onSelect: () {
|
onSelect: () {
|
||||||
|
@ -354,7 +352,7 @@ class _AlbumViewerState extends State<AlbumViewer>
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
FancyOptionPickerItem(
|
FancyOptionPickerItem(
|
||||||
label: AppLocalizations.of(context)!.sortOptionTimeDescendingLabel,
|
label: L10n.of(context).sortOptionTimeDescendingLabel,
|
||||||
isSelected: sortProvider is AlbumTimeSortProvider &&
|
isSelected: sortProvider is AlbumTimeSortProvider &&
|
||||||
!sortProvider.isAscending,
|
!sortProvider.isAscending,
|
||||||
onSelect: () {
|
onSelect: () {
|
||||||
|
@ -878,7 +876,7 @@ class _EditLabelListItem extends _LabelListItem {
|
||||||
end: 0,
|
end: 0,
|
||||||
child: IconButton(
|
child: IconButton(
|
||||||
icon: Icon(Icons.edit),
|
icon: Icon(Icons.edit),
|
||||||
tooltip: AppLocalizations.of(context)!.editTooltip,
|
tooltip: L10n.of(context).editTooltip,
|
||||||
onPressed: onEditPressed,
|
onPressed: onEditPressed,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
import 'package:nc_photos/api/api.dart';
|
import 'package:nc_photos/api/api.dart';
|
||||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/file.dart';
|
import 'package:nc_photos/entity/file.dart';
|
||||||
import 'package:nc_photos/pref.dart';
|
import 'package:nc_photos/pref.dart';
|
||||||
|
@ -55,7 +55,7 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
|
||||||
actions: [
|
actions: [
|
||||||
PopupMenuButton(
|
PopupMenuButton(
|
||||||
icon: const Icon(Icons.photo_size_select_large),
|
icon: const Icon(Icons.photo_size_select_large),
|
||||||
tooltip: AppLocalizations.of(context)!.zoomTooltip,
|
tooltip: L10n.of(context).zoomTooltip,
|
||||||
itemBuilder: (context) => [
|
itemBuilder: (context) => [
|
||||||
PopupMenuZoom(
|
PopupMenuZoom(
|
||||||
initialValue: _thumbZoomLevel,
|
initialValue: _thumbZoomLevel,
|
||||||
|
@ -76,7 +76,7 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
|
||||||
itemBuilder: (context) => [
|
itemBuilder: (context) => [
|
||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
value: -1,
|
value: -1,
|
||||||
child: Text(AppLocalizations.of(context)!.editAlbumMenuLabel),
|
child: Text(L10n.of(context).editAlbumMenuLabel),
|
||||||
),
|
),
|
||||||
...(menuItemBuilder?.call(context) ?? []),
|
...(menuItemBuilder?.call(context) ?? []),
|
||||||
],
|
],
|
||||||
|
@ -117,8 +117,8 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
title: Text(AppLocalizations.of(context)!
|
title: Text(
|
||||||
.selectionAppBarTitle(selectedListItems.length)),
|
L10n.of(context).selectionAppBarTitle(selectedListItems.length)),
|
||||||
actions: actions,
|
actions: actions,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -138,13 +138,13 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
|
||||||
background: _getAppBarCover(context, account),
|
background: _getAppBarCover(context, account),
|
||||||
title: TextFormField(
|
title: TextFormField(
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText: AppLocalizations.of(context)!.nameInputHint,
|
hintText: L10n.of(context).nameInputHint,
|
||||||
),
|
),
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (value?.isNotEmpty == true) {
|
if (value?.isNotEmpty == true) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
return AppLocalizations.of(context)!.albumNameInputInvalidEmpty;
|
return L10n.of(context).albumNameInputInvalidEmpty;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onSaved: (value) {
|
onSaved: (value) {
|
||||||
|
@ -164,7 +164,7 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
|
||||||
leading: IconButton(
|
leading: IconButton(
|
||||||
icon: const Icon(Icons.check),
|
icon: const Icon(Icons.check),
|
||||||
color: Theme.of(context).colorScheme.primary,
|
color: Theme.of(context).colorScheme.primary,
|
||||||
tooltip: AppLocalizations.of(context)!.doneButtonTooltip,
|
tooltip: L10n.of(context).doneButtonTooltip,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
if (validateEditMode()) {
|
if (validateEditMode()) {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
|
|
@ -2,11 +2,11 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/bloc/scan_dir.dart';
|
import 'package:nc_photos/bloc/scan_dir.dart';
|
||||||
import 'package:nc_photos/entity/file.dart';
|
import 'package:nc_photos/entity/file.dart';
|
||||||
import 'package:nc_photos/entity/file/data_source.dart';
|
import 'package:nc_photos/entity/file/data_source.dart';
|
||||||
|
@ -148,12 +148,12 @@ class _ArchiveViewerState extends State<ArchiveViewer>
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
title: Text(AppLocalizations.of(context)!
|
title: Text(
|
||||||
.selectionAppBarTitle(selectedListItems.length)),
|
L10n.of(context).selectionAppBarTitle(selectedListItems.length)),
|
||||||
actions: [
|
actions: [
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.unarchive),
|
icon: const Icon(Icons.unarchive),
|
||||||
tooltip: AppLocalizations.of(context)!.unarchiveSelectedTooltip,
|
tooltip: L10n.of(context).unarchiveSelectedTooltip,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_onSelectionAppBarUnarchivePressed();
|
_onSelectionAppBarUnarchivePressed();
|
||||||
},
|
},
|
||||||
|
@ -165,12 +165,12 @@ class _ArchiveViewerState extends State<ArchiveViewer>
|
||||||
|
|
||||||
Widget _buildNormalAppBar(BuildContext context) {
|
Widget _buildNormalAppBar(BuildContext context) {
|
||||||
return SliverAppBar(
|
return SliverAppBar(
|
||||||
title: Text(AppLocalizations.of(context)!.albumArchiveLabel),
|
title: Text(L10n.of(context).albumArchiveLabel),
|
||||||
floating: true,
|
floating: true,
|
||||||
actions: [
|
actions: [
|
||||||
PopupMenuButton(
|
PopupMenuButton(
|
||||||
icon: const Icon(Icons.photo_size_select_large),
|
icon: const Icon(Icons.photo_size_select_large),
|
||||||
tooltip: AppLocalizations.of(context)!.zoomTooltip,
|
tooltip: L10n.of(context).zoomTooltip,
|
||||||
itemBuilder: (context) => [
|
itemBuilder: (context) => [
|
||||||
PopupMenuZoom(
|
PopupMenuZoom(
|
||||||
initialValue: _thumbZoomLevel,
|
initialValue: _thumbZoomLevel,
|
||||||
|
@ -212,7 +212,7 @@ class _ArchiveViewerState extends State<ArchiveViewer>
|
||||||
|
|
||||||
Future<void> _onSelectionAppBarUnarchivePressed() async {
|
Future<void> _onSelectionAppBarUnarchivePressed() async {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.unarchiveSelectedProcessingNotification(selectedListItems.length)),
|
.unarchiveSelectedProcessingNotification(selectedListItems.length)),
|
||||||
duration: k.snackBarDurationShort,
|
duration: k.snackBarDurationShort,
|
||||||
));
|
));
|
||||||
|
@ -240,13 +240,12 @@ class _ArchiveViewerState extends State<ArchiveViewer>
|
||||||
}
|
}
|
||||||
if (failures.isEmpty) {
|
if (failures.isEmpty) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text(L10n.of(context).unarchiveSelectedSuccessNotification),
|
||||||
AppLocalizations.of(context)!.unarchiveSelectedSuccessNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.unarchiveSelectedFailureNotification(failures.length)),
|
.unarchiveSelectedFailureNotification(failures.length)),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
import 'package:nc_photos/api/api.dart';
|
import 'package:nc_photos/api/api.dart';
|
||||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/album/provider.dart';
|
import 'package:nc_photos/entity/album/provider.dart';
|
||||||
import 'package:nc_photos/theme.dart';
|
import 'package:nc_photos/theme.dart';
|
||||||
|
@ -24,7 +24,7 @@ class AlbumGridItemBuilder {
|
||||||
var subtitle = "";
|
var subtitle = "";
|
||||||
String? subtitle2;
|
String? subtitle2;
|
||||||
if (album.provider is AlbumStaticProvider) {
|
if (album.provider is AlbumStaticProvider) {
|
||||||
subtitle = AppLocalizations.of(context)!
|
subtitle = L10n.of(context)
|
||||||
.albumSize(AlbumStaticProvider.of(album).items.length);
|
.albumSize(AlbumStaticProvider.of(album).items.length);
|
||||||
} else if (album.provider is AlbumDirProvider) {
|
} else if (album.provider is AlbumDirProvider) {
|
||||||
final provider = album.provider as AlbumDirProvider;
|
final provider = album.provider as AlbumDirProvider;
|
||||||
|
|
|
@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/bloc/app_password_exchange.dart';
|
import 'package:nc_photos/bloc/app_password_exchange.dart';
|
||||||
import 'package:nc_photos/exception.dart';
|
import 'package:nc_photos/exception.dart';
|
||||||
import 'package:nc_photos/exception_util.dart' as exception_util;
|
import 'package:nc_photos/exception_util.dart' as exception_util;
|
||||||
|
@ -86,8 +86,7 @@ class _ConnectState extends State<Connect> {
|
||||||
color: Theme.of(context).colorScheme.primary,
|
color: Theme.of(context).colorScheme.primary,
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
AppLocalizations.of(context)!
|
L10n.of(context).connectingToServer(widget.account.url),
|
||||||
.connectingToServer(widget.account.url),
|
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: Theme.of(context).textTheme.headline6,
|
style: Theme.of(context).textTheme.headline6,
|
||||||
)
|
)
|
||||||
|
@ -110,7 +109,7 @@ class _ConnectState extends State<Connect> {
|
||||||
} else if (state.exception is ApiException &&
|
} else if (state.exception is ApiException &&
|
||||||
(state.exception as ApiException).response.statusCode == 401) {
|
(state.exception as ApiException).response.statusCode == 401) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!.errorWrongPassword),
|
content: Text(L10n.of(context).errorWrongPassword),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
Navigator.of(context).pop(null);
|
Navigator.of(context).pop(null);
|
||||||
|
@ -128,9 +127,8 @@ class _ConnectState extends State<Connect> {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => AlertDialog(
|
builder: (context) => AlertDialog(
|
||||||
title: Text(AppLocalizations.of(context)!.serverCertErrorDialogTitle),
|
title: Text(L10n.of(context).serverCertErrorDialogTitle),
|
||||||
content:
|
content: Text(L10n.of(context).serverCertErrorDialogContent),
|
||||||
Text(AppLocalizations.of(context)!.serverCertErrorDialogContent),
|
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
@ -142,7 +140,7 @@ class _ConnectState extends State<Connect> {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop(true);
|
Navigator.of(context).pop(true);
|
||||||
},
|
},
|
||||||
child: Text(AppLocalizations.of(context)!.advancedButtonLabel),
|
child: Text(L10n.of(context).advancedButtonLabel),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -154,11 +152,10 @@ class _ConnectState extends State<Connect> {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => AlertDialog(
|
builder: (context) => AlertDialog(
|
||||||
title: Text(AppLocalizations.of(context)!.whitelistCertDialogTitle),
|
title: Text(L10n.of(context).whitelistCertDialogTitle),
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context).whitelistCertDialogContent(
|
||||||
.whitelistCertDialogContent(
|
SelfSignedCertManager().getLastBadCertHost(),
|
||||||
SelfSignedCertManager().getLastBadCertHost(),
|
SelfSignedCertManager().getLastBadCertFingerprint())),
|
||||||
SelfSignedCertManager().getLastBadCertFingerprint())),
|
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
@ -170,8 +167,7 @@ class _ConnectState extends State<Connect> {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop(true);
|
Navigator.of(context).pop(true);
|
||||||
},
|
},
|
||||||
child:
|
child: Text(L10n.of(context).whitelistCertButtonLabel),
|
||||||
Text(AppLocalizations.of(context)!.whitelistCertButtonLabel),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/bloc/ls_dir.dart';
|
import 'package:nc_photos/bloc/ls_dir.dart';
|
||||||
import 'package:nc_photos/entity/file.dart';
|
import 'package:nc_photos/entity/file.dart';
|
||||||
import 'package:nc_photos/exception_util.dart' as exception_util;
|
import 'package:nc_photos/exception_util.dart' as exception_util;
|
||||||
|
@ -99,8 +99,7 @@ mixin DirPickerMixin<T extends StatefulWidget> on State<T> {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
dense: true,
|
dense: true,
|
||||||
leading: const SizedBox(width: 24),
|
leading: const SizedBox(width: 24),
|
||||||
title: Text(
|
title: Text(L10n.of(context).rootPickerNavigateUpItemText),
|
||||||
AppLocalizations.of(context)!.rootPickerNavigateUpItemText),
|
|
||||||
onTap: () {
|
onTap: () {
|
||||||
try {
|
try {
|
||||||
_navigateInto(File(path: path.dirname(_currentPath)));
|
_navigateInto(File(path: path.dirname(_currentPath)));
|
||||||
|
@ -283,8 +282,8 @@ mixin DirPickerMixin<T extends StatefulWidget> on State<T> {
|
||||||
_picks.removeWhere((element) => identical(element, parent));
|
_picks.removeWhere((element) => identical(element, parent));
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content:
|
||||||
.rootPickerUnpickFailureNotification)));
|
Text(L10n.of(context).rootPickerUnpickFailureNotification)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/album/cover_provider.dart';
|
import 'package:nc_photos/entity/album/cover_provider.dart';
|
||||||
import 'package:nc_photos/entity/album/item.dart';
|
import 'package:nc_photos/entity/album/item.dart';
|
||||||
|
@ -250,7 +250,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
||||||
menuItemBuilder: (context) => [
|
menuItemBuilder: (context) => [
|
||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
value: _menuValueConvertBasic,
|
value: _menuValueConvertBasic,
|
||||||
child: Text(AppLocalizations.of(context)!.convertBasicAlbumMenuLabel),
|
child: Text(L10n.of(context).convertBasicAlbumMenuLabel),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
onSelectedMenuItem: (option) {
|
onSelectedMenuItem: (option) {
|
||||||
|
@ -272,7 +272,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
||||||
if (platform_k.isAndroid)
|
if (platform_k.isAndroid)
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.share),
|
icon: const Icon(Icons.share),
|
||||||
tooltip: AppLocalizations.of(context)!.shareSelectedTooltip,
|
tooltip: L10n.of(context).shareSelectedTooltip,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_onSelectionAppBarSharePressed(context);
|
_onSelectionAppBarSharePressed(context);
|
||||||
},
|
},
|
||||||
|
@ -282,7 +282,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
||||||
itemBuilder: (context) => [
|
itemBuilder: (context) => [
|
||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
value: _SelectionAppBarOption.delete,
|
value: _SelectionAppBarOption.delete,
|
||||||
child: Text(AppLocalizations.of(context)!.deleteSelectedTooltip),
|
child: Text(L10n.of(context).deleteSelectedTooltip),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
onSelected: (option) {
|
onSelected: (option) {
|
||||||
|
@ -298,7 +298,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
||||||
return buildEditAppBar(context, widget.account, widget.album, actions: [
|
return buildEditAppBar(context, widget.account, widget.album, actions: [
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.sort_by_alpha),
|
icon: Icon(Icons.sort_by_alpha),
|
||||||
tooltip: AppLocalizations.of(context)!.sortTooltip,
|
tooltip: L10n.of(context).sortTooltip,
|
||||||
onPressed: _onEditAppBarSortPressed,
|
onPressed: _onEditAppBarSortPressed,
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
|
@ -322,10 +322,9 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => AlertDialog(
|
builder: (context) => AlertDialog(
|
||||||
title: Text(AppLocalizations.of(context)!
|
title: Text(L10n.of(context).convertBasicAlbumConfirmationDialogTitle),
|
||||||
.convertBasicAlbumConfirmationDialogTitle),
|
content:
|
||||||
content: Text(AppLocalizations.of(context)!
|
Text(L10n.of(context).convertBasicAlbumConfirmationDialogContent),
|
||||||
.convertBasicAlbumConfirmationDialogContent),
|
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
@ -356,8 +355,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
||||||
),
|
),
|
||||||
).then((value) {
|
).then((value) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context).convertBasicAlbumSuccessNotification),
|
||||||
.convertBasicAlbumSuccessNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
|
@ -391,7 +389,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
||||||
|
|
||||||
void _onSelectionAppBarDeletePressed() async {
|
void _onSelectionAppBarDeletePressed() async {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.deleteSelectedProcessingNotification(selectedListItems.length)),
|
.deleteSelectedProcessingNotification(selectedListItems.length)),
|
||||||
duration: k.snackBarDurationShort,
|
duration: k.snackBarDurationShort,
|
||||||
));
|
));
|
||||||
|
@ -421,13 +419,12 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
||||||
|
|
||||||
if (failures.isEmpty) {
|
if (failures.isEmpty) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text(L10n.of(context).deleteSelectedSuccessNotification),
|
||||||
AppLocalizations.of(context)!.deleteSelectedSuccessNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.deleteSelectedFailureNotification(failures.length)),
|
.deleteSelectedFailureNotification(failures.length)),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
|
@ -448,10 +445,10 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => FancyOptionPicker(
|
builder: (context) => FancyOptionPicker(
|
||||||
title: AppLocalizations.of(context)!.sortOptionDialogTitle,
|
title: L10n.of(context).sortOptionDialogTitle,
|
||||||
items: [
|
items: [
|
||||||
FancyOptionPickerItem(
|
FancyOptionPickerItem(
|
||||||
label: AppLocalizations.of(context)!.sortOptionTimeAscendingLabel,
|
label: L10n.of(context).sortOptionTimeAscendingLabel,
|
||||||
isSelected: sortProvider is AlbumTimeSortProvider &&
|
isSelected: sortProvider is AlbumTimeSortProvider &&
|
||||||
sortProvider.isAscending,
|
sortProvider.isAscending,
|
||||||
onSelect: () {
|
onSelect: () {
|
||||||
|
@ -460,7 +457,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
FancyOptionPickerItem(
|
FancyOptionPickerItem(
|
||||||
label: AppLocalizations.of(context)!.sortOptionTimeDescendingLabel,
|
label: L10n.of(context).sortOptionTimeDescendingLabel,
|
||||||
isSelected: sortProvider is AlbumTimeSortProvider &&
|
isSelected: sortProvider is AlbumTimeSortProvider &&
|
||||||
!sortProvider.isAscending,
|
!sortProvider.isAscending,
|
||||||
onSelect: () {
|
onSelect: () {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/k.dart' as k;
|
import 'package:nc_photos/k.dart' as k;
|
||||||
import 'package:nc_photos/theme.dart';
|
import 'package:nc_photos/theme.dart';
|
||||||
import 'package:nc_photos/widget/home_albums.dart';
|
import 'package:nc_photos/widget/home_albums.dart';
|
||||||
|
@ -52,11 +52,11 @@ class _HomeState extends State<Home> {
|
||||||
items: <BottomNavigationBarItem>[
|
items: <BottomNavigationBarItem>[
|
||||||
BottomNavigationBarItem(
|
BottomNavigationBarItem(
|
||||||
icon: const Icon(Icons.photo_outlined),
|
icon: const Icon(Icons.photo_outlined),
|
||||||
label: AppLocalizations.of(context)!.photosTabLabel,
|
label: L10n.of(context).photosTabLabel,
|
||||||
),
|
),
|
||||||
BottomNavigationBarItem(
|
BottomNavigationBarItem(
|
||||||
icon: const Icon(Icons.photo_album_outlined),
|
icon: const Icon(Icons.photo_album_outlined),
|
||||||
label: AppLocalizations.of(context)!.albumsTabLabel,
|
label: L10n.of(context).albumsTabLabel,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
currentIndex: _nextPage,
|
currentIndex: _nextPage,
|
||||||
|
|
|
@ -2,11 +2,11 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||||
import 'package:kiwi/kiwi.dart';
|
import 'package:kiwi/kiwi.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/bloc/list_album.dart';
|
import 'package:nc_photos/bloc/list_album.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/album/provider.dart';
|
import 'package:nc_photos/entity/album/provider.dart';
|
||||||
|
@ -149,12 +149,12 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
title: Text(AppLocalizations.of(context)!
|
title:
|
||||||
.selectionAppBarTitle(_selectedItems.length)),
|
Text(L10n.of(context).selectionAppBarTitle(_selectedItems.length)),
|
||||||
actions: [
|
actions: [
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.delete),
|
icon: const Icon(Icons.delete),
|
||||||
tooltip: AppLocalizations.of(context)!.deleteSelectedTooltip,
|
tooltip: L10n.of(context).deleteSelectedTooltip,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_onSelectionAppBarDeletePressed();
|
_onSelectionAppBarDeletePressed();
|
||||||
},
|
},
|
||||||
|
@ -171,13 +171,13 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () => _onSearchPressed(context),
|
onPressed: () => _onSearchPressed(context),
|
||||||
icon: const Icon(Icons.search),
|
icon: const Icon(Icons.search),
|
||||||
tooltip: AppLocalizations.of(context)!.searchTooltip,
|
tooltip: L10n.of(context).searchTooltip,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
menuActions: [
|
menuActions: [
|
||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
value: _menuValueImport,
|
value: _menuValueImport,
|
||||||
child: Text(AppLocalizations.of(context)!.importFoldersTooltip),
|
child: Text(L10n.of(context).importFoldersTooltip),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
onSelectedMenuActions: (option) {
|
onSelectedMenuActions: (option) {
|
||||||
|
@ -225,7 +225,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
title: AppLocalizations.of(context)!.albumArchiveLabel,
|
title: L10n.of(context).albumArchiveLabel,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.of(context).pushNamed(ArchiveViewer.routeName,
|
Navigator.of(context).pushNamed(ArchiveViewer.routeName,
|
||||||
arguments: ArchiveViewerArguments(widget.account));
|
arguments: ArchiveViewerArguments(widget.account));
|
||||||
|
@ -247,7 +247,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
title: AppLocalizations.of(context)!.createAlbumTooltip,
|
title: L10n.of(context).createAlbumTooltip,
|
||||||
onTap: () => _onNewAlbumItemTap(context),
|
onTap: () => _onNewAlbumItemTap(context),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -323,8 +323,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
||||||
_log.severe(
|
_log.severe(
|
||||||
"[_onNewAlbumItemTap] Failed while showDialog", e, stacktrace);
|
"[_onNewAlbumItemTap] Failed while showDialog", e, stacktrace);
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content:
|
content: Text(L10n.of(context).createAlbumFailureNotification),
|
||||||
Text(AppLocalizations.of(context)!.createAlbumFailureNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
|
@ -337,7 +336,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
||||||
|
|
||||||
Future<void> _onSelectionAppBarDeletePressed() async {
|
Future<void> _onSelectionAppBarDeletePressed() async {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.deleteSelectedProcessingNotification(_selectedItems.length)),
|
.deleteSelectedProcessingNotification(_selectedItems.length)),
|
||||||
duration: k.snackBarDurationShort,
|
duration: k.snackBarDurationShort,
|
||||||
));
|
));
|
||||||
|
@ -363,13 +362,12 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
||||||
}
|
}
|
||||||
if (failures.isEmpty) {
|
if (failures.isEmpty) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text(L10n.of(context).deleteSelectedSuccessNotification),
|
||||||
AppLocalizations.of(context)!.deleteSelectedSuccessNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.deleteSelectedFailureNotification(failures.length)),
|
.deleteSelectedFailureNotification(failures.length)),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import 'package:event_bus/event_bus.dart';
|
import 'package:event_bus/event_bus.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:kiwi/kiwi.dart';
|
import 'package:kiwi/kiwi.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/event/event.dart';
|
import 'package:nc_photos/event/event.dart';
|
||||||
import 'package:nc_photos/pref.dart';
|
import 'package:nc_photos/pref.dart';
|
||||||
import 'package:nc_photos/theme.dart';
|
import 'package:nc_photos/theme.dart';
|
||||||
|
@ -97,8 +97,7 @@ class HomeSliverAppBar extends StatelessWidget {
|
||||||
[
|
[
|
||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
value: _menuValueAbout,
|
value: _menuValueAbout,
|
||||||
child:
|
child: Text(L10n.of(context).settingsMenuLabel),
|
||||||
Text(AppLocalizations.of(context)!.settingsMenuLabel),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
onSelected: (option) {
|
onSelected: (option) {
|
||||||
|
|
|
@ -3,13 +3,13 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:kiwi/kiwi.dart';
|
import 'package:kiwi/kiwi.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/bloc/scan_dir.dart';
|
import 'package:nc_photos/bloc/scan_dir.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/album/item.dart';
|
import 'package:nc_photos/entity/album/item.dart';
|
||||||
|
@ -162,20 +162,20 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
title: Text(AppLocalizations.of(context)!
|
title: Text(
|
||||||
.selectionAppBarTitle(selectedListItems.length)),
|
L10n.of(context).selectionAppBarTitle(selectedListItems.length)),
|
||||||
actions: [
|
actions: [
|
||||||
if (platform_k.isAndroid)
|
if (platform_k.isAndroid)
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.share),
|
icon: const Icon(Icons.share),
|
||||||
tooltip: AppLocalizations.of(context)!.shareSelectedTooltip,
|
tooltip: L10n.of(context).shareSelectedTooltip,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_onSelectionAppBarSharePressed(context);
|
_onSelectionAppBarSharePressed(context);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.playlist_add),
|
icon: const Icon(Icons.playlist_add),
|
||||||
tooltip: AppLocalizations.of(context)!.addSelectedToAlbumTooltip,
|
tooltip: L10n.of(context).addSelectedToAlbumTooltip,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_onSelectionAppBarAddToAlbumPressed(context);
|
_onSelectionAppBarAddToAlbumPressed(context);
|
||||||
},
|
},
|
||||||
|
@ -185,13 +185,11 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
itemBuilder: (context) => [
|
itemBuilder: (context) => [
|
||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
value: _SelectionAppBarMenuOption.archive,
|
value: _SelectionAppBarMenuOption.archive,
|
||||||
child: Text(
|
child: Text(L10n.of(context).archiveSelectedMenuLabel),
|
||||||
AppLocalizations.of(context)!.archiveSelectedMenuLabel),
|
|
||||||
),
|
),
|
||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
value: _SelectionAppBarMenuOption.delete,
|
value: _SelectionAppBarMenuOption.delete,
|
||||||
child:
|
child: Text(L10n.of(context).deleteSelectedTooltip),
|
||||||
Text(AppLocalizations.of(context)!.deleteSelectedTooltip),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
onSelected: (option) {
|
onSelected: (option) {
|
||||||
|
@ -213,7 +211,7 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
actions: [
|
actions: [
|
||||||
PopupMenuButton(
|
PopupMenuButton(
|
||||||
icon: const Icon(Icons.photo_size_select_large),
|
icon: const Icon(Icons.photo_size_select_large),
|
||||||
tooltip: AppLocalizations.of(context)!.zoomTooltip,
|
tooltip: L10n.of(context).zoomTooltip,
|
||||||
itemBuilder: (context) => [
|
itemBuilder: (context) => [
|
||||||
PopupMenuZoom(
|
PopupMenuZoom(
|
||||||
initialValue: _thumbZoomLevel,
|
initialValue: _thumbZoomLevel,
|
||||||
|
@ -232,7 +230,7 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
menuActions: [
|
menuActions: [
|
||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
value: _menuValueRefresh,
|
value: _menuValueRefresh,
|
||||||
child: Text(AppLocalizations.of(context)!.refreshMenuLabel),
|
child: Text(L10n.of(context).refreshMenuLabel),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
onSelectedMenuActions: (option) {
|
onSelectedMenuActions: (option) {
|
||||||
|
@ -307,15 +305,14 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
clearSelectedItems();
|
clearSelectedItems();
|
||||||
});
|
});
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.addSelectedToAlbumSuccessNotification(value.name)),
|
.addSelectedToAlbumSuccessNotification(value.name)),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
}).catchError((_) {});
|
}).catchError((_) {});
|
||||||
} else {
|
} else {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context).addSelectedToAlbumFailureNotification),
|
||||||
.addSelectedToAlbumFailureNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -325,9 +322,9 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
e,
|
e,
|
||||||
stacktrace);
|
stacktrace);
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content:
|
||||||
"${AppLocalizations.of(context)!.addSelectedToAlbumFailureNotification}: "
|
Text("${L10n.of(context).addSelectedToAlbumFailureNotification}: "
|
||||||
"${exception_util.toUserString(e, context)}"),
|
"${exception_util.toUserString(e, context)}"),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
|
@ -355,9 +352,9 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
_log.shout(
|
_log.shout(
|
||||||
"[_addSelectedToAlbum] Failed while updating album", e, stacktrace);
|
"[_addSelectedToAlbum] Failed while updating album", e, stacktrace);
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content:
|
||||||
"${AppLocalizations.of(context)!.addSelectedToAlbumFailureNotification}: "
|
Text("${L10n.of(context).addSelectedToAlbumFailureNotification}: "
|
||||||
"${exception_util.toUserString(e, context)}"),
|
"${exception_util.toUserString(e, context)}"),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
rethrow;
|
rethrow;
|
||||||
|
@ -366,7 +363,7 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
|
|
||||||
Future<void> _onSelectionAppBarDeletePressed(BuildContext context) async {
|
Future<void> _onSelectionAppBarDeletePressed(BuildContext context) async {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.deleteSelectedProcessingNotification(selectedListItems.length)),
|
.deleteSelectedProcessingNotification(selectedListItems.length)),
|
||||||
duration: k.snackBarDurationShort,
|
duration: k.snackBarDurationShort,
|
||||||
));
|
));
|
||||||
|
@ -394,13 +391,12 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
}
|
}
|
||||||
if (failures.isEmpty) {
|
if (failures.isEmpty) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text(L10n.of(context).deleteSelectedSuccessNotification),
|
||||||
AppLocalizations.of(context)!.deleteSelectedSuccessNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.deleteSelectedFailureNotification(failures.length)),
|
.deleteSelectedFailureNotification(failures.length)),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
|
@ -426,7 +422,7 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
|
|
||||||
Future<void> _onSelectionAppBarArchivePressed(BuildContext context) async {
|
Future<void> _onSelectionAppBarArchivePressed(BuildContext context) async {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.archiveSelectedProcessingNotification(selectedListItems.length)),
|
.archiveSelectedProcessingNotification(selectedListItems.length)),
|
||||||
duration: k.snackBarDurationShort,
|
duration: k.snackBarDurationShort,
|
||||||
));
|
));
|
||||||
|
@ -454,13 +450,12 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
}
|
}
|
||||||
if (failures.isEmpty) {
|
if (failures.isEmpty) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text(L10n.of(context).archiveSelectedSuccessNotification),
|
||||||
AppLocalizations.of(context)!.archiveSelectedSuccessNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context)
|
||||||
.archiveSelectedFailureNotification(failures.length)),
|
.archiveSelectedFailureNotification(failures.length)),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
|
|
|
@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/event/event.dart';
|
import 'package:nc_photos/event/event.dart';
|
||||||
import 'package:nc_photos/language_util.dart' as language_util;
|
import 'package:nc_photos/language_util.dart' as language_util;
|
||||||
import 'package:nc_photos/pref.dart';
|
import 'package:nc_photos/pref.dart';
|
||||||
|
@ -45,7 +45,7 @@ class _MyAppState extends State<MyApp> implements SnackBarHandler {
|
||||||
@override
|
@override
|
||||||
build(BuildContext context) {
|
build(BuildContext context) {
|
||||||
return MaterialApp(
|
return MaterialApp(
|
||||||
onGenerateTitle: (context) => AppLocalizations.of(context)!.appTitle,
|
onGenerateTitle: (context) => L10n.of(context).appTitle,
|
||||||
theme: _getLightTheme(),
|
theme: _getLightTheme(),
|
||||||
darkTheme: _getDarkTheme(),
|
darkTheme: _getDarkTheme(),
|
||||||
themeMode:
|
themeMode:
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/album/cover_provider.dart';
|
import 'package:nc_photos/entity/album/cover_provider.dart';
|
||||||
import 'package:nc_photos/entity/album/provider.dart';
|
import 'package:nc_photos/entity/album/provider.dart';
|
||||||
|
@ -40,7 +40,7 @@ class _NewAlbumDialogState extends State<NewAlbumDialog> {
|
||||||
return Visibility(
|
return Visibility(
|
||||||
visible: _isVisible,
|
visible: _isVisible,
|
||||||
child: AlertDialog(
|
child: AlertDialog(
|
||||||
title: Text(AppLocalizations.of(context)!.createAlbumTooltip),
|
title: Text(L10n.of(context).createAlbumTooltip),
|
||||||
content: Form(
|
content: Form(
|
||||||
key: _formKey,
|
key: _formKey,
|
||||||
child: Container(
|
child: Container(
|
||||||
|
@ -51,12 +51,11 @@ class _NewAlbumDialogState extends State<NewAlbumDialog> {
|
||||||
children: [
|
children: [
|
||||||
TextFormField(
|
TextFormField(
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText: AppLocalizations.of(context)!.nameInputHint,
|
hintText: L10n.of(context).nameInputHint,
|
||||||
),
|
),
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (value!.isEmpty) {
|
if (value!.isEmpty) {
|
||||||
return AppLocalizations.of(context)!
|
return L10n.of(context).albumNameInputInvalidEmpty;
|
||||||
.albumNameInputInvalidEmpty;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
@ -188,10 +187,10 @@ extension on _Provider {
|
||||||
String toValueString(BuildContext context) {
|
String toValueString(BuildContext context) {
|
||||||
switch (this) {
|
switch (this) {
|
||||||
case _Provider.static:
|
case _Provider.static:
|
||||||
return AppLocalizations.of(context)!.createAlbumDialogBasicLabel;
|
return L10n.of(context).createAlbumDialogBasicLabel;
|
||||||
|
|
||||||
case _Provider.dir:
|
case _Provider.dir:
|
||||||
return AppLocalizations.of(context)!.createAlbumDialogFolderBasedLabel;
|
return L10n.of(context).createAlbumDialogFolderBasedLabel;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw StateError("Unknown value: $this");
|
throw StateError("Unknown value: $this");
|
||||||
|
@ -201,11 +200,10 @@ extension on _Provider {
|
||||||
String toDescription(BuildContext context) {
|
String toDescription(BuildContext context) {
|
||||||
switch (this) {
|
switch (this) {
|
||||||
case _Provider.static:
|
case _Provider.static:
|
||||||
return AppLocalizations.of(context)!.createAlbumDialogBasicDescription;
|
return L10n.of(context).createAlbumDialogBasicDescription;
|
||||||
|
|
||||||
case _Provider.dir:
|
case _Provider.dir:
|
||||||
return AppLocalizations.of(context)!
|
return L10n.of(context).createAlbumDialogFolderBasedDescription;
|
||||||
.createAlbumDialogFolderBasedDescription;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw StateError("Unknown value: $this");
|
throw StateError("Unknown value: $this");
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/num_extension.dart';
|
import 'package:nc_photos/num_extension.dart';
|
||||||
|
|
||||||
class PhotoDateTimeEditDialog extends StatefulWidget {
|
class PhotoDateTimeEditDialog extends StatefulWidget {
|
||||||
|
@ -20,7 +20,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
||||||
@override
|
@override
|
||||||
build(BuildContext context) {
|
build(BuildContext context) {
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: Text(AppLocalizations.of(context)!.updateDateTimeDialogTitle),
|
title: Text(L10n.of(context).updateDateTimeDialogTitle),
|
||||||
content: Form(
|
content: Form(
|
||||||
key: _formKey,
|
key: _formKey,
|
||||||
child: Container(
|
child: Container(
|
||||||
|
@ -29,7 +29,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
AppLocalizations.of(context)!.dateSubtitle,
|
L10n.of(context).dateSubtitle,
|
||||||
style: Theme.of(context).textTheme.subtitle2,
|
style: Theme.of(context).textTheme.subtitle2,
|
||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
|
@ -37,8 +37,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
||||||
Flexible(
|
Flexible(
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText:
|
hintText: L10n.of(context).dateYearInputHint,
|
||||||
AppLocalizations.of(context)!.dateYearInputHint,
|
|
||||||
),
|
),
|
||||||
keyboardType: TextInputType.number,
|
keyboardType: TextInputType.number,
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
|
@ -46,8 +45,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
||||||
int.parse(value!);
|
int.parse(value!);
|
||||||
return null;
|
return null;
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
return AppLocalizations.of(context)!
|
return L10n.of(context).dateTimeInputInvalid;
|
||||||
.dateTimeInputInvalid;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onSaved: (value) {
|
onSaved: (value) {
|
||||||
|
@ -61,16 +59,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
||||||
Flexible(
|
Flexible(
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText:
|
hintText: L10n.of(context).dateMonthInputHint,
|
||||||
AppLocalizations.of(context)!.dateMonthInputHint,
|
|
||||||
),
|
),
|
||||||
keyboardType: TextInputType.number,
|
keyboardType: TextInputType.number,
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (int.tryParse(value!)?.inRange(1, 12) == true) {
|
if (int.tryParse(value!)?.inRange(1, 12) == true) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return AppLocalizations.of(context)!
|
return L10n.of(context).dateTimeInputInvalid;
|
||||||
.dateTimeInputInvalid;
|
|
||||||
},
|
},
|
||||||
onSaved: (value) {
|
onSaved: (value) {
|
||||||
_formValue.month = int.parse(value!);
|
_formValue.month = int.parse(value!);
|
||||||
|
@ -85,16 +81,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
||||||
Flexible(
|
Flexible(
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText:
|
hintText: L10n.of(context).dateDayInputHint,
|
||||||
AppLocalizations.of(context)!.dateDayInputHint,
|
|
||||||
),
|
),
|
||||||
keyboardType: TextInputType.number,
|
keyboardType: TextInputType.number,
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (int.tryParse(value!)?.inRange(1, 31) == true) {
|
if (int.tryParse(value!)?.inRange(1, 31) == true) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return AppLocalizations.of(context)!
|
return L10n.of(context).dateTimeInputInvalid;
|
||||||
.dateTimeInputInvalid;
|
|
||||||
},
|
},
|
||||||
onSaved: (value) {
|
onSaved: (value) {
|
||||||
_formValue.day = int.parse(value!);
|
_formValue.day = int.parse(value!);
|
||||||
|
@ -108,7 +102,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
Text(
|
Text(
|
||||||
AppLocalizations.of(context)!.timeSubtitle,
|
L10n.of(context).timeSubtitle,
|
||||||
style: Theme.of(context).textTheme.subtitle2,
|
style: Theme.of(context).textTheme.subtitle2,
|
||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
|
@ -116,16 +110,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
||||||
Flexible(
|
Flexible(
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText:
|
hintText: L10n.of(context).timeHourInputHint,
|
||||||
AppLocalizations.of(context)!.timeHourInputHint,
|
|
||||||
),
|
),
|
||||||
keyboardType: TextInputType.number,
|
keyboardType: TextInputType.number,
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (int.tryParse(value!)?.inRange(0, 23) == true) {
|
if (int.tryParse(value!)?.inRange(0, 23) == true) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return AppLocalizations.of(context)!
|
return L10n.of(context).dateTimeInputInvalid;
|
||||||
.dateTimeInputInvalid;
|
|
||||||
},
|
},
|
||||||
onSaved: (value) {
|
onSaved: (value) {
|
||||||
_formValue.hour = int.parse(value!);
|
_formValue.hour = int.parse(value!);
|
||||||
|
@ -140,16 +132,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
||||||
Flexible(
|
Flexible(
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText:
|
hintText: L10n.of(context).timeMinuteInputHint,
|
||||||
AppLocalizations.of(context)!.timeMinuteInputHint,
|
|
||||||
),
|
),
|
||||||
keyboardType: TextInputType.number,
|
keyboardType: TextInputType.number,
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (int.tryParse(value!)?.inRange(0, 59) == true) {
|
if (int.tryParse(value!)?.inRange(0, 59) == true) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return AppLocalizations.of(context)!
|
return L10n.of(context).dateTimeInputInvalid;
|
||||||
.dateTimeInputInvalid;
|
|
||||||
},
|
},
|
||||||
onSaved: (value) {
|
onSaved: (value) {
|
||||||
_formValue.minute = int.parse(value!);
|
_formValue.minute = int.parse(value!);
|
||||||
|
|
|
@ -2,10 +2,10 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/entity/file.dart';
|
import 'package:nc_photos/entity/file.dart';
|
||||||
import 'package:nc_photos/entity/file/data_source.dart';
|
import 'package:nc_photos/entity/file/data_source.dart';
|
||||||
import 'package:nc_photos/exception_util.dart' as exception_util;
|
import 'package:nc_photos/exception_util.dart' as exception_util;
|
||||||
|
@ -105,7 +105,7 @@ class _RootPickerState extends State<RootPicker>
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
AppLocalizations.of(context)!.rootPickerHeaderText,
|
L10n.of(context).rootPickerHeaderText,
|
||||||
style: Theme.of(context).textTheme.headline5,
|
style: Theme.of(context).textTheme.headline5,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
|
@ -113,7 +113,7 @@ class _RootPickerState extends State<RootPicker>
|
||||||
Align(
|
Align(
|
||||||
alignment: AlignmentDirectional.topStart,
|
alignment: AlignmentDirectional.topStart,
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context)!.rootPickerSubHeaderText,
|
L10n.of(context).rootPickerSubHeaderText,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -132,11 +132,11 @@ class _RootPickerState extends State<RootPicker>
|
||||||
children: [
|
children: [
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () => _onSkipPressed(context),
|
onPressed: () => _onSkipPressed(context),
|
||||||
child: Text(AppLocalizations.of(context)!.skipButtonLabel),
|
child: Text(L10n.of(context).skipButtonLabel),
|
||||||
),
|
),
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
onPressed: () => _onConfirmPressed(context),
|
onPressed: () => _onConfirmPressed(context),
|
||||||
child: Text(AppLocalizations.of(context)!.confirmButtonLabel),
|
child: Text(L10n.of(context).confirmButtonLabel),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -150,8 +150,8 @@ class _RootPickerState extends State<RootPicker>
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => AlertDialog(
|
builder: (context) => AlertDialog(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(
|
||||||
.rootPickerSkipConfirmationDialogContent),
|
L10n.of(context).rootPickerSkipConfirmationDialogContent),
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
@ -178,8 +178,7 @@ class _RootPickerState extends State<RootPicker>
|
||||||
final roots = getPickedDirs().map((e) => e.strippedPath).toList();
|
final roots = getPickedDirs().map((e) => e.strippedPath).toList();
|
||||||
if (roots.isEmpty) {
|
if (roots.isEmpty) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content:
|
content: Text(L10n.of(context).rootPickerListEmptyNotification),
|
||||||
Text(AppLocalizations.of(context)!.rootPickerListEmptyNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
return;
|
return;
|
||||||
|
@ -199,7 +198,7 @@ class _RootPickerState extends State<RootPicker>
|
||||||
barrierDismissible: false,
|
barrierDismissible: false,
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => ProcessingDialog(
|
builder: (context) => ProcessingDialog(
|
||||||
text: AppLocalizations.of(context)!.genericProcessingDialogContent),
|
text: L10n.of(context).genericProcessingDialogContent),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,9 @@ import 'dart:math' as math;
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/iterable_extension.dart';
|
import 'package:nc_photos/iterable_extension.dart';
|
||||||
import 'package:nc_photos/k.dart' as k;
|
import 'package:nc_photos/k.dart' as k;
|
||||||
import 'package:nc_photos/platform/k.dart' as platform_k;
|
import 'package:nc_photos/platform/k.dart' as platform_k;
|
||||||
|
@ -184,8 +184,8 @@ mixin SelectableItemStreamListMixin<T extends StatefulWidget> on State<T> {
|
||||||
if (!SessionStorage().hasShowRangeSelectNotification) {
|
if (!SessionStorage().hasShowRangeSelectNotification) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(platform_k.isWeb
|
content: Text(platform_k.isWeb
|
||||||
? AppLocalizations.of(context)!.webSelectRangeNotification
|
? L10n.of(context).webSelectRangeNotification
|
||||||
: AppLocalizations.of(context)!.mobileSelectRangeNotification),
|
: L10n.of(context).mobileSelectRangeNotification),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
SessionStorage().hasShowRangeSelectNotification = true;
|
SessionStorage().hasShowRangeSelectNotification = true;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import 'package:event_bus/event_bus.dart';
|
import 'package:event_bus/event_bus.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:kiwi/kiwi.dart';
|
import 'package:kiwi/kiwi.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/event/event.dart';
|
import 'package:nc_photos/event/event.dart';
|
||||||
import 'package:nc_photos/k.dart' as k;
|
import 'package:nc_photos/k.dart' as k;
|
||||||
import 'package:nc_photos/language_util.dart' as language_util;
|
import 'package:nc_photos/language_util.dart' as language_util;
|
||||||
|
@ -62,57 +62,51 @@ class _SettingsState extends State<Settings> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildContent(BuildContext context) {
|
Widget _buildContent(BuildContext context) {
|
||||||
final translator = AppLocalizations.of(context)!.translator;
|
final translator = L10n.of(context).translator;
|
||||||
return CustomScrollView(
|
return CustomScrollView(
|
||||||
slivers: [
|
slivers: [
|
||||||
SliverAppBar(
|
SliverAppBar(
|
||||||
pinned: true,
|
pinned: true,
|
||||||
title: Text(AppLocalizations.of(context)!.settingsWidgetTitle),
|
title: Text(L10n.of(context).settingsWidgetTitle),
|
||||||
),
|
),
|
||||||
SliverList(
|
SliverList(
|
||||||
delegate: SliverChildListDelegate(
|
delegate: SliverChildListDelegate(
|
||||||
[
|
[
|
||||||
ListTile(
|
ListTile(
|
||||||
title:
|
title: Text(L10n.of(context).settingsLanguageTitle),
|
||||||
Text(AppLocalizations.of(context)!.settingsLanguageTitle),
|
|
||||||
subtitle: Text(language_util.getSelectedLanguageName(context)),
|
subtitle: Text(language_util.getSelectedLanguageName(context)),
|
||||||
onTap: () => _onLanguageTap(context),
|
onTap: () => _onLanguageTap(context),
|
||||||
),
|
),
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(
|
title: Text(L10n.of(context).settingsExifSupportTitle),
|
||||||
AppLocalizations.of(context)!.settingsExifSupportTitle),
|
|
||||||
subtitle: _isEnableExif
|
subtitle: _isEnableExif
|
||||||
? Text(AppLocalizations.of(context)!
|
? Text(L10n.of(context).settingsExifSupportTrueSubtitle)
|
||||||
.settingsExifSupportTrueSubtitle)
|
|
||||||
: null,
|
: null,
|
||||||
value: _isEnableExif,
|
value: _isEnableExif,
|
||||||
onChanged: (value) => _onExifSupportChanged(context, value),
|
onChanged: (value) => _onExifSupportChanged(context, value),
|
||||||
),
|
),
|
||||||
_buildCaption(context,
|
_buildCaption(
|
||||||
AppLocalizations.of(context)!.settingsAboutSectionTitle),
|
context, L10n.of(context).settingsAboutSectionTitle),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.settingsVersionTitle),
|
title: Text(L10n.of(context).settingsVersionTitle),
|
||||||
subtitle: const Text(k.versionStr),
|
subtitle: const Text(k.versionStr),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title:
|
title: Text(L10n.of(context).settingsSourceCodeTitle),
|
||||||
Text(AppLocalizations.of(context)!.settingsSourceCodeTitle),
|
|
||||||
subtitle: Text(_sourceRepo),
|
subtitle: Text(_sourceRepo),
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
await launch(_sourceRepo);
|
await launch(_sourceRepo);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title:
|
title: Text(L10n.of(context).settingsBugReportTitle),
|
||||||
Text(AppLocalizations.of(context)!.settingsBugReportTitle),
|
|
||||||
onTap: () {
|
onTap: () {
|
||||||
launch(_bugReportUrl);
|
launch(_bugReportUrl);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
if (translator.isNotEmpty)
|
if (translator.isNotEmpty)
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text(
|
title: Text(L10n.of(context).settingsTranslatorTitle),
|
||||||
AppLocalizations.of(context)!.settingsTranslatorTitle),
|
|
||||||
subtitle: Text(translator),
|
subtitle: Text(translator),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
launch(_translationUrl);
|
launch(_translationUrl);
|
||||||
|
@ -176,9 +170,8 @@ class _SettingsState extends State<Settings> {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => AlertDialog(
|
builder: (context) => AlertDialog(
|
||||||
title: Text(
|
title: Text(L10n.of(context).exifSupportConfirmationDialogTitle),
|
||||||
AppLocalizations.of(context)!.exifSupportConfirmationDialogTitle),
|
content: Text(L10n.of(context).exifSupportDetails),
|
||||||
content: Text(AppLocalizations.of(context)!.exifSupportDetails),
|
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
@ -190,7 +183,7 @@ class _SettingsState extends State<Settings> {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop(true);
|
Navigator.of(context).pop(true);
|
||||||
},
|
},
|
||||||
child: Text(AppLocalizations.of(context)!.enableButtonLabel),
|
child: Text(L10n.of(context).enableButtonLabel),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -219,8 +212,7 @@ class _SettingsState extends State<Settings> {
|
||||||
} else {
|
} else {
|
||||||
_log.severe("[_setExifSupport] Failed writing pref");
|
_log.severe("[_setExifSupport] Failed writing pref");
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text(L10n.of(context).writePreferenceFailureNotification),
|
||||||
AppLocalizations.of(context)!.writePreferenceFailureNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
setState(() {
|
setState(() {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/k.dart' as k;
|
import 'package:nc_photos/k.dart' as k;
|
||||||
import 'package:nc_photos/pref.dart';
|
import 'package:nc_photos/pref.dart';
|
||||||
import 'package:nc_photos/theme.dart';
|
import 'package:nc_photos/theme.dart';
|
||||||
|
@ -31,7 +31,7 @@ class _SetupState extends State<Setup> {
|
||||||
|
|
||||||
PreferredSizeWidget _buildAppBar(BuildContext context) {
|
PreferredSizeWidget _buildAppBar(BuildContext context) {
|
||||||
return AppBar(
|
return AppBar(
|
||||||
title: Text(AppLocalizations.of(context)!.setupWidgetTitle),
|
title: Text(L10n.of(context).setupWidgetTitle),
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -69,8 +69,7 @@ class _SetupState extends State<Setup> {
|
||||||
? [
|
? [
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
onPressed: _onDonePressed,
|
onPressed: _onDonePressed,
|
||||||
child: Text(
|
child: Text(L10n.of(context).doneButtonLabel),
|
||||||
AppLocalizations.of(context)!.doneButtonLabel),
|
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
: [
|
: [
|
||||||
|
@ -83,8 +82,7 @@ class _SetupState extends State<Setup> {
|
||||||
.getPageId());
|
.getPageId());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: Text(
|
child: Text(L10n.of(context).nextButtonLabel),
|
||||||
AppLocalizations.of(context)!.nextButtonLabel),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -148,20 +146,19 @@ class _ExifState extends State<_Exif> {
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.settingsExifSupportTitle),
|
title: Text(L10n.of(context).settingsExifSupportTitle),
|
||||||
value: _isEnableExif,
|
value: _isEnableExif,
|
||||||
onChanged: _onValueChanged,
|
onChanged: _onValueChanged,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
child: Text(AppLocalizations.of(context)!.exifSupportDetails),
|
child: Text(L10n.of(context).exifSupportDetails),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
child: Text(
|
child: Text(L10n.of(context).setupSettingsModifyLaterHint,
|
||||||
AppLocalizations.of(context)!.setupSettingsModifyLaterHint,
|
|
||||||
style: Theme.of(context)
|
style: Theme.of(context)
|
||||||
.textTheme
|
.textTheme
|
||||||
.bodyText2!
|
.bodyText2!
|
||||||
|
@ -200,8 +197,7 @@ class _HiddenPrefDirNoticeState extends State<_HiddenPrefDirNotice> {
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
child: Text(
|
child: Text(L10n.of(context).setupHiddenPrefDirNoticeDetail),
|
||||||
AppLocalizations.of(context)!.setupHiddenPrefDirNoticeDetail),
|
|
||||||
),
|
),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
Align(
|
Align(
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/list_extension.dart';
|
import 'package:nc_photos/list_extension.dart';
|
||||||
import 'package:nc_photos/platform/k.dart' as platform_k;
|
import 'package:nc_photos/platform/k.dart' as platform_k;
|
||||||
import 'package:nc_photos/pref.dart';
|
import 'package:nc_photos/pref.dart';
|
||||||
|
@ -49,7 +49,7 @@ class _SignInState extends State<SignIn> {
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(24),
|
padding: const EdgeInsets.all(24),
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context)!.signInHeaderText,
|
L10n.of(context).signInHeaderText,
|
||||||
style: Theme.of(context).textTheme.headline5,
|
style: Theme.of(context).textTheme.headline5,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
|
@ -70,7 +70,7 @@ class _SignInState extends State<SignIn> {
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
horizontal: 32, vertical: 16),
|
horizontal: 32, vertical: 16),
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context)!.signIn2faHintText,
|
L10n.of(context).signIn2faHintText,
|
||||||
style: TextStyle(fontStyle: FontStyle.italic),
|
style: TextStyle(fontStyle: FontStyle.italic),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -98,8 +98,7 @@ class _SignInState extends State<SignIn> {
|
||||||
_connect();
|
_connect();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: Text(AppLocalizations.of(context)!
|
child: Text(L10n.of(context).connectButtonLabel),
|
||||||
.connectButtonLabel),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -159,14 +158,12 @@ class _SignInState extends State<SignIn> {
|
||||||
Expanded(
|
Expanded(
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText:
|
hintText: L10n.of(context).serverAddressInputHint,
|
||||||
AppLocalizations.of(context)!.serverAddressInputHint,
|
|
||||||
),
|
),
|
||||||
keyboardType: TextInputType.url,
|
keyboardType: TextInputType.url,
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (value!.trim().trimRightAny("/").isEmpty) {
|
if (value!.trim().trimRightAny("/").isEmpty) {
|
||||||
return AppLocalizations.of(context)!
|
return L10n.of(context).serverAddressInputInvalidEmpty;
|
||||||
.serverAddressInputInvalidEmpty;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
@ -180,11 +177,11 @@ class _SignInState extends State<SignIn> {
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
TextFormField(
|
TextFormField(
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText: AppLocalizations.of(context)!.usernameInputHint,
|
hintText: L10n.of(context).usernameInputHint,
|
||||||
),
|
),
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (value!.trim().isEmpty) {
|
if (value!.trim().isEmpty) {
|
||||||
return AppLocalizations.of(context)!.usernameInputInvalidEmpty;
|
return L10n.of(context).usernameInputInvalidEmpty;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
@ -195,12 +192,12 @@ class _SignInState extends State<SignIn> {
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
TextFormField(
|
TextFormField(
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText: AppLocalizations.of(context)!.passwordInputHint,
|
hintText: L10n.of(context).passwordInputHint,
|
||||||
),
|
),
|
||||||
obscureText: true,
|
obscureText: true,
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (value!.trim().isEmpty) {
|
if (value!.trim().isEmpty) {
|
||||||
return AppLocalizations.of(context)!.passwordInputInvalidEmpty;
|
return L10n.of(context).passwordInputInvalidEmpty;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/changelog.dart' as changelog;
|
import 'package:nc_photos/changelog.dart' as changelog;
|
||||||
import 'package:nc_photos/k.dart' as k;
|
import 'package:nc_photos/k.dart' as k;
|
||||||
import 'package:nc_photos/pref.dart';
|
import 'package:nc_photos/pref.dart';
|
||||||
|
@ -56,7 +56,7 @@ class _SplashState extends State<Splash> {
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Text(
|
Text(
|
||||||
AppLocalizations.of(context)!.appTitle,
|
L10n.of(context).appTitle,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: Theme.of(context).textTheme.headline4,
|
style: Theme.of(context).textTheme.headline4,
|
||||||
)
|
)
|
||||||
|
@ -94,7 +94,7 @@ class _SplashState extends State<Splash> {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => AlertDialog(
|
builder: (context) => AlertDialog(
|
||||||
title: Text(AppLocalizations.of(context)!.changelogTitle),
|
title: Text(L10n.of(context).changelogTitle),
|
||||||
content: SingleChildScrollView(
|
content: SingleChildScrollView(
|
||||||
child: Text(change),
|
child: Text(change),
|
||||||
),
|
),
|
||||||
|
|
|
@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/rendering.dart';
|
import 'package:flutter/rendering.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/file.dart';
|
import 'package:nc_photos/entity/file.dart';
|
||||||
import 'package:nc_photos/entity/file/data_source.dart';
|
import 'package:nc_photos/entity/file/data_source.dart';
|
||||||
|
@ -264,7 +264,7 @@ class _ViewerState extends State<Viewer> {
|
||||||
if (!_isDetailPaneActive && _canOpenDetailPane())
|
if (!_isDetailPaneActive && _canOpenDetailPane())
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.more_vert),
|
icon: const Icon(Icons.more_vert),
|
||||||
tooltip: AppLocalizations.of(context)!.detailsTooltip,
|
tooltip: L10n.of(context).detailsTooltip,
|
||||||
onPressed: _onDetailsPressed,
|
onPressed: _onDetailsPressed,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -311,7 +311,7 @@ class _ViewerState extends State<Viewer> {
|
||||||
Icons.share_outlined,
|
Icons.share_outlined,
|
||||||
color: Colors.white.withOpacity(.87),
|
color: Colors.white.withOpacity(.87),
|
||||||
),
|
),
|
||||||
tooltip: AppLocalizations.of(context)!.shareTooltip,
|
tooltip: L10n.of(context).shareTooltip,
|
||||||
onPressed: () => _onSharePressed(context),
|
onPressed: () => _onSharePressed(context),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -322,7 +322,7 @@ class _ViewerState extends State<Viewer> {
|
||||||
Icons.download_outlined,
|
Icons.download_outlined,
|
||||||
color: Colors.white.withOpacity(.87),
|
color: Colors.white.withOpacity(.87),
|
||||||
),
|
),
|
||||||
tooltip: AppLocalizations.of(context)!.downloadTooltip,
|
tooltip: L10n.of(context).downloadTooltip,
|
||||||
onPressed: () => _onDownloadPressed(context),
|
onPressed: () => _onDownloadPressed(context),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -333,7 +333,7 @@ class _ViewerState extends State<Viewer> {
|
||||||
Icons.delete_outlined,
|
Icons.delete_outlined,
|
||||||
color: Colors.white.withOpacity(.87),
|
color: Colors.white.withOpacity(.87),
|
||||||
),
|
),
|
||||||
tooltip: AppLocalizations.of(context)!.deleteTooltip,
|
tooltip: L10n.of(context).deleteTooltip,
|
||||||
onPressed: () => _onDeletePressed(context),
|
onPressed: () => _onDeletePressed(context),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -571,8 +571,7 @@ class _ViewerState extends State<Viewer> {
|
||||||
final file = widget.streamFiles[_pageController.page!.round()];
|
final file = widget.streamFiles[_pageController.page!.round()];
|
||||||
_log.info("[_onDownloadPressed] Downloading file: ${file.path}");
|
_log.info("[_onDownloadPressed] Downloading file: ${file.path}");
|
||||||
var controller = SnackBarManager().showSnackBar(SnackBar(
|
var controller = SnackBarManager().showSnackBar(SnackBar(
|
||||||
content:
|
content: Text(L10n.of(context).downloadProcessingNotification),
|
||||||
Text(AppLocalizations.of(context)!.downloadProcessingNotification),
|
|
||||||
duration: k.snackBarDurationShort,
|
duration: k.snackBarDurationShort,
|
||||||
));
|
));
|
||||||
controller?.closed.whenComplete(() {
|
controller?.closed.whenComplete(() {
|
||||||
|
@ -586,8 +585,7 @@ class _ViewerState extends State<Viewer> {
|
||||||
_log.warning("[_onDownloadPressed] Permission not granted");
|
_log.warning("[_onDownloadPressed] Permission not granted");
|
||||||
controller?.close();
|
controller?.close();
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(L10n.of(context).downloadFailureNoPermissionNotification),
|
||||||
.downloadFailureNoPermissionNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
return;
|
return;
|
||||||
|
@ -596,8 +594,7 @@ class _ViewerState extends State<Viewer> {
|
||||||
"[_onDownloadPressed] Failed while downloadFile", e, stacktrace);
|
"[_onDownloadPressed] Failed while downloadFile", e, stacktrace);
|
||||||
controller?.close();
|
controller?.close();
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text("${L10n.of(context).downloadFailureNotification}: "
|
||||||
"${AppLocalizations.of(context)!.downloadFailureNotification}: "
|
|
||||||
"${exception_util.toUserString(e, context)}"),
|
"${exception_util.toUserString(e, context)}"),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
|
@ -627,7 +624,7 @@ class _ViewerState extends State<Viewer> {
|
||||||
|
|
||||||
// fallback
|
// fallback
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!.downloadSuccessNotification),
|
content: Text(L10n.of(context).downloadSuccessNotification),
|
||||||
duration: k.snackBarDurationShort,
|
duration: k.snackBarDurationShort,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -636,7 +633,7 @@ class _ViewerState extends State<Viewer> {
|
||||||
final file = widget.streamFiles[_pageController.page!.round()];
|
final file = widget.streamFiles[_pageController.page!.round()];
|
||||||
_log.info("[_onDeletePressed] Removing file: ${file.path}");
|
_log.info("[_onDeletePressed] Removing file: ${file.path}");
|
||||||
var controller = SnackBarManager().showSnackBar(SnackBar(
|
var controller = SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!.deleteProcessingNotification),
|
content: Text(L10n.of(context).deleteProcessingNotification),
|
||||||
duration: k.snackBarDurationShort,
|
duration: k.snackBarDurationShort,
|
||||||
));
|
));
|
||||||
controller?.closed.whenComplete(() {
|
controller?.closed.whenComplete(() {
|
||||||
|
@ -647,7 +644,7 @@ class _ViewerState extends State<Viewer> {
|
||||||
AlbumRepo(AlbumCachedDataSource()))(widget.account, file);
|
AlbumRepo(AlbumCachedDataSource()))(widget.account, file);
|
||||||
controller?.close();
|
controller?.close();
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!.deleteSuccessNotification),
|
content: Text(L10n.of(context).deleteSuccessNotification),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
|
@ -659,9 +656,8 @@ class _ViewerState extends State<Viewer> {
|
||||||
stacktrace);
|
stacktrace);
|
||||||
controller?.close();
|
controller?.close();
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content:
|
content: Text("${L10n.of(context).deleteFailureNotification}: "
|
||||||
Text("${AppLocalizations.of(context)!.deleteFailureNotification}: "
|
"${exception_util.toUserString(e, context)}"),
|
||||||
"${exception_util.toUserString(e, context)}"),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,10 +3,10 @@ import 'package:exifdart/exifdart.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
|
import 'package:nc_photos/app_localizations.dart';
|
||||||
import 'package:nc_photos/double_extension.dart';
|
import 'package:nc_photos/double_extension.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/album/item.dart';
|
import 'package:nc_photos/entity/album/item.dart';
|
||||||
|
@ -77,8 +77,8 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
widget.file.metadata!.imageHeight!;
|
widget.file.metadata!.imageHeight!;
|
||||||
if (pixelCount >= 500000) {
|
if (pixelCount >= 500000) {
|
||||||
final mpCount = pixelCount / 1000000.0;
|
final mpCount = pixelCount / 1000000.0;
|
||||||
sizeSubStr += AppLocalizations.of(context)!
|
sizeSubStr +=
|
||||||
.megapixelCount(mpCount.toStringAsFixed(1));
|
L10n.of(context).megapixelCount(mpCount.toStringAsFixed(1));
|
||||||
sizeSubStr += space;
|
sizeSubStr += space;
|
||||||
}
|
}
|
||||||
sizeSubStr += _byteSizeToString(widget.file.contentLength ?? 0);
|
sizeSubStr += _byteSizeToString(widget.file.contentLength ?? 0);
|
||||||
|
@ -89,12 +89,11 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
cameraSubStr += "f/${_fNumber!.toStringAsFixed(1)}$space";
|
cameraSubStr += "f/${_fNumber!.toStringAsFixed(1)}$space";
|
||||||
}
|
}
|
||||||
if (_exposureTime != null) {
|
if (_exposureTime != null) {
|
||||||
cameraSubStr +=
|
cameraSubStr += L10n.of(context).secondCountSymbol(_exposureTime!);
|
||||||
AppLocalizations.of(context)!.secondCountSymbol(_exposureTime!);
|
|
||||||
cameraSubStr += space;
|
cameraSubStr += space;
|
||||||
}
|
}
|
||||||
if (_focalLength != null) {
|
if (_focalLength != null) {
|
||||||
cameraSubStr += AppLocalizations.of(context)!
|
cameraSubStr += L10n.of(context)
|
||||||
.millimeterCountSymbol(_focalLength!.toStringAsFixedTruncated(2));
|
.millimeterCountSymbol(_focalLength!.toStringAsFixedTruncated(2));
|
||||||
cameraSubStr += space;
|
cameraSubStr += space;
|
||||||
}
|
}
|
||||||
|
@ -112,12 +111,12 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
children: [
|
children: [
|
||||||
_DetailPaneButton(
|
_DetailPaneButton(
|
||||||
icon: Icons.playlist_add_outlined,
|
icon: Icons.playlist_add_outlined,
|
||||||
label: AppLocalizations.of(context)!.addToAlbumTooltip,
|
label: L10n.of(context).addToAlbumTooltip,
|
||||||
onPressed: () => _onAddToAlbumPressed(context),
|
onPressed: () => _onAddToAlbumPressed(context),
|
||||||
),
|
),
|
||||||
_DetailPaneButton(
|
_DetailPaneButton(
|
||||||
icon: Icons.delete_outline,
|
icon: Icons.delete_outline,
|
||||||
label: AppLocalizations.of(context)!.deleteTooltip,
|
label: L10n.of(context).deleteTooltip,
|
||||||
onPressed: () => _onDeletePressed(context),
|
onPressed: () => _onDeletePressed(context),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -238,15 +237,14 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
_log.info("[_onAddToAlbumPressed] Album picked: ${value.name}");
|
_log.info("[_onAddToAlbumPressed] Album picked: ${value.name}");
|
||||||
_addToAlbum(context, value).then((_) {
|
_addToAlbum(context, value).then((_) {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!
|
content: Text(
|
||||||
.addToAlbumSuccessNotification(value.name)),
|
L10n.of(context).addToAlbumSuccessNotification(value.name)),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
}).catchError((_) {});
|
}).catchError((_) {});
|
||||||
} else {
|
} else {
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content:
|
content: Text(L10n.of(context).addToAlbumFailureNotification),
|
||||||
Text(AppLocalizations.of(context)!.addToAlbumFailureNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -254,8 +252,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
_log.severe(
|
_log.severe(
|
||||||
"[_onAddToAlbumPressed] Failed while showDialog", e, stacktrace);
|
"[_onAddToAlbumPressed] Failed while showDialog", e, stacktrace);
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text("${L10n.of(context).addToAlbumFailureNotification}: "
|
||||||
"${AppLocalizations.of(context)!.addToAlbumFailureNotification}: "
|
|
||||||
"${exception_util.toUserString(e, context)}"),
|
"${exception_util.toUserString(e, context)}"),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
|
@ -265,7 +262,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
void _onDeletePressed(BuildContext context) async {
|
void _onDeletePressed(BuildContext context) async {
|
||||||
_log.info("[_onDeletePressed] Removing file: ${widget.file.path}");
|
_log.info("[_onDeletePressed] Removing file: ${widget.file.path}");
|
||||||
var controller = SnackBarManager().showSnackBar(SnackBar(
|
var controller = SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!.deleteProcessingNotification),
|
content: Text(L10n.of(context).deleteProcessingNotification),
|
||||||
duration: k.snackBarDurationShort,
|
duration: k.snackBarDurationShort,
|
||||||
));
|
));
|
||||||
controller?.closed.whenComplete(() {
|
controller?.closed.whenComplete(() {
|
||||||
|
@ -276,7 +273,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
AlbumRepo(AlbumCachedDataSource()))(widget.account, widget.file);
|
AlbumRepo(AlbumCachedDataSource()))(widget.account, widget.file);
|
||||||
controller?.close();
|
controller?.close();
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(AppLocalizations.of(context)!.deleteSuccessNotification),
|
content: Text(L10n.of(context).deleteSuccessNotification),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
|
@ -288,9 +285,8 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
stacktrace);
|
stacktrace);
|
||||||
controller?.close();
|
controller?.close();
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content:
|
content: Text("${L10n.of(context).deleteFailureNotification}: "
|
||||||
Text("${AppLocalizations.of(context)!.deleteFailureNotification}: "
|
"${exception_util.toUserString(e, context)}"),
|
||||||
"${exception_util.toUserString(e, context)}"),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -328,8 +324,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
e,
|
e,
|
||||||
stacktrace);
|
stacktrace);
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text(L10n.of(context).updateDateTimeFailureNotification),
|
||||||
AppLocalizations.of(context)!.updateDateTimeFailureNotification),
|
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -361,8 +356,8 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
// already added, do nothing
|
// already added, do nothing
|
||||||
_log.info("[_addToAlbum] File already in album: ${widget.file.path}");
|
_log.info("[_addToAlbum] File already in album: ${widget.file.path}");
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content:
|
||||||
"${AppLocalizations.of(context)!.addToAlbumAlreadyAddedNotification}"),
|
Text("${L10n.of(context).addToAlbumAlreadyAddedNotification}"),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
return Future.error(ArgumentError("File already in album"));
|
return Future.error(ArgumentError("File already in album"));
|
||||||
|
@ -380,8 +375,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
} catch (e, stacktrace) {
|
} catch (e, stacktrace) {
|
||||||
_log.shout("[_addToAlbum] Failed while updating album", e, stacktrace);
|
_log.shout("[_addToAlbum] Failed while updating album", e, stacktrace);
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
content: Text(
|
content: Text("${L10n.of(context).addToAlbumFailureNotification}: "
|
||||||
"${AppLocalizations.of(context)!.addToAlbumFailureNotification}: "
|
|
||||||
"${exception_util.toUserString(e, context)}"),
|
"${exception_util.toUserString(e, context)}"),
|
||||||
duration: k.snackBarDurationNormal,
|
duration: k.snackBarDurationNormal,
|
||||||
));
|
));
|
||||||
|
|
Loading…
Reference in a new issue