mirror of
https://github.com/austinried/subtracks.git
synced 2026-02-10 06:52:43 +01:00
Compare commits
13 Commits
v2.0.0-alp
...
v2.0.0-alp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8f64cfcbca | ||
|
|
1edb2c13da | ||
|
|
7f83204b24 | ||
|
|
0fe52494d0 | ||
|
|
56dbcde3b4 | ||
|
|
8fbc5e6ce4 | ||
|
|
979a4b7c73 | ||
|
|
7b1da24748 | ||
|
|
7014aa85d1 | ||
|
|
abab674322 | ||
|
|
498bb22a69 | ||
|
|
11fe43a750 | ||
|
|
2a60a7306c |
8
.github/ISSUE_TEMPLATE/bug_report.md
vendored
8
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -23,10 +23,14 @@ A clear and concise description of what you expected to happen.
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Smartphone (please complete the following information):**
|
||||
- Device: [e.g. Pixel 4]
|
||||
**Device**
|
||||
- Model: [e.g. Pixel 4]
|
||||
- OS: [e.g. Android 12]
|
||||
- Subtracks version [e.g. 1.2.0]
|
||||
|
||||
**Server**
|
||||
- Software: [e.g. Navidrome]
|
||||
- Version: [e.g. 0.49.3]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
|
||||
@@ -146,13 +146,8 @@
|
||||
],
|
||||
|
||||
"de": [
|
||||
"actionsCancel",
|
||||
"actionsDelete",
|
||||
"actionsDownload",
|
||||
"actionsDownloadCancel",
|
||||
"actionsDownloadDelete",
|
||||
"actionsOk",
|
||||
"controlsShuffle",
|
||||
"resourcesAlbumCount",
|
||||
"resourcesArtistCount",
|
||||
"resourcesFilterAlbum",
|
||||
@@ -177,13 +172,6 @@
|
||||
],
|
||||
|
||||
"es": [
|
||||
"actionsCancel",
|
||||
"actionsDelete",
|
||||
"actionsDownload",
|
||||
"actionsDownloadCancel",
|
||||
"actionsDownloadDelete",
|
||||
"actionsOk",
|
||||
"controlsShuffle",
|
||||
"resourcesAlbumCount",
|
||||
"resourcesArtistCount",
|
||||
"resourcesFilterAlbum",
|
||||
@@ -238,37 +226,6 @@
|
||||
"settingsServersFieldsName"
|
||||
],
|
||||
|
||||
"gl": [
|
||||
"actionsCancel",
|
||||
"actionsDelete",
|
||||
"actionsDownload",
|
||||
"actionsDownloadCancel",
|
||||
"actionsDownloadDelete",
|
||||
"actionsOk",
|
||||
"controlsShuffle",
|
||||
"resourcesAlbumCount",
|
||||
"resourcesArtistCount",
|
||||
"resourcesFilterAlbum",
|
||||
"resourcesFilterArtist",
|
||||
"resourcesFilterOwner",
|
||||
"resourcesFilterYear",
|
||||
"resourcesPlaylistCount",
|
||||
"resourcesSongCount",
|
||||
"resourcesSongListDeleteAllContent",
|
||||
"resourcesSongListDeleteAllTitle",
|
||||
"resourcesSortByAlbum",
|
||||
"resourcesSortByAlbumCount",
|
||||
"resourcesSortByTitle",
|
||||
"resourcesSortByUpdated",
|
||||
"settingsAboutActionsSupport",
|
||||
"settingsNetworkOptionsOfflineMode",
|
||||
"settingsNetworkOptionsOfflineModeOff",
|
||||
"settingsNetworkOptionsOfflineModeOn",
|
||||
"settingsNetworkOptionsStreamFormat",
|
||||
"settingsNetworkOptionsStreamFormatServerDefault",
|
||||
"settingsServersFieldsName"
|
||||
],
|
||||
|
||||
"it": [
|
||||
"actionsCancel",
|
||||
"actionsDelete",
|
||||
@@ -594,28 +551,11 @@
|
||||
],
|
||||
|
||||
"zh": [
|
||||
"actionsCancel",
|
||||
"actionsDelete",
|
||||
"actionsDownload",
|
||||
"actionsDownloadCancel",
|
||||
"actionsDownloadDelete",
|
||||
"actionsOk",
|
||||
"controlsShuffle",
|
||||
"resourcesAlbumCount",
|
||||
"resourcesArtistCount",
|
||||
"resourcesFilterAlbum",
|
||||
"resourcesFilterArtist",
|
||||
"resourcesFilterOwner",
|
||||
"resourcesFilterYear",
|
||||
"resourcesPlaylistCount",
|
||||
"resourcesSongCount",
|
||||
"resourcesSongListDeleteAllContent",
|
||||
"resourcesSongListDeleteAllTitle",
|
||||
"resourcesSortByAlbum",
|
||||
"resourcesSortByAlbumCount",
|
||||
"resourcesSortByTitle",
|
||||
"resourcesSortByUpdated",
|
||||
"settingsAboutActionsSupport",
|
||||
"settingsNetworkOptionsOfflineMode",
|
||||
"settingsNetworkOptionsOfflineModeOff",
|
||||
"settingsNetworkOptionsOfflineModeOn",
|
||||
|
||||
62
TODO.md
62
TODO.md
@@ -1,34 +1,30 @@
|
||||
## To-do
|
||||
- [ ] Star/unstar
|
||||
- [ ] Context menus
|
||||
- [ ] Download actions for song
|
||||
- [ ] Playlist management
|
||||
- [ ] Add to playlist (from context)
|
||||
- [ ] Queue management
|
||||
- [ ] View playing queue
|
||||
- [ ] Re-order queue
|
||||
- [ ] Add to queue (from context)
|
||||
- [ ] Remove from queue
|
||||
- [ ] Scrobbling
|
||||
- [ ] Library filters (year/genre/etc)
|
||||
- [ ] Library list display modes
|
||||
- [ ] Search
|
||||
- [ ] Individual "more" results pages
|
||||
- [ ] Radio modes
|
||||
- [ ] Artist
|
||||
- [ ] Now playing gestures
|
||||
- [ ] Swipe bar/album to skip
|
||||
- [ ] Double-tap to seek forward/back (bar only)
|
||||
- [ ] Settings
|
||||
- [ ] Sources
|
||||
- [ ] Use plaintext password
|
||||
- [ ] Music
|
||||
- [ ] Scrobble
|
||||
- [ ] Downloads
|
||||
- [ ] Used/available space
|
||||
- [ ] Clear downloads
|
||||
- [ ] Clear images
|
||||
- [ ] About
|
||||
- [ ] Licenses
|
||||
- [ ] Welcome/setup flow
|
||||
- [ ] Proper loading screen/animation
|
||||
- Star/unstar
|
||||
- Context menus
|
||||
- Download actions for song
|
||||
- Playlist management
|
||||
- Add to playlist (from context)
|
||||
- Queue management
|
||||
- View playing queue
|
||||
- Re-order queue
|
||||
- Add to queue (from context)
|
||||
- Remove from queue
|
||||
- Scrobbling
|
||||
- Library filters (year/genre/etc)
|
||||
- Library list display modes
|
||||
- Search
|
||||
- Individual "more" results pages
|
||||
- Now playing gestures
|
||||
- Swipe bar/album to skip
|
||||
- Double-tap to seek forward/back (bar only)
|
||||
- Settings
|
||||
- Music
|
||||
- Scrobble
|
||||
- Downloads
|
||||
- Used/available space
|
||||
- Clear downloads
|
||||
- Clear images
|
||||
- About
|
||||
- Licenses
|
||||
- Welcome/setup flow
|
||||
- Proper loading screen/animation
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:fast_immutable_collections/fast_immutable_collections.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
@@ -77,7 +78,8 @@ class App extends HookConsumerWidget {
|
||||
),
|
||||
routeInformationParser: appRouter.defaultRouteParser(),
|
||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
supportedLocales: AppLocalizations.supportedLocales,
|
||||
supportedLocales: [...AppLocalizations.supportedLocales]
|
||||
..moveToTheFront(const Locale('en')),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,19 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:auto_route/auto_route.dart';
|
||||
import 'package:fast_immutable_collections/fast_immutable_collections.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
|
||||
import '../../database/database.dart';
|
||||
import '../../models/query.dart';
|
||||
import '../../models/support.dart';
|
||||
import '../../services/audio_service.dart';
|
||||
import '../../state/music.dart';
|
||||
import '../../state/settings.dart';
|
||||
import '../app_router.dart';
|
||||
import '../buttons.dart';
|
||||
import '../images.dart';
|
||||
import '../items.dart';
|
||||
|
||||
@@ -27,6 +33,26 @@ class ArtistPage extends HookConsumerWidget {
|
||||
final albums = ref.watch(albumsByArtistIdProvider(id));
|
||||
|
||||
return Scaffold(
|
||||
floatingActionButton: RadioPlayFab(
|
||||
onPressed: () => artist.hasValue
|
||||
? ref.read(audioControlProvider).playRadio(
|
||||
context: QueueContextType.artist,
|
||||
contextId: artist.valueOrNull!.id,
|
||||
query: ListQuery(
|
||||
filters: IList([
|
||||
FilterWith.equals(
|
||||
column: 'artist_id',
|
||||
value: artist.valueOrNull!.id,
|
||||
)
|
||||
]),
|
||||
),
|
||||
getSongs: (query) => ref
|
||||
.read(databaseProvider)
|
||||
.songsList(ref.read(sourceIdProvider), query)
|
||||
.get(),
|
||||
)
|
||||
: null,
|
||||
),
|
||||
body: CustomScrollView(
|
||||
slivers: [
|
||||
SliverToBoxAdapter(
|
||||
|
||||
@@ -41,6 +41,7 @@ class SourcePage extends HookConsumerWidget {
|
||||
label: l.settingsServersFieldsAddress,
|
||||
initialValue: source?.address.toString(),
|
||||
keyboardType: TextInputType.url,
|
||||
autofillHints: const [AutofillHints.url],
|
||||
required: true,
|
||||
validator: (value, label) {
|
||||
if (Uri.tryParse(value!) == null) {
|
||||
@@ -52,15 +53,27 @@ class SourcePage extends HookConsumerWidget {
|
||||
final username = LabeledTextField(
|
||||
label: l.settingsServersFieldsUsername,
|
||||
initialValue: source?.username,
|
||||
autofillHints: const [AutofillHints.username],
|
||||
required: true,
|
||||
);
|
||||
final password = LabeledTextField(
|
||||
label: l.settingsServersFieldsPassword,
|
||||
initialValue: source?.password,
|
||||
obscureText: true,
|
||||
autofillHints: const [AutofillHints.password],
|
||||
required: true,
|
||||
);
|
||||
|
||||
final forcePlaintextPassword = useState(!(source?.useTokenAuth ?? false));
|
||||
final forcePlaintextSwitch = SwitchListTile(
|
||||
value: forcePlaintextPassword.value,
|
||||
title: Text(l.settingsServersOptionsForcePlaintextPasswordTitle),
|
||||
subtitle: forcePlaintextPassword.value
|
||||
? Text(l.settingsServersOptionsForcePlaintextPasswordDescriptionOn)
|
||||
: Text(l.settingsServersOptionsForcePlaintextPasswordDescriptionOff),
|
||||
onChanged: (value) => forcePlaintextPassword.value = value,
|
||||
);
|
||||
|
||||
return WillPopScope(
|
||||
onWillPop: () async => !isSaving.value && !isDeleting.value,
|
||||
child: Scaffold(
|
||||
@@ -128,6 +141,7 @@ class SourcePage extends HookConsumerWidget {
|
||||
address: Uri.parse(address.value),
|
||||
username: username.value,
|
||||
password: password.value,
|
||||
useTokenAuth: !forcePlaintextPassword.value,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
@@ -142,7 +156,8 @@ class SourcePage extends HookConsumerWidget {
|
||||
features: IList(),
|
||||
username: username.value,
|
||||
password: password.value,
|
||||
useTokenAuth: const Value(true),
|
||||
useTokenAuth:
|
||||
Value(!forcePlaintextPassword.value),
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -163,21 +178,25 @@ class SourcePage extends HookConsumerWidget {
|
||||
),
|
||||
body: Form(
|
||||
key: form,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24),
|
||||
child: AutofillGroup(
|
||||
child: ListView(
|
||||
children: [
|
||||
const SizedBox(height: 96 - kToolbarHeight),
|
||||
Text(
|
||||
source == null
|
||||
? l.settingsServersActionsAdd
|
||||
: l.settingsServersActionsEdit,
|
||||
style: theme.textTheme.displaySmall,
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: Text(
|
||||
source == null
|
||||
? l.settingsServersActionsAdd
|
||||
: l.settingsServersActionsEdit,
|
||||
style: theme.textTheme.displaySmall,
|
||||
),
|
||||
),
|
||||
name,
|
||||
address,
|
||||
username,
|
||||
password,
|
||||
const SizedBox(height: 24),
|
||||
forcePlaintextSwitch,
|
||||
const FabPadding(),
|
||||
],
|
||||
),
|
||||
@@ -194,6 +213,7 @@ class LabeledTextField extends HookConsumerWidget {
|
||||
final bool obscureText;
|
||||
final bool required;
|
||||
final TextInputType? keyboardType;
|
||||
final Iterable<String>? autofillHints;
|
||||
final String? Function(String? value, String label)? validator;
|
||||
|
||||
// ignore: prefer_const_constructors_in_immutables
|
||||
@@ -204,6 +224,7 @@ class LabeledTextField extends HookConsumerWidget {
|
||||
this.obscureText = false,
|
||||
this.keyboardType,
|
||||
this.validator,
|
||||
this.autofillHints,
|
||||
this.required = false,
|
||||
});
|
||||
|
||||
@@ -224,35 +245,36 @@ class LabeledTextField extends HookConsumerWidget {
|
||||
final theme = Theme.of(context);
|
||||
_controller = useTextEditingController(text: initialValue);
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
const SizedBox(height: 24),
|
||||
Text(
|
||||
label,
|
||||
style: theme.textTheme.titleMedium,
|
||||
),
|
||||
TextFormField(
|
||||
controller: _controller,
|
||||
obscureText: obscureText,
|
||||
keyboardType: keyboardType,
|
||||
validator: (value) {
|
||||
String? error;
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
const SizedBox(height: 24),
|
||||
Text(label, style: theme.textTheme.titleMedium),
|
||||
TextFormField(
|
||||
controller: _controller,
|
||||
obscureText: obscureText,
|
||||
keyboardType: keyboardType,
|
||||
autofillHints: autofillHints,
|
||||
validator: (value) {
|
||||
String? error;
|
||||
|
||||
if (required) {
|
||||
error = _requiredValidator(value);
|
||||
if (error != null) {
|
||||
return error;
|
||||
if (required) {
|
||||
error = _requiredValidator(value);
|
||||
if (error != null) {
|
||||
return error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (validator != null) {
|
||||
return validator!(value, label);
|
||||
}
|
||||
return null;
|
||||
},
|
||||
),
|
||||
],
|
||||
if (validator != null) {
|
||||
return validator!(value, label);
|
||||
}
|
||||
return null;
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,10 @@ import 'converters.dart';
|
||||
|
||||
part 'database.g.dart';
|
||||
|
||||
// don't exceed SQLITE_MAX_VARIABLE_NUMBER (32766 for version >= 3.32.0)
|
||||
// https://www.sqlite.org/limits.html
|
||||
const kSqliteMaxVariableNumber = 32766;
|
||||
|
||||
@DriftDatabase(include: {'tables.drift'})
|
||||
class SubtracksDatabase extends _$SubtracksDatabase {
|
||||
SubtracksDatabase() : super(_openConnection());
|
||||
@@ -169,12 +173,27 @@ class SubtracksDatabase extends _$SubtracksDatabase {
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> deleteArtistsNotIn(int sourceId, Iterable<String> ids) async {
|
||||
await (delete(artists)
|
||||
..where(
|
||||
(tbl) => tbl.sourceId.equals(sourceId) & tbl.id.isNotIn(ids),
|
||||
))
|
||||
.go();
|
||||
Future<void> deleteArtistsNotIn(int sourceId, Set<String> ids) {
|
||||
return transaction(() async {
|
||||
final allIds = (await (selectOnly(artists)
|
||||
..addColumns([artists.id])
|
||||
..where(artists.sourceId.equals(sourceId)))
|
||||
.map((row) => row.read(artists.id))
|
||||
.get())
|
||||
.whereNotNull()
|
||||
.toSet();
|
||||
final downloadIds = (await artistIdsWithDownloadStatus(sourceId).get())
|
||||
.whereNotNull()
|
||||
.toSet();
|
||||
|
||||
final diff = allIds.difference(downloadIds).difference(ids);
|
||||
for (var slice in diff.slices(kSqliteMaxVariableNumber)) {
|
||||
await (delete(artists)
|
||||
..where(
|
||||
(tbl) => tbl.sourceId.equals(sourceId) & tbl.id.isIn(slice)))
|
||||
.go();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> saveAlbums(Iterable<AlbumsCompanion> albums) async {
|
||||
@@ -183,15 +202,27 @@ class SubtracksDatabase extends _$SubtracksDatabase {
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> deleteAlbumsNotIn(int sourceId, Iterable<String> ids) async {
|
||||
final alsoKeep = (await albumIdsWithDownloaded(sourceId).get()).toSet();
|
||||
Future<void> deleteAlbumsNotIn(int sourceId, Set<String> ids) {
|
||||
return transaction(() async {
|
||||
final allIds = (await (selectOnly(albums)
|
||||
..addColumns([albums.id])
|
||||
..where(albums.sourceId.equals(sourceId)))
|
||||
.map((row) => row.read(albums.id))
|
||||
.get())
|
||||
.whereNotNull()
|
||||
.toSet();
|
||||
final downloadIds = (await albumIdsWithDownloadStatus(sourceId).get())
|
||||
.whereNotNull()
|
||||
.toSet();
|
||||
|
||||
ids = ids.toList()..addAll(alsoKeep);
|
||||
await (delete(albums)
|
||||
..where(
|
||||
(tbl) => tbl.sourceId.equals(sourceId) & tbl.id.isNotIn(ids),
|
||||
))
|
||||
.go();
|
||||
final diff = allIds.difference(downloadIds).difference(ids);
|
||||
for (var slice in diff.slices(kSqliteMaxVariableNumber)) {
|
||||
await (delete(albums)
|
||||
..where(
|
||||
(tbl) => tbl.sourceId.equals(sourceId) & tbl.id.isIn(slice)))
|
||||
.go();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> savePlaylists(
|
||||
@@ -215,18 +246,31 @@ class SubtracksDatabase extends _$SubtracksDatabase {
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> deletePlaylistsNotIn(int sourceId, Iterable<String> ids) async {
|
||||
await (delete(playlists)
|
||||
..where(
|
||||
(tbl) => tbl.sourceId.equals(sourceId) & tbl.id.isNotIn(ids),
|
||||
))
|
||||
.go();
|
||||
await (delete(playlistSongs)
|
||||
..where(
|
||||
(tbl) =>
|
||||
tbl.sourceId.equals(sourceId) & tbl.playlistId.isNotIn(ids),
|
||||
))
|
||||
.go();
|
||||
Future<void> deletePlaylistsNotIn(int sourceId, Set<String> ids) {
|
||||
return transaction(() async {
|
||||
final allIds = (await (selectOnly(playlists)
|
||||
..addColumns([playlists.id])
|
||||
..where(playlists.sourceId.equals(sourceId)))
|
||||
.map((row) => row.read(playlists.id))
|
||||
.get())
|
||||
.whereNotNull()
|
||||
.toSet();
|
||||
final downloadIds = (await playlistIdsWithDownloadStatus(sourceId).get())
|
||||
.whereNotNull()
|
||||
.toSet();
|
||||
|
||||
final diff = allIds.difference(downloadIds).difference(ids);
|
||||
for (var slice in diff.slices(kSqliteMaxVariableNumber)) {
|
||||
await (delete(playlists)
|
||||
..where(
|
||||
(tbl) => tbl.sourceId.equals(sourceId) & tbl.id.isIn(slice)))
|
||||
.go();
|
||||
await (delete(playlistSongs)
|
||||
..where((tbl) =>
|
||||
tbl.sourceId.equals(sourceId) & tbl.playlistId.isIn(slice)))
|
||||
.go();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> savePlaylistSongs(
|
||||
@@ -250,29 +294,33 @@ class SubtracksDatabase extends _$SubtracksDatabase {
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> deleteSongsNotIn(int sourceId, Iterable<String> ids) async {
|
||||
await (delete(songs)
|
||||
..where(
|
||||
(tbl) =>
|
||||
tbl.sourceId.equals(sourceId) &
|
||||
tbl.id.isNotIn(ids) &
|
||||
tbl.downloadFilePath.isNull() &
|
||||
tbl.downloadTaskId.isNull(),
|
||||
))
|
||||
.go();
|
||||
final remainingIds = (await (selectOnly(songs)
|
||||
..addColumns([songs.id])
|
||||
..where(songs.sourceId.equals(sourceId)))
|
||||
.map((row) => row.read(songs.id))
|
||||
.get())
|
||||
.whereNotNull();
|
||||
await (delete(playlistSongs)
|
||||
..where(
|
||||
(tbl) =>
|
||||
tbl.sourceId.equals(sourceId) &
|
||||
tbl.songId.isNotIn(remainingIds),
|
||||
))
|
||||
.go();
|
||||
Future<void> deleteSongsNotIn(int sourceId, Set<String> ids) {
|
||||
return transaction(() async {
|
||||
final allIds = (await (selectOnly(songs)
|
||||
..addColumns([songs.id])
|
||||
..where(
|
||||
songs.sourceId.equals(sourceId) &
|
||||
songs.downloadFilePath.isNull() &
|
||||
songs.downloadTaskId.isNull(),
|
||||
))
|
||||
.map((row) => row.read(songs.id))
|
||||
.get())
|
||||
.whereNotNull()
|
||||
.toSet();
|
||||
|
||||
final diff = allIds.difference(ids);
|
||||
for (var slice in diff.slices(kSqliteMaxVariableNumber)) {
|
||||
await (delete(songs)
|
||||
..where(
|
||||
(tbl) => tbl.sourceId.equals(sourceId) & tbl.id.isIn(slice)))
|
||||
.go();
|
||||
await (delete(playlistSongs)
|
||||
..where(
|
||||
(tbl) => tbl.sourceId.equals(sourceId) & tbl.songId.isIn(slice),
|
||||
))
|
||||
.go();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Selectable<LastBottomNavStateData> getLastBottomNavState() {
|
||||
|
||||
@@ -4596,7 +4596,7 @@ abstract class _$SubtracksDatabase extends GeneratedDatabase {
|
||||
));
|
||||
}
|
||||
|
||||
Selectable<String> albumIdsWithDownloaded(int sourceId) {
|
||||
Selectable<String> albumIdsWithDownloadStatus(int sourceId) {
|
||||
return customSelect(
|
||||
'SELECT albums.id FROM albums JOIN songs ON songs.source_id = albums.source_id AND songs.album_id = albums.id WHERE albums.source_id = ?1 AND(songs.download_file_path IS NOT NULL OR songs.download_task_id IS NOT NULL)GROUP BY albums.id',
|
||||
variables: [
|
||||
@@ -4608,6 +4608,32 @@ abstract class _$SubtracksDatabase extends GeneratedDatabase {
|
||||
}).map((QueryRow row) => row.read<String>('id'));
|
||||
}
|
||||
|
||||
Selectable<String> artistIdsWithDownloadStatus(int sourceId) {
|
||||
return customSelect(
|
||||
'SELECT artists.id FROM artists LEFT JOIN albums ON artists.source_id = albums.source_id AND artists.id = albums.artist_id LEFT JOIN songs ON albums.source_id = songs.source_id AND albums.id = songs.album_id WHERE artists.source_id = ?1 AND(songs.download_file_path IS NOT NULL OR songs.download_task_id IS NOT NULL)GROUP BY artists.id',
|
||||
variables: [
|
||||
Variable<int>(sourceId)
|
||||
],
|
||||
readsFrom: {
|
||||
artists,
|
||||
albums,
|
||||
songs,
|
||||
}).map((QueryRow row) => row.read<String>('id'));
|
||||
}
|
||||
|
||||
Selectable<String> playlistIdsWithDownloadStatus(int sourceId) {
|
||||
return customSelect(
|
||||
'SELECT playlists.id FROM playlists LEFT JOIN playlist_songs ON playlist_songs.source_id = playlists.source_id AND playlist_songs.playlist_id = playlists.id LEFT JOIN songs ON playlist_songs.source_id = songs.source_id AND playlist_songs.song_id = songs.id WHERE playlists.source_id = ?1 AND(songs.download_file_path IS NOT NULL OR songs.download_task_id IS NOT NULL)GROUP BY playlists.id',
|
||||
variables: [
|
||||
Variable<int>(sourceId)
|
||||
],
|
||||
readsFrom: {
|
||||
playlists,
|
||||
playlistSongs,
|
||||
songs,
|
||||
}).map((QueryRow row) => row.read<String>('id'));
|
||||
}
|
||||
|
||||
Selectable<int> searchArtists(String query, int limit, int offset) {
|
||||
return customSelect(
|
||||
'SELECT "rowid" FROM artists_fts WHERE artists_fts MATCH ?1 ORDER BY rank LIMIT ?2 OFFSET ?3',
|
||||
|
||||
@@ -244,7 +244,7 @@ allSubsonicSources WITH SubsonicSettings:
|
||||
FROM sources
|
||||
JOIN subsonic_sources ON subsonic_sources.source_id = sources.id;
|
||||
|
||||
albumIdsWithDownloaded:
|
||||
albumIdsWithDownloadStatus:
|
||||
SELECT albums.id
|
||||
FROM albums
|
||||
JOIN songs on songs.source_id = albums.source_id AND songs.album_id = albums.id
|
||||
@@ -253,6 +253,26 @@ albumIdsWithDownloaded:
|
||||
AND (songs.download_file_path IS NOT NULL OR songs.download_task_id IS NOT NULL)
|
||||
GROUP BY albums.id;
|
||||
|
||||
artistIdsWithDownloadStatus:
|
||||
SELECT artists.id
|
||||
FROM artists
|
||||
LEFT JOIN albums ON artists.source_id = albums.source_id AND artists.id = albums.artist_id
|
||||
LEFT JOIN songs ON albums.source_id = songs.source_id AND albums.id = songs.album_id
|
||||
WHERE
|
||||
artists.source_id = :source_id
|
||||
AND (songs.download_file_path IS NOT NULL OR songs.download_task_id IS NOT NULL)
|
||||
GROUP BY artists.id;
|
||||
|
||||
playlistIdsWithDownloadStatus:
|
||||
SELECT playlists.id
|
||||
FROM playlists
|
||||
LEFT JOIN playlist_songs ON playlist_songs.source_id = playlists.source_id AND playlist_songs.playlist_id = playlists.id
|
||||
LEFT JOIN songs ON playlist_songs.source_id = songs.source_id AND playlist_songs.song_id = songs.id
|
||||
WHERE
|
||||
playlists.source_id = :source_id
|
||||
AND (songs.download_file_path IS NOT NULL OR songs.download_task_id IS NOT NULL)
|
||||
GROUP BY playlists.id;
|
||||
|
||||
searchArtists:
|
||||
SELECT rowid
|
||||
FROM artists_fts
|
||||
|
||||
@@ -1,196 +1,206 @@
|
||||
{
|
||||
"actionsStar": "Markieren",
|
||||
"@actionsStar": {},
|
||||
"actionsUnstar": "Markierung entfernen",
|
||||
"@actionsUnstar": {},
|
||||
"messagesNothingHere": "Hier ist nichts…",
|
||||
"@messagesNothingHere": {},
|
||||
"navigationTabsHome": "Startseite",
|
||||
"@navigationTabsHome": {},
|
||||
"navigationTabsLibrary": "Bibliothek",
|
||||
"@navigationTabsLibrary": {},
|
||||
"navigationTabsSearch": "Suche",
|
||||
"@navigationTabsSearch": {},
|
||||
"navigationTabsSettings": "Einstellungen",
|
||||
"@navigationTabsSettings": {},
|
||||
"resourcesAlbumActionsPlay": "Album abspielen",
|
||||
"@resourcesAlbumActionsPlay": {},
|
||||
"resourcesAlbumActionsView": "Album anzeigen",
|
||||
"@resourcesAlbumActionsView": {},
|
||||
"resourcesAlbumListsSort": "Alben sortieren",
|
||||
"@resourcesAlbumListsSort": {},
|
||||
"resourcesAlbumName": "{count,plural, =1{Album} other{Alben}}",
|
||||
"@resourcesAlbumName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesArtistActionsView": "Interpret anzeigen",
|
||||
"@resourcesArtistActionsView": {},
|
||||
"resourcesArtistListsSort": "Interpreten sortieren",
|
||||
"@resourcesArtistListsSort": {},
|
||||
"resourcesArtistName": "{count,plural, =1{Interpret} other{Interpreten}}",
|
||||
"@resourcesArtistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesFilterGenre": "Nach Genre",
|
||||
"@resourcesFilterGenre": {},
|
||||
"resourcesFilterStarred": "Favoriten",
|
||||
"@resourcesFilterStarred": {},
|
||||
"resourcesPlaylistActionsPlay": "Wiedergabeliste abspielen",
|
||||
"@resourcesPlaylistActionsPlay": {},
|
||||
"resourcesPlaylistName": "{count,plural, =1{Wiedergabeliste} other{Wiedergabelisten}}",
|
||||
"@resourcesPlaylistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesQueueName": "{count,plural, =1{Warteschlange} other{Warteschlangen}}",
|
||||
"@resourcesQueueName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSongListsArtistTopSongs": "Top Lieder",
|
||||
"@resourcesSongListsArtistTopSongs": {},
|
||||
"resourcesSongName": "{count,plural, =1{Lied} other{Lieder}}",
|
||||
"@resourcesSongName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSortByAdded": "Kürzlich hinzugefügt",
|
||||
"@resourcesSortByAdded": {},
|
||||
"resourcesSortByArtist": "Nach Interpreten",
|
||||
"@resourcesSortByArtist": {},
|
||||
"resourcesSortByFrequentlyPlayed": "Häufig abgespielt",
|
||||
"@resourcesSortByFrequentlyPlayed": {},
|
||||
"resourcesSortByName": "Nach Name",
|
||||
"@resourcesSortByName": {},
|
||||
"resourcesSortByRandom": "Zufällig",
|
||||
"@resourcesSortByRandom": {},
|
||||
"resourcesSortByRecentlyPlayed": "Kürzlich abgespielt",
|
||||
"@resourcesSortByRecentlyPlayed": {},
|
||||
"resourcesSortByYear": "Nach Jahr",
|
||||
"@resourcesSortByYear": {},
|
||||
"searchHeaderTitle": "Suche: {query}",
|
||||
"@searchHeaderTitle": {
|
||||
"placeholders": {
|
||||
"query": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"searchInputPlaceholder": "Suche",
|
||||
"@searchInputPlaceholder": {},
|
||||
"searchMoreResults": "Mehr…",
|
||||
"@searchMoreResults": {},
|
||||
"searchNowPlayingContext": "Suchergebnis",
|
||||
"@searchNowPlayingContext": {},
|
||||
"settingsAboutActionsLicenses": "Lizenzen",
|
||||
"@settingsAboutActionsLicenses": {},
|
||||
"settingsAboutActionsProjectHomepage": "Projektseite",
|
||||
"@settingsAboutActionsProjectHomepage": {},
|
||||
"settingsAboutName": "Über",
|
||||
"@settingsAboutName": {},
|
||||
"settingsAboutVersion": "Version {version}",
|
||||
"@settingsAboutVersion": {
|
||||
"placeholders": {
|
||||
"version": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsMusicName": "Musik",
|
||||
"@settingsMusicName": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOff": "Kein Scrobble für Wiedergabeverlauf",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOff": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOn": "Scrobble Wiedergabeverlauf",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOn": {},
|
||||
"settingsMusicOptionsScrobbleTitle": "Scrobble Wiedergabe",
|
||||
"@settingsMusicOptionsScrobbleTitle": {},
|
||||
"settingsNetworkName": "Netzwerk",
|
||||
"@settingsNetworkName": {},
|
||||
"settingsNetworkOptionsMaxBitrateMobileTitle": "Maximale Bitrate (Mobil)",
|
||||
"@settingsNetworkOptionsMaxBitrateMobileTitle": {},
|
||||
"settingsNetworkOptionsMaxBitrateWifiTitle": "Maximale Bitrate (WLAN)",
|
||||
"@settingsNetworkOptionsMaxBitrateWifiTitle": {},
|
||||
"settingsNetworkOptionsMaxBufferTitle": "Maximale Pufferzeit",
|
||||
"@settingsNetworkOptionsMaxBufferTitle": {},
|
||||
"settingsNetworkOptionsMinBufferTitle": "Minimale Pufferzeit",
|
||||
"@settingsNetworkOptionsMinBufferTitle": {},
|
||||
"settingsNetworkValuesKbps": "{value}kbps",
|
||||
"@settingsNetworkValuesKbps": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesSeconds": "{value} Sekunden",
|
||||
"@settingsNetworkValuesSeconds": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesUnlimitedKbps": "Unbegrenzt",
|
||||
"@settingsNetworkValuesUnlimitedKbps": {},
|
||||
"settingsResetActionsClearImageCache": "Bildzwischenspeicher löschen",
|
||||
"@settingsResetActionsClearImageCache": {},
|
||||
"settingsResetName": "Zurücksetzen",
|
||||
"@settingsResetName": {},
|
||||
"settingsServersActionsAdd": "Server hinzufügen",
|
||||
"@settingsServersActionsAdd": {},
|
||||
"settingsServersActionsDelete": "Löschen",
|
||||
"@settingsServersActionsDelete": {},
|
||||
"settingsServersActionsEdit": "Server bearbeiten",
|
||||
"@settingsServersActionsEdit": {},
|
||||
"settingsServersActionsSave": "Speichern",
|
||||
"@settingsServersActionsSave": {},
|
||||
"settingsServersActionsTestConnection": "Verbindung testen",
|
||||
"@settingsServersActionsTestConnection": {},
|
||||
"settingsServersFieldsAddress": "Adresse",
|
||||
"@settingsServersFieldsAddress": {},
|
||||
"settingsServersFieldsPassword": "Passwort",
|
||||
"@settingsServersFieldsPassword": {},
|
||||
"settingsServersFieldsUsername": "Nutzername",
|
||||
"@settingsServersFieldsUsername": {},
|
||||
"settingsServersMessagesConnectionFailed": "Verbindung zu {address} fehlgeschlagen, überprüfe Einstellungen oder Server",
|
||||
"@settingsServersMessagesConnectionFailed": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersMessagesConnectionOk": "Verbindung zu {address} ist OK!",
|
||||
"@settingsServersMessagesConnectionOk": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersName": "Server",
|
||||
"@settingsServersName": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOff": "Sende Passwort als Token + Salt",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOff": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOn": "Passwort als Klartext senden (Veraltet, stellen Sie sicher, dass Ihre Verbindung sicher ist!)",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOn": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordTitle": "Erzwinge Klartextpasswort",
|
||||
"@settingsServersOptionsForcePlaintextPasswordTitle": {}
|
||||
}
|
||||
"actionsStar": "Markieren",
|
||||
"@actionsStar": {},
|
||||
"actionsUnstar": "Markierung entfernen",
|
||||
"@actionsUnstar": {},
|
||||
"messagesNothingHere": "Hier ist nichts…",
|
||||
"@messagesNothingHere": {},
|
||||
"navigationTabsHome": "Startseite",
|
||||
"@navigationTabsHome": {},
|
||||
"navigationTabsLibrary": "Bibliothek",
|
||||
"@navigationTabsLibrary": {},
|
||||
"navigationTabsSearch": "Suche",
|
||||
"@navigationTabsSearch": {},
|
||||
"navigationTabsSettings": "Einstellungen",
|
||||
"@navigationTabsSettings": {},
|
||||
"resourcesAlbumActionsPlay": "Album abspielen",
|
||||
"@resourcesAlbumActionsPlay": {},
|
||||
"resourcesAlbumActionsView": "Album anzeigen",
|
||||
"@resourcesAlbumActionsView": {},
|
||||
"resourcesAlbumListsSort": "Alben sortieren",
|
||||
"@resourcesAlbumListsSort": {},
|
||||
"resourcesAlbumName": "{count,plural, =1{Album} other{Alben}}",
|
||||
"@resourcesAlbumName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesArtistActionsView": "Interpret anzeigen",
|
||||
"@resourcesArtistActionsView": {},
|
||||
"resourcesArtistListsSort": "Interpreten sortieren",
|
||||
"@resourcesArtistListsSort": {},
|
||||
"resourcesArtistName": "{count,plural, =1{Interpret} other{Interpreten}}",
|
||||
"@resourcesArtistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesFilterGenre": "Nach Genre",
|
||||
"@resourcesFilterGenre": {},
|
||||
"resourcesFilterStarred": "Favoriten",
|
||||
"@resourcesFilterStarred": {},
|
||||
"resourcesPlaylistActionsPlay": "Wiedergabeliste abspielen",
|
||||
"@resourcesPlaylistActionsPlay": {},
|
||||
"resourcesPlaylistName": "{count,plural, =1{Wiedergabeliste} other{Wiedergabelisten}}",
|
||||
"@resourcesPlaylistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesQueueName": "{count,plural, =1{Warteschlange} other{Warteschlangen}}",
|
||||
"@resourcesQueueName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSongListsArtistTopSongs": "Top Lieder",
|
||||
"@resourcesSongListsArtistTopSongs": {},
|
||||
"resourcesSongName": "{count,plural, =1{Lied} other{Lieder}}",
|
||||
"@resourcesSongName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSortByAdded": "Kürzlich hinzugefügt",
|
||||
"@resourcesSortByAdded": {},
|
||||
"resourcesSortByArtist": "Nach Interpreten",
|
||||
"@resourcesSortByArtist": {},
|
||||
"resourcesSortByFrequentlyPlayed": "Häufig abgespielt",
|
||||
"@resourcesSortByFrequentlyPlayed": {},
|
||||
"resourcesSortByName": "Nach Name",
|
||||
"@resourcesSortByName": {},
|
||||
"resourcesSortByRandom": "Zufällig",
|
||||
"@resourcesSortByRandom": {},
|
||||
"resourcesSortByRecentlyPlayed": "Kürzlich abgespielt",
|
||||
"@resourcesSortByRecentlyPlayed": {},
|
||||
"resourcesSortByYear": "Nach Jahr",
|
||||
"@resourcesSortByYear": {},
|
||||
"searchHeaderTitle": "Suche: {query}",
|
||||
"@searchHeaderTitle": {
|
||||
"placeholders": {
|
||||
"query": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"searchInputPlaceholder": "Suche",
|
||||
"@searchInputPlaceholder": {},
|
||||
"searchMoreResults": "Mehr…",
|
||||
"@searchMoreResults": {},
|
||||
"searchNowPlayingContext": "Suchergebnis",
|
||||
"@searchNowPlayingContext": {},
|
||||
"settingsAboutActionsLicenses": "Lizenzen",
|
||||
"@settingsAboutActionsLicenses": {},
|
||||
"settingsAboutActionsProjectHomepage": "Projektseite",
|
||||
"@settingsAboutActionsProjectHomepage": {},
|
||||
"settingsAboutName": "Über",
|
||||
"@settingsAboutName": {},
|
||||
"settingsAboutVersion": "Version {version}",
|
||||
"@settingsAboutVersion": {
|
||||
"placeholders": {
|
||||
"version": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsMusicName": "Musik",
|
||||
"@settingsMusicName": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOff": "Kein Scrobble für Wiedergabeverlauf",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOff": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOn": "Scrobble Wiedergabeverlauf",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOn": {},
|
||||
"settingsMusicOptionsScrobbleTitle": "Scrobble Wiedergabe",
|
||||
"@settingsMusicOptionsScrobbleTitle": {},
|
||||
"settingsNetworkName": "Netzwerk",
|
||||
"@settingsNetworkName": {},
|
||||
"settingsNetworkOptionsMaxBitrateMobileTitle": "Maximale Bitrate (Mobil)",
|
||||
"@settingsNetworkOptionsMaxBitrateMobileTitle": {},
|
||||
"settingsNetworkOptionsMaxBitrateWifiTitle": "Maximale Bitrate (WLAN)",
|
||||
"@settingsNetworkOptionsMaxBitrateWifiTitle": {},
|
||||
"settingsNetworkOptionsMaxBufferTitle": "Maximale Pufferzeit",
|
||||
"@settingsNetworkOptionsMaxBufferTitle": {},
|
||||
"settingsNetworkOptionsMinBufferTitle": "Minimale Pufferzeit",
|
||||
"@settingsNetworkOptionsMinBufferTitle": {},
|
||||
"settingsNetworkValuesKbps": "{value}kbps",
|
||||
"@settingsNetworkValuesKbps": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesSeconds": "{value} Sekunden",
|
||||
"@settingsNetworkValuesSeconds": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesUnlimitedKbps": "Unbegrenzt",
|
||||
"@settingsNetworkValuesUnlimitedKbps": {},
|
||||
"settingsResetActionsClearImageCache": "Bildzwischenspeicher löschen",
|
||||
"@settingsResetActionsClearImageCache": {},
|
||||
"settingsResetName": "Zurücksetzen",
|
||||
"@settingsResetName": {},
|
||||
"settingsServersActionsAdd": "Server hinzufügen",
|
||||
"@settingsServersActionsAdd": {},
|
||||
"settingsServersActionsDelete": "Löschen",
|
||||
"@settingsServersActionsDelete": {},
|
||||
"settingsServersActionsEdit": "Server bearbeiten",
|
||||
"@settingsServersActionsEdit": {},
|
||||
"settingsServersActionsSave": "Speichern",
|
||||
"@settingsServersActionsSave": {},
|
||||
"settingsServersActionsTestConnection": "Verbindung testen",
|
||||
"@settingsServersActionsTestConnection": {},
|
||||
"settingsServersFieldsAddress": "Adresse",
|
||||
"@settingsServersFieldsAddress": {},
|
||||
"settingsServersFieldsPassword": "Passwort",
|
||||
"@settingsServersFieldsPassword": {},
|
||||
"settingsServersFieldsUsername": "Nutzername",
|
||||
"@settingsServersFieldsUsername": {},
|
||||
"settingsServersMessagesConnectionFailed": "Verbindung zu {address} fehlgeschlagen, überprüfe Einstellungen oder Server",
|
||||
"@settingsServersMessagesConnectionFailed": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersMessagesConnectionOk": "Verbindung zu {address} ist OK!",
|
||||
"@settingsServersMessagesConnectionOk": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersName": "Server",
|
||||
"@settingsServersName": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOff": "Sende Passwort als Token + Salt",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOff": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOn": "Passwort als Klartext senden (Veraltet, stellen Sie sicher, dass Ihre Verbindung sicher ist!)",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOn": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordTitle": "Erzwinge Klartextpasswort",
|
||||
"@settingsServersOptionsForcePlaintextPasswordTitle": {},
|
||||
"actionsDelete": "Löschen",
|
||||
"@actionsDelete": {},
|
||||
"actionsDownload": "Herunterladen",
|
||||
"@actionsDownload": {},
|
||||
"actionsDownloadCancel": "Download abbrechen",
|
||||
"@actionsDownloadCancel": {},
|
||||
"controlsShuffle": "Zufall",
|
||||
"@controlsShuffle": {},
|
||||
"actionsCancel": "Abbrechen",
|
||||
"@actionsCancel": {}
|
||||
}
|
||||
|
||||
@@ -1,196 +1,210 @@
|
||||
{
|
||||
"actionsStar": "Estrella",
|
||||
"@actionsStar": {},
|
||||
"actionsUnstar": "Retirar estrella",
|
||||
"@actionsUnstar": {},
|
||||
"messagesNothingHere": "Nada aquí…",
|
||||
"@messagesNothingHere": {},
|
||||
"navigationTabsHome": "Casa",
|
||||
"@navigationTabsHome": {},
|
||||
"navigationTabsLibrary": "Biblioteca",
|
||||
"@navigationTabsLibrary": {},
|
||||
"navigationTabsSearch": "Buscar",
|
||||
"@navigationTabsSearch": {},
|
||||
"navigationTabsSettings": "Entorno",
|
||||
"@navigationTabsSettings": {},
|
||||
"resourcesAlbumActionsPlay": "Reproducir Álbum",
|
||||
"@resourcesAlbumActionsPlay": {},
|
||||
"resourcesAlbumActionsView": "Ver Álbum",
|
||||
"@resourcesAlbumActionsView": {},
|
||||
"resourcesAlbumListsSort": "Ordenar Álbumes",
|
||||
"@resourcesAlbumListsSort": {},
|
||||
"resourcesAlbumName": "{count,plural, =1{Álbum} other{Álbumes}}",
|
||||
"@resourcesAlbumName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesArtistActionsView": "Ver Artista",
|
||||
"@resourcesArtistActionsView": {},
|
||||
"resourcesArtistListsSort": "Oredenar Artistas",
|
||||
"@resourcesArtistListsSort": {},
|
||||
"resourcesArtistName": "{count,plural, =1{Artista} other{Artistas}}",
|
||||
"@resourcesArtistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesFilterGenre": "Por Género",
|
||||
"@resourcesFilterGenre": {},
|
||||
"resourcesFilterStarred": "Estrellas",
|
||||
"@resourcesFilterStarred": {},
|
||||
"resourcesPlaylistActionsPlay": "Reproducir Lista de reproducción",
|
||||
"@resourcesPlaylistActionsPlay": {},
|
||||
"resourcesPlaylistName": "{count,plural, =1{Lista de reproducción} other{Listas de reproducción}}",
|
||||
"@resourcesPlaylistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesQueueName": "{count,plural, =1{Cola} other{Colas}}",
|
||||
"@resourcesQueueName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSongListsArtistTopSongs": "Mejores Canciones",
|
||||
"@resourcesSongListsArtistTopSongs": {},
|
||||
"resourcesSongName": "{count,plural, =1{Cancion} other{Canciones}}",
|
||||
"@resourcesSongName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSortByAdded": "Recientemente Añadido",
|
||||
"@resourcesSortByAdded": {},
|
||||
"resourcesSortByArtist": "Por Artista",
|
||||
"@resourcesSortByArtist": {},
|
||||
"resourcesSortByFrequentlyPlayed": "Jugado Frecuentemente",
|
||||
"@resourcesSortByFrequentlyPlayed": {},
|
||||
"resourcesSortByName": "Por Nombre",
|
||||
"@resourcesSortByName": {},
|
||||
"resourcesSortByRandom": "Aleatorio",
|
||||
"@resourcesSortByRandom": {},
|
||||
"resourcesSortByRecentlyPlayed": "Recientemente Jugado",
|
||||
"@resourcesSortByRecentlyPlayed": {},
|
||||
"resourcesSortByYear": "Por Año",
|
||||
"@resourcesSortByYear": {},
|
||||
"searchHeaderTitle": "Buscar: {query}",
|
||||
"@searchHeaderTitle": {
|
||||
"placeholders": {
|
||||
"query": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"searchInputPlaceholder": "Buscar",
|
||||
"@searchInputPlaceholder": {},
|
||||
"searchMoreResults": "Más…",
|
||||
"@searchMoreResults": {},
|
||||
"searchNowPlayingContext": "Resultados de la búsqueda",
|
||||
"@searchNowPlayingContext": {},
|
||||
"settingsAboutActionsLicenses": "Licencias",
|
||||
"@settingsAboutActionsLicenses": {},
|
||||
"settingsAboutActionsProjectHomepage": "Página de inicio del proyecto",
|
||||
"@settingsAboutActionsProjectHomepage": {},
|
||||
"settingsAboutName": "Información",
|
||||
"@settingsAboutName": {},
|
||||
"settingsAboutVersion": "versión {version}",
|
||||
"@settingsAboutVersion": {
|
||||
"placeholders": {
|
||||
"version": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsMusicName": "Música",
|
||||
"@settingsMusicName": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOff": "No hagas historial de reproducción de scrobble",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOff": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOn": "Historial de reproducción de scrobble",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOn": {},
|
||||
"settingsMusicOptionsScrobbleTitle": "Obras de teatro de Scrobble",
|
||||
"@settingsMusicOptionsScrobbleTitle": {},
|
||||
"settingsNetworkName": "Sitio",
|
||||
"@settingsNetworkName": {},
|
||||
"settingsNetworkOptionsMaxBitrateMobileTitle": "Tasa de bits máxima (mobile)",
|
||||
"@settingsNetworkOptionsMaxBitrateMobileTitle": {},
|
||||
"settingsNetworkOptionsMaxBitrateWifiTitle": "Tasa de bits máxima (Wi-Fi)",
|
||||
"@settingsNetworkOptionsMaxBitrateWifiTitle": {},
|
||||
"settingsNetworkOptionsMaxBufferTitle": "Máxima de buffer tiempo",
|
||||
"@settingsNetworkOptionsMaxBufferTitle": {},
|
||||
"settingsNetworkOptionsMinBufferTitle": "Mínimo de buffer tiempo",
|
||||
"@settingsNetworkOptionsMinBufferTitle": {},
|
||||
"settingsNetworkValuesKbps": "{value} kilobytes por segundo",
|
||||
"@settingsNetworkValuesKbps": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesSeconds": "{value} segundos",
|
||||
"@settingsNetworkValuesSeconds": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesUnlimitedKbps": "Ilimitados",
|
||||
"@settingsNetworkValuesUnlimitedKbps": {},
|
||||
"settingsResetActionsClearImageCache": "Caché de imágenes claras",
|
||||
"@settingsResetActionsClearImageCache": {},
|
||||
"settingsResetName": "Reinicializar",
|
||||
"@settingsResetName": {},
|
||||
"settingsServersActionsAdd": "Agregar Servidor",
|
||||
"@settingsServersActionsAdd": {},
|
||||
"settingsServersActionsDelete": "Supr",
|
||||
"@settingsServersActionsDelete": {},
|
||||
"settingsServersActionsEdit": "Editar Servidor",
|
||||
"@settingsServersActionsEdit": {},
|
||||
"settingsServersActionsSave": "Enviar",
|
||||
"@settingsServersActionsSave": {},
|
||||
"settingsServersActionsTestConnection": "Conexión de prueba",
|
||||
"@settingsServersActionsTestConnection": {},
|
||||
"settingsServersFieldsAddress": "Alocución",
|
||||
"@settingsServersFieldsAddress": {},
|
||||
"settingsServersFieldsPassword": "La contraseña",
|
||||
"@settingsServersFieldsPassword": {},
|
||||
"settingsServersFieldsUsername": "Nombre de usuario",
|
||||
"@settingsServersFieldsUsername": {},
|
||||
"settingsServersMessagesConnectionFailed": "La conexión a {address} falló, verifique la configuracón o el servidor",
|
||||
"@settingsServersMessagesConnectionFailed": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersMessagesConnectionOk": "¡Conexión con {address} Ok!",
|
||||
"@settingsServersMessagesConnectionOk": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersName": "Servidores",
|
||||
"@settingsServersName": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOff": "Enviar contraseña como token + sal",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOff": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOn": "Enviar contraseña en texto plano (¡legado, asegúrese de que su conexión sea segura!)",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOn": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordTitle": "Forzar contraseña de texto sin formato",
|
||||
"@settingsServersOptionsForcePlaintextPasswordTitle": {}
|
||||
}
|
||||
"actionsStar": "Favorito",
|
||||
"@actionsStar": {},
|
||||
"actionsUnstar": "Retirar favorito",
|
||||
"@actionsUnstar": {},
|
||||
"messagesNothingHere": "Nada aquí…",
|
||||
"@messagesNothingHere": {},
|
||||
"navigationTabsHome": "Casa",
|
||||
"@navigationTabsHome": {},
|
||||
"navigationTabsLibrary": "Biblioteca",
|
||||
"@navigationTabsLibrary": {},
|
||||
"navigationTabsSearch": "Buscar",
|
||||
"@navigationTabsSearch": {},
|
||||
"navigationTabsSettings": "Entorno",
|
||||
"@navigationTabsSettings": {},
|
||||
"resourcesAlbumActionsPlay": "Reproducir Álbum",
|
||||
"@resourcesAlbumActionsPlay": {},
|
||||
"resourcesAlbumActionsView": "Ver Álbum",
|
||||
"@resourcesAlbumActionsView": {},
|
||||
"resourcesAlbumListsSort": "Ordenar Álbumes",
|
||||
"@resourcesAlbumListsSort": {},
|
||||
"resourcesAlbumName": "{count,plural, =1{Álbum} other{Álbumes}}",
|
||||
"@resourcesAlbumName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesArtistActionsView": "Ver Artista",
|
||||
"@resourcesArtistActionsView": {},
|
||||
"resourcesArtistListsSort": "Oredenar Artistas",
|
||||
"@resourcesArtistListsSort": {},
|
||||
"resourcesArtistName": "{count,plural, =1{Artista} other{Artistas}}",
|
||||
"@resourcesArtistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesFilterGenre": "Por Género",
|
||||
"@resourcesFilterGenre": {},
|
||||
"resourcesFilterStarred": "Estrellas",
|
||||
"@resourcesFilterStarred": {},
|
||||
"resourcesPlaylistActionsPlay": "Reproducir Lista de reproducción",
|
||||
"@resourcesPlaylistActionsPlay": {},
|
||||
"resourcesPlaylistName": "{count,plural, =1{Lista de reproducción} other{Listas de reproducción}}",
|
||||
"@resourcesPlaylistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesQueueName": "{count,plural, =1{Cola} other{Colas}}",
|
||||
"@resourcesQueueName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSongListsArtistTopSongs": "Mejores Canciones",
|
||||
"@resourcesSongListsArtistTopSongs": {},
|
||||
"resourcesSongName": "{count,plural, =1{Cancion} other{Canciones}}",
|
||||
"@resourcesSongName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSortByAdded": "Recientemente Añadido",
|
||||
"@resourcesSortByAdded": {},
|
||||
"resourcesSortByArtist": "Por Artista",
|
||||
"@resourcesSortByArtist": {},
|
||||
"resourcesSortByFrequentlyPlayed": "Jugado Frecuentemente",
|
||||
"@resourcesSortByFrequentlyPlayed": {},
|
||||
"resourcesSortByName": "Por Nombre",
|
||||
"@resourcesSortByName": {},
|
||||
"resourcesSortByRandom": "Aleatorio",
|
||||
"@resourcesSortByRandom": {},
|
||||
"resourcesSortByRecentlyPlayed": "Recientemente Jugado",
|
||||
"@resourcesSortByRecentlyPlayed": {},
|
||||
"resourcesSortByYear": "Por Año",
|
||||
"@resourcesSortByYear": {},
|
||||
"searchHeaderTitle": "Buscar: {query}",
|
||||
"@searchHeaderTitle": {
|
||||
"placeholders": {
|
||||
"query": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"searchInputPlaceholder": "Buscar",
|
||||
"@searchInputPlaceholder": {},
|
||||
"searchMoreResults": "Más…",
|
||||
"@searchMoreResults": {},
|
||||
"searchNowPlayingContext": "Resultados de la búsqueda",
|
||||
"@searchNowPlayingContext": {},
|
||||
"settingsAboutActionsLicenses": "Licencias",
|
||||
"@settingsAboutActionsLicenses": {},
|
||||
"settingsAboutActionsProjectHomepage": "Página de inicio del proyecto",
|
||||
"@settingsAboutActionsProjectHomepage": {},
|
||||
"settingsAboutName": "Información",
|
||||
"@settingsAboutName": {},
|
||||
"settingsAboutVersion": "versión {version}",
|
||||
"@settingsAboutVersion": {
|
||||
"placeholders": {
|
||||
"version": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsMusicName": "Música",
|
||||
"@settingsMusicName": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOff": "No hagas historial de reproducción de scrobble",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOff": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOn": "Historial de reproducción de scrobble",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOn": {},
|
||||
"settingsMusicOptionsScrobbleTitle": "Obras de teatro de Scrobble",
|
||||
"@settingsMusicOptionsScrobbleTitle": {},
|
||||
"settingsNetworkName": "Sitio",
|
||||
"@settingsNetworkName": {},
|
||||
"settingsNetworkOptionsMaxBitrateMobileTitle": "Tasa de bits máxima (mobile)",
|
||||
"@settingsNetworkOptionsMaxBitrateMobileTitle": {},
|
||||
"settingsNetworkOptionsMaxBitrateWifiTitle": "Tasa de bits máxima (Wi-Fi)",
|
||||
"@settingsNetworkOptionsMaxBitrateWifiTitle": {},
|
||||
"settingsNetworkOptionsMaxBufferTitle": "Máxima de buffer tiempo",
|
||||
"@settingsNetworkOptionsMaxBufferTitle": {},
|
||||
"settingsNetworkOptionsMinBufferTitle": "Mínimo de buffer tiempo",
|
||||
"@settingsNetworkOptionsMinBufferTitle": {},
|
||||
"settingsNetworkValuesKbps": "{value} kilobytes por segundo",
|
||||
"@settingsNetworkValuesKbps": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesSeconds": "{value} segundos",
|
||||
"@settingsNetworkValuesSeconds": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesUnlimitedKbps": "Ilimitados",
|
||||
"@settingsNetworkValuesUnlimitedKbps": {},
|
||||
"settingsResetActionsClearImageCache": "Caché de imágenes claras",
|
||||
"@settingsResetActionsClearImageCache": {},
|
||||
"settingsResetName": "Reinicializar",
|
||||
"@settingsResetName": {},
|
||||
"settingsServersActionsAdd": "Agregar Servidor",
|
||||
"@settingsServersActionsAdd": {},
|
||||
"settingsServersActionsDelete": "Supr",
|
||||
"@settingsServersActionsDelete": {},
|
||||
"settingsServersActionsEdit": "Editar Servidor",
|
||||
"@settingsServersActionsEdit": {},
|
||||
"settingsServersActionsSave": "Enviar",
|
||||
"@settingsServersActionsSave": {},
|
||||
"settingsServersActionsTestConnection": "Conexión de prueba",
|
||||
"@settingsServersActionsTestConnection": {},
|
||||
"settingsServersFieldsAddress": "Alocución",
|
||||
"@settingsServersFieldsAddress": {},
|
||||
"settingsServersFieldsPassword": "La contraseña",
|
||||
"@settingsServersFieldsPassword": {},
|
||||
"settingsServersFieldsUsername": "Nombre de usuario",
|
||||
"@settingsServersFieldsUsername": {},
|
||||
"settingsServersMessagesConnectionFailed": "La conexión a {address} falló, verifique la configuracón o el servidor",
|
||||
"@settingsServersMessagesConnectionFailed": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersMessagesConnectionOk": "¡Conexión con {address} Ok!",
|
||||
"@settingsServersMessagesConnectionOk": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersName": "Servidores",
|
||||
"@settingsServersName": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOff": "Enviar contraseña como token + sal",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOff": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOn": "Enviar contraseña en texto plano (¡legado, asegúrese de que su conexión sea segura!)",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOn": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordTitle": "Forzar contraseña de texto sin formato",
|
||||
"@settingsServersOptionsForcePlaintextPasswordTitle": {},
|
||||
"actionsDelete": "Borrar",
|
||||
"@actionsDelete": {},
|
||||
"actionsOk": "Ok",
|
||||
"@actionsOk": {},
|
||||
"actionsDownload": "Descargar",
|
||||
"@actionsDownload": {},
|
||||
"actionsDownloadCancel": "Anular descargar",
|
||||
"@actionsDownloadCancel": {},
|
||||
"controlsShuffle": "Reproducir aleatoriamente",
|
||||
"@controlsShuffle": {},
|
||||
"actionsCancel": "Cancelar",
|
||||
"@actionsCancel": {},
|
||||
"actionsDownloadDelete": "Eliminar descargado",
|
||||
"@actionsDownloadDelete": {}
|
||||
}
|
||||
|
||||
@@ -1,196 +1,276 @@
|
||||
{
|
||||
"actionsStar": "Estrela",
|
||||
"@actionsStar": {},
|
||||
"actionsUnstar": "Retirar",
|
||||
"@actionsUnstar": {},
|
||||
"messagesNothingHere": "Nada por aquí…",
|
||||
"@messagesNothingHere": {},
|
||||
"navigationTabsHome": "Inicio",
|
||||
"@navigationTabsHome": {},
|
||||
"navigationTabsLibrary": "Biblioteca",
|
||||
"@navigationTabsLibrary": {},
|
||||
"navigationTabsSearch": "Buscar",
|
||||
"@navigationTabsSearch": {},
|
||||
"navigationTabsSettings": "Axustes",
|
||||
"@navigationTabsSettings": {},
|
||||
"resourcesAlbumActionsPlay": "Reproducir",
|
||||
"@resourcesAlbumActionsPlay": {},
|
||||
"resourcesAlbumActionsView": "Ver Álbum",
|
||||
"@resourcesAlbumActionsView": {},
|
||||
"resourcesAlbumListsSort": "Ordenar Álbums",
|
||||
"@resourcesAlbumListsSort": {},
|
||||
"resourcesAlbumName": "{count,plural, =1{Álbum} other{Álbums}}",
|
||||
"@resourcesAlbumName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesArtistActionsView": "Ver Artista",
|
||||
"@resourcesArtistActionsView": {},
|
||||
"resourcesArtistListsSort": "Ordenar Artistas",
|
||||
"@resourcesArtistListsSort": {},
|
||||
"resourcesArtistName": "{count,plural, =1{Artista} other{Artistas}}",
|
||||
"@resourcesArtistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesFilterGenre": "Por xénero",
|
||||
"@resourcesFilterGenre": {},
|
||||
"resourcesFilterStarred": "Favoritas",
|
||||
"@resourcesFilterStarred": {},
|
||||
"resourcesPlaylistActionsPlay": "Reproducir lista",
|
||||
"@resourcesPlaylistActionsPlay": {},
|
||||
"resourcesPlaylistName": "{count,plural, =1{Listaxe} other{Listaxes}}",
|
||||
"@resourcesPlaylistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesQueueName": "{count,plural, =1{Fila} other{Filas}}",
|
||||
"@resourcesQueueName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSongListsArtistTopSongs": "Máis reproducidas",
|
||||
"@resourcesSongListsArtistTopSongs": {},
|
||||
"resourcesSongName": "{count,plural, =1{Canción} other{Cancións}}",
|
||||
"@resourcesSongName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSortByAdded": "Últimas engadidas",
|
||||
"@resourcesSortByAdded": {},
|
||||
"resourcesSortByArtist": "Por artista",
|
||||
"@resourcesSortByArtist": {},
|
||||
"resourcesSortByFrequentlyPlayed": "Reproducidas a miúdo",
|
||||
"@resourcesSortByFrequentlyPlayed": {},
|
||||
"resourcesSortByName": "Por nome",
|
||||
"@resourcesSortByName": {},
|
||||
"resourcesSortByRandom": "Ao chou",
|
||||
"@resourcesSortByRandom": {},
|
||||
"resourcesSortByRecentlyPlayed": "Reproducidas a miúdo",
|
||||
"@resourcesSortByRecentlyPlayed": {},
|
||||
"resourcesSortByYear": "Por ano",
|
||||
"@resourcesSortByYear": {},
|
||||
"searchHeaderTitle": "Buscar: {query}",
|
||||
"@searchHeaderTitle": {
|
||||
"placeholders": {
|
||||
"query": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"searchInputPlaceholder": "Buscar",
|
||||
"@searchInputPlaceholder": {},
|
||||
"searchMoreResults": "Máis…",
|
||||
"@searchMoreResults": {},
|
||||
"searchNowPlayingContext": "Resultados",
|
||||
"@searchNowPlayingContext": {},
|
||||
"settingsAboutActionsLicenses": "Licenzas",
|
||||
"@settingsAboutActionsLicenses": {},
|
||||
"settingsAboutActionsProjectHomepage": "Web do Proxecto",
|
||||
"@settingsAboutActionsProjectHomepage": {},
|
||||
"settingsAboutName": "Acerca de",
|
||||
"@settingsAboutName": {},
|
||||
"settingsAboutVersion": "versión {version}",
|
||||
"@settingsAboutVersion": {
|
||||
"placeholders": {
|
||||
"version": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsMusicName": "Música",
|
||||
"@settingsMusicName": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOff": "Non rexistrar o historial de reprodución",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOff": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOn": "Rexistrar o historial de reprodución",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOn": {},
|
||||
"settingsMusicOptionsScrobbleTitle": "Rexistrar reprodución",
|
||||
"@settingsMusicOptionsScrobbleTitle": {},
|
||||
"settingsNetworkName": "Rede",
|
||||
"@settingsNetworkName": {},
|
||||
"settingsNetworkOptionsMaxBitrateMobileTitle": "Bitrate máx. (móbil)",
|
||||
"@settingsNetworkOptionsMaxBitrateMobileTitle": {},
|
||||
"settingsNetworkOptionsMaxBitrateWifiTitle": "Bitrate máx. (Wi-Fi)",
|
||||
"@settingsNetworkOptionsMaxBitrateWifiTitle": {},
|
||||
"settingsNetworkOptionsMaxBufferTitle": "Tempo máximo na memoria",
|
||||
"@settingsNetworkOptionsMaxBufferTitle": {},
|
||||
"settingsNetworkOptionsMinBufferTitle": "Tempo mínimo na memoria",
|
||||
"@settingsNetworkOptionsMinBufferTitle": {},
|
||||
"settingsNetworkValuesKbps": "{value}kbps",
|
||||
"@settingsNetworkValuesKbps": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesSeconds": "{value} segundos",
|
||||
"@settingsNetworkValuesSeconds": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesUnlimitedKbps": "Sen límite",
|
||||
"@settingsNetworkValuesUnlimitedKbps": {},
|
||||
"settingsResetActionsClearImageCache": "Limpar a caché de imaxes",
|
||||
"@settingsResetActionsClearImageCache": {},
|
||||
"settingsResetName": "Restablecer",
|
||||
"@settingsResetName": {},
|
||||
"settingsServersActionsAdd": "Engadir Servidor",
|
||||
"@settingsServersActionsAdd": {},
|
||||
"settingsServersActionsDelete": "Eliminar",
|
||||
"@settingsServersActionsDelete": {},
|
||||
"settingsServersActionsEdit": "Editar Servidor",
|
||||
"@settingsServersActionsEdit": {},
|
||||
"settingsServersActionsSave": "Gardar",
|
||||
"@settingsServersActionsSave": {},
|
||||
"settingsServersActionsTestConnection": "Comprobar Conexión",
|
||||
"@settingsServersActionsTestConnection": {},
|
||||
"settingsServersFieldsAddress": "Enderezo",
|
||||
"@settingsServersFieldsAddress": {},
|
||||
"settingsServersFieldsPassword": "Contrasinal",
|
||||
"@settingsServersFieldsPassword": {},
|
||||
"settingsServersFieldsUsername": "Identificador",
|
||||
"@settingsServersFieldsUsername": {},
|
||||
"settingsServersMessagesConnectionFailed": "Fallou a conexión a {address}, comproba os axustes",
|
||||
"@settingsServersMessagesConnectionFailed": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersMessagesConnectionOk": "Conexión con {address} OK!",
|
||||
"@settingsServersMessagesConnectionOk": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersName": "Servidores",
|
||||
"@settingsServersName": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOff": "Enviar contrasinal como token + salt",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOff": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOn": "Enviar contrasinal en texto plano (herdado, pon coidado en que a conexión sexa segura!)",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOn": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordTitle": "Forzar contrasinal en texto plano",
|
||||
"@settingsServersOptionsForcePlaintextPasswordTitle": {}
|
||||
}
|
||||
"actionsStar": "Estrela",
|
||||
"@actionsStar": {},
|
||||
"actionsUnstar": "Retirar",
|
||||
"@actionsUnstar": {},
|
||||
"messagesNothingHere": "Nada por aquí…",
|
||||
"@messagesNothingHere": {},
|
||||
"navigationTabsHome": "Inicio",
|
||||
"@navigationTabsHome": {},
|
||||
"navigationTabsLibrary": "Biblioteca",
|
||||
"@navigationTabsLibrary": {},
|
||||
"navigationTabsSearch": "Buscar",
|
||||
"@navigationTabsSearch": {},
|
||||
"navigationTabsSettings": "Axustes",
|
||||
"@navigationTabsSettings": {},
|
||||
"resourcesAlbumActionsPlay": "Reproducir",
|
||||
"@resourcesAlbumActionsPlay": {},
|
||||
"resourcesAlbumActionsView": "Ver Álbum",
|
||||
"@resourcesAlbumActionsView": {},
|
||||
"resourcesAlbumListsSort": "Ordenar Álbums",
|
||||
"@resourcesAlbumListsSort": {},
|
||||
"resourcesAlbumName": "{count,plural, =1{Álbum} other{Álbums}}",
|
||||
"@resourcesAlbumName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesArtistActionsView": "Ver Artista",
|
||||
"@resourcesArtistActionsView": {},
|
||||
"resourcesArtistListsSort": "Ordenar Artistas",
|
||||
"@resourcesArtistListsSort": {},
|
||||
"resourcesArtistName": "{count,plural, =1{Artista} other{Artistas}}",
|
||||
"@resourcesArtistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesFilterGenre": "Por xénero",
|
||||
"@resourcesFilterGenre": {},
|
||||
"resourcesFilterStarred": "Favoritas",
|
||||
"@resourcesFilterStarred": {},
|
||||
"resourcesPlaylistActionsPlay": "Reproducir lista",
|
||||
"@resourcesPlaylistActionsPlay": {},
|
||||
"resourcesPlaylistName": "{count,plural, =1{Listaxe} other{Listaxes}}",
|
||||
"@resourcesPlaylistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesQueueName": "{count,plural, =1{Fila} other{Filas}}",
|
||||
"@resourcesQueueName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSongListsArtistTopSongs": "Máis reproducidas",
|
||||
"@resourcesSongListsArtistTopSongs": {},
|
||||
"resourcesSongName": "{count,plural, =1{Canción} other{Cancións}}",
|
||||
"@resourcesSongName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSortByAdded": "Últimas engadidas",
|
||||
"@resourcesSortByAdded": {},
|
||||
"resourcesSortByArtist": "Por artista",
|
||||
"@resourcesSortByArtist": {},
|
||||
"resourcesSortByFrequentlyPlayed": "Reproducidas a miúdo",
|
||||
"@resourcesSortByFrequentlyPlayed": {},
|
||||
"resourcesSortByName": "Por nome",
|
||||
"@resourcesSortByName": {},
|
||||
"resourcesSortByRandom": "Ao chou",
|
||||
"@resourcesSortByRandom": {},
|
||||
"resourcesSortByRecentlyPlayed": "Reproducidas a miúdo",
|
||||
"@resourcesSortByRecentlyPlayed": {},
|
||||
"resourcesSortByYear": "Por ano",
|
||||
"@resourcesSortByYear": {},
|
||||
"searchHeaderTitle": "Buscar: {query}",
|
||||
"@searchHeaderTitle": {
|
||||
"placeholders": {
|
||||
"query": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"searchInputPlaceholder": "Buscar",
|
||||
"@searchInputPlaceholder": {},
|
||||
"searchMoreResults": "Máis…",
|
||||
"@searchMoreResults": {},
|
||||
"searchNowPlayingContext": "Resultados",
|
||||
"@searchNowPlayingContext": {},
|
||||
"settingsAboutActionsLicenses": "Licenzas",
|
||||
"@settingsAboutActionsLicenses": {},
|
||||
"settingsAboutActionsProjectHomepage": "Web do Proxecto",
|
||||
"@settingsAboutActionsProjectHomepage": {},
|
||||
"settingsAboutName": "Acerca de",
|
||||
"@settingsAboutName": {},
|
||||
"settingsAboutVersion": "versión {version}",
|
||||
"@settingsAboutVersion": {
|
||||
"placeholders": {
|
||||
"version": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsMusicName": "Música",
|
||||
"@settingsMusicName": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOff": "Non rexistrar o historial de reprodución",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOff": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOn": "Rexistrar o historial de reprodución",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOn": {},
|
||||
"settingsMusicOptionsScrobbleTitle": "Rexistrar reprodución",
|
||||
"@settingsMusicOptionsScrobbleTitle": {},
|
||||
"settingsNetworkName": "Rede",
|
||||
"@settingsNetworkName": {},
|
||||
"settingsNetworkOptionsMaxBitrateMobileTitle": "Bitrate máx. (móbil)",
|
||||
"@settingsNetworkOptionsMaxBitrateMobileTitle": {},
|
||||
"settingsNetworkOptionsMaxBitrateWifiTitle": "Bitrate máx. (Wi-Fi)",
|
||||
"@settingsNetworkOptionsMaxBitrateWifiTitle": {},
|
||||
"settingsNetworkOptionsMaxBufferTitle": "Tempo máximo na memoria",
|
||||
"@settingsNetworkOptionsMaxBufferTitle": {},
|
||||
"settingsNetworkOptionsMinBufferTitle": "Tempo mínimo na memoria",
|
||||
"@settingsNetworkOptionsMinBufferTitle": {},
|
||||
"settingsNetworkValuesKbps": "{value}kbps",
|
||||
"@settingsNetworkValuesKbps": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesSeconds": "{value} segundos",
|
||||
"@settingsNetworkValuesSeconds": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesUnlimitedKbps": "Sen límite",
|
||||
"@settingsNetworkValuesUnlimitedKbps": {},
|
||||
"settingsResetActionsClearImageCache": "Limpar a caché de imaxes",
|
||||
"@settingsResetActionsClearImageCache": {},
|
||||
"settingsResetName": "Restablecer",
|
||||
"@settingsResetName": {},
|
||||
"settingsServersActionsAdd": "Engadir Servidor",
|
||||
"@settingsServersActionsAdd": {},
|
||||
"settingsServersActionsDelete": "Eliminar",
|
||||
"@settingsServersActionsDelete": {},
|
||||
"settingsServersActionsEdit": "Editar Servidor",
|
||||
"@settingsServersActionsEdit": {},
|
||||
"settingsServersActionsSave": "Gardar",
|
||||
"@settingsServersActionsSave": {},
|
||||
"settingsServersActionsTestConnection": "Comprobar Conexión",
|
||||
"@settingsServersActionsTestConnection": {},
|
||||
"settingsServersFieldsAddress": "Enderezo",
|
||||
"@settingsServersFieldsAddress": {},
|
||||
"settingsServersFieldsPassword": "Contrasinal",
|
||||
"@settingsServersFieldsPassword": {},
|
||||
"settingsServersFieldsUsername": "Identificador",
|
||||
"@settingsServersFieldsUsername": {},
|
||||
"settingsServersMessagesConnectionFailed": "Fallou a conexión a {address}, comproba os axustes",
|
||||
"@settingsServersMessagesConnectionFailed": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersMessagesConnectionOk": "Conexión con {address} OK!",
|
||||
"@settingsServersMessagesConnectionOk": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersName": "Servidores",
|
||||
"@settingsServersName": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOff": "Enviar contrasinal como token + salt",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOff": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOn": "Enviar contrasinal en texto plano (herdado, pon coidado en que a conexión sexa segura!)",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOn": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordTitle": "Forzar contrasinal en texto plano",
|
||||
"@settingsServersOptionsForcePlaintextPasswordTitle": {},
|
||||
"actionsCancel": "Cancelar",
|
||||
"@actionsCancel": {},
|
||||
"actionsDelete": "Eliminar",
|
||||
"@actionsDelete": {},
|
||||
"actionsDownload": "Descargar",
|
||||
"@actionsDownload": {},
|
||||
"actionsDownloadCancel": "Cancelar a descarga",
|
||||
"@actionsDownloadCancel": {},
|
||||
"actionsDownloadDelete": "Eliminar o descargado",
|
||||
"@actionsDownloadDelete": {},
|
||||
"actionsOk": "OK",
|
||||
"@actionsOk": {},
|
||||
"controlsShuffle": "Barallar",
|
||||
"@controlsShuffle": {},
|
||||
"resourcesAlbumCount": "{count,plural, =1{{count} álbum} other{{count} álbums}}",
|
||||
"@resourcesAlbumCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesArtistCount": "{count,plural, =1{{count} artista} other{{count} artistas}}",
|
||||
"@resourcesArtistCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesFilterAlbum": "Álbum",
|
||||
"@resourcesFilterAlbum": {},
|
||||
"resourcesFilterArtist": "Artista",
|
||||
"@resourcesFilterArtist": {},
|
||||
"resourcesFilterOwner": "Dono",
|
||||
"@resourcesFilterOwner": {},
|
||||
"resourcesFilterYear": "Ano",
|
||||
"@resourcesFilterYear": {},
|
||||
"resourcesPlaylistCount": "{count,plural, =1{{count} lista} other{{count} listas}}",
|
||||
"@resourcesPlaylistCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSongCount": "{count,plural, =1{{count} canción} other{{count} cancións}}",
|
||||
"@resourcesSongCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSongListDeleteAllContent": "Vas eliminar todas as cancións descargadas.",
|
||||
"@resourcesSongListDeleteAllContent": {},
|
||||
"resourcesSongListDeleteAllTitle": "Eliminar descargas?",
|
||||
"@resourcesSongListDeleteAllTitle": {},
|
||||
"resourcesSortByAlbum": "Álbum",
|
||||
"@resourcesSortByAlbum": {},
|
||||
"resourcesSortByAlbumCount": "Número de álbums",
|
||||
"@resourcesSortByAlbumCount": {},
|
||||
"settingsAboutActionsSupport": "Axuda ao desenvolvemento 💜",
|
||||
"@settingsAboutActionsSupport": {},
|
||||
"settingsNetworkOptionsOfflineMode": "Modo sen conexión",
|
||||
"@settingsNetworkOptionsOfflineMode": {},
|
||||
"settingsNetworkOptionsOfflineModeOff": "Usa internet para sincr. música.",
|
||||
"@settingsNetworkOptionsOfflineModeOff": {},
|
||||
"settingsNetworkOptionsOfflineModeOn": "Non usar internet para sincr. ou reproducir música.",
|
||||
"@settingsNetworkOptionsOfflineModeOn": {},
|
||||
"settingsNetworkOptionsStreamFormat": "Modo de reprodución preferido",
|
||||
"@settingsNetworkOptionsStreamFormat": {},
|
||||
"settingsNetworkOptionsStreamFormatServerDefault": "Usar por defecto do servidor",
|
||||
"@settingsNetworkOptionsStreamFormatServerDefault": {},
|
||||
"settingsServersFieldsName": "Nome",
|
||||
"@settingsServersFieldsName": {},
|
||||
"resourcesSortByTitle": "Título",
|
||||
"@resourcesSortByTitle": {},
|
||||
"resourcesSortByUpdated": "Actualizado recentemente",
|
||||
"@resourcesSortByUpdated": {}
|
||||
}
|
||||
|
||||
@@ -1,196 +1,230 @@
|
||||
{
|
||||
"actionsStar": "收藏",
|
||||
"@actionsStar": {},
|
||||
"actionsUnstar": "移除收藏",
|
||||
"@actionsUnstar": {},
|
||||
"messagesNothingHere": "什么都没有…",
|
||||
"@messagesNothingHere": {},
|
||||
"navigationTabsHome": "首页",
|
||||
"@navigationTabsHome": {},
|
||||
"navigationTabsLibrary": "所有",
|
||||
"@navigationTabsLibrary": {},
|
||||
"navigationTabsSearch": "搜索",
|
||||
"@navigationTabsSearch": {},
|
||||
"navigationTabsSettings": "设置",
|
||||
"@navigationTabsSettings": {},
|
||||
"resourcesAlbumActionsPlay": "播放专辑",
|
||||
"@resourcesAlbumActionsPlay": {},
|
||||
"resourcesAlbumActionsView": "查看专辑",
|
||||
"@resourcesAlbumActionsView": {},
|
||||
"resourcesAlbumListsSort": "专辑排序",
|
||||
"@resourcesAlbumListsSort": {},
|
||||
"resourcesAlbumName": "{count,plural, other{专辑}}",
|
||||
"@resourcesAlbumName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesArtistActionsView": "查看歌手",
|
||||
"@resourcesArtistActionsView": {},
|
||||
"resourcesArtistListsSort": "歌手排序",
|
||||
"@resourcesArtistListsSort": {},
|
||||
"resourcesArtistName": "{count,plural, other{歌手}}",
|
||||
"@resourcesArtistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesFilterGenre": "根据类型",
|
||||
"@resourcesFilterGenre": {},
|
||||
"resourcesFilterStarred": "已收藏",
|
||||
"@resourcesFilterStarred": {},
|
||||
"resourcesPlaylistActionsPlay": "全部播放",
|
||||
"@resourcesPlaylistActionsPlay": {},
|
||||
"resourcesPlaylistName": "{count,plural, other{播放列表}}",
|
||||
"@resourcesPlaylistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesQueueName": "{count,plural, other{队列}}",
|
||||
"@resourcesQueueName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSongListsArtistTopSongs": "热门歌曲",
|
||||
"@resourcesSongListsArtistTopSongs": {},
|
||||
"resourcesSongName": "{count,plural, other{歌曲}}",
|
||||
"@resourcesSongName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSortByAdded": "最近添加",
|
||||
"@resourcesSortByAdded": {},
|
||||
"resourcesSortByArtist": "根据歌手",
|
||||
"@resourcesSortByArtist": {},
|
||||
"resourcesSortByFrequentlyPlayed": "播放最多",
|
||||
"@resourcesSortByFrequentlyPlayed": {},
|
||||
"resourcesSortByName": "根据名称",
|
||||
"@resourcesSortByName": {},
|
||||
"resourcesSortByRandom": "随机",
|
||||
"@resourcesSortByRandom": {},
|
||||
"resourcesSortByRecentlyPlayed": "最近播放",
|
||||
"@resourcesSortByRecentlyPlayed": {},
|
||||
"resourcesSortByYear": "根据年份",
|
||||
"@resourcesSortByYear": {},
|
||||
"searchHeaderTitle": "搜索: {query}",
|
||||
"@searchHeaderTitle": {
|
||||
"placeholders": {
|
||||
"query": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"searchInputPlaceholder": "搜索",
|
||||
"@searchInputPlaceholder": {},
|
||||
"searchMoreResults": "更多…",
|
||||
"@searchMoreResults": {},
|
||||
"searchNowPlayingContext": "搜索结果",
|
||||
"@searchNowPlayingContext": {},
|
||||
"settingsAboutActionsLicenses": "许可",
|
||||
"@settingsAboutActionsLicenses": {},
|
||||
"settingsAboutActionsProjectHomepage": "项目地址",
|
||||
"@settingsAboutActionsProjectHomepage": {},
|
||||
"settingsAboutName": "关于",
|
||||
"@settingsAboutName": {},
|
||||
"settingsAboutVersion": "版本 {version}",
|
||||
"@settingsAboutVersion": {
|
||||
"placeholders": {
|
||||
"version": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsMusicName": "音乐",
|
||||
"@settingsMusicName": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOff": "不记录scrobble历史",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOff": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOn": "Scrobble播放历史",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOn": {},
|
||||
"settingsMusicOptionsScrobbleTitle": "Scrobble模式",
|
||||
"@settingsMusicOptionsScrobbleTitle": {},
|
||||
"settingsNetworkName": "网络",
|
||||
"@settingsNetworkName": {},
|
||||
"settingsNetworkOptionsMaxBitrateMobileTitle": "最大比特率 (3G/4G/5G)",
|
||||
"@settingsNetworkOptionsMaxBitrateMobileTitle": {},
|
||||
"settingsNetworkOptionsMaxBitrateWifiTitle": "最大比特率 (Wi-Fi)",
|
||||
"@settingsNetworkOptionsMaxBitrateWifiTitle": {},
|
||||
"settingsNetworkOptionsMaxBufferTitle": "最大缓冲时间",
|
||||
"@settingsNetworkOptionsMaxBufferTitle": {},
|
||||
"settingsNetworkOptionsMinBufferTitle": "最小缓冲时间",
|
||||
"@settingsNetworkOptionsMinBufferTitle": {},
|
||||
"settingsNetworkValuesKbps": "{value}kbps",
|
||||
"@settingsNetworkValuesKbps": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesSeconds": "{value} 秒",
|
||||
"@settingsNetworkValuesSeconds": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesUnlimitedKbps": "不限制",
|
||||
"@settingsNetworkValuesUnlimitedKbps": {},
|
||||
"settingsResetActionsClearImageCache": "清除图片缓存",
|
||||
"@settingsResetActionsClearImageCache": {},
|
||||
"settingsResetName": "重置",
|
||||
"@settingsResetName": {},
|
||||
"settingsServersActionsAdd": "添加服务器",
|
||||
"@settingsServersActionsAdd": {},
|
||||
"settingsServersActionsDelete": "删除",
|
||||
"@settingsServersActionsDelete": {},
|
||||
"settingsServersActionsEdit": "编辑服务器",
|
||||
"@settingsServersActionsEdit": {},
|
||||
"settingsServersActionsSave": "保存",
|
||||
"@settingsServersActionsSave": {},
|
||||
"settingsServersActionsTestConnection": "测试连接",
|
||||
"@settingsServersActionsTestConnection": {},
|
||||
"settingsServersFieldsAddress": "地址",
|
||||
"@settingsServersFieldsAddress": {},
|
||||
"settingsServersFieldsPassword": "密码",
|
||||
"@settingsServersFieldsPassword": {},
|
||||
"settingsServersFieldsUsername": "用户名",
|
||||
"@settingsServersFieldsUsername": {},
|
||||
"settingsServersMessagesConnectionFailed": "连接到 {address} 失败,检查设置或服务器",
|
||||
"@settingsServersMessagesConnectionFailed": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersMessagesConnectionOk": "连接到 {address} 正常!",
|
||||
"@settingsServersMessagesConnectionOk": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersName": "服务器",
|
||||
"@settingsServersName": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOff": "密码以 token + salt 加密发送",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOff": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOn": "密码以明文发送(不推荐,注意链接安全!)",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOn": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordTitle": "强制使用明文密码",
|
||||
"@settingsServersOptionsForcePlaintextPasswordTitle": {}
|
||||
}
|
||||
"actionsStar": "收藏",
|
||||
"@actionsStar": {},
|
||||
"actionsUnstar": "移除收藏",
|
||||
"@actionsUnstar": {},
|
||||
"messagesNothingHere": "什么都没有…",
|
||||
"@messagesNothingHere": {},
|
||||
"navigationTabsHome": "首页",
|
||||
"@navigationTabsHome": {},
|
||||
"navigationTabsLibrary": "所有",
|
||||
"@navigationTabsLibrary": {},
|
||||
"navigationTabsSearch": "搜索",
|
||||
"@navigationTabsSearch": {},
|
||||
"navigationTabsSettings": "设置",
|
||||
"@navigationTabsSettings": {},
|
||||
"resourcesAlbumActionsPlay": "播放专辑",
|
||||
"@resourcesAlbumActionsPlay": {},
|
||||
"resourcesAlbumActionsView": "查看专辑",
|
||||
"@resourcesAlbumActionsView": {},
|
||||
"resourcesAlbumListsSort": "专辑排序",
|
||||
"@resourcesAlbumListsSort": {},
|
||||
"resourcesAlbumName": "{count,plural, other{专辑}}",
|
||||
"@resourcesAlbumName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesArtistActionsView": "查看歌手",
|
||||
"@resourcesArtistActionsView": {},
|
||||
"resourcesArtistListsSort": "歌手排序",
|
||||
"@resourcesArtistListsSort": {},
|
||||
"resourcesArtistName": "{count,plural, other{歌手}}",
|
||||
"@resourcesArtistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesFilterGenre": "根据类型",
|
||||
"@resourcesFilterGenre": {},
|
||||
"resourcesFilterStarred": "已收藏",
|
||||
"@resourcesFilterStarred": {},
|
||||
"resourcesPlaylistActionsPlay": "全部播放",
|
||||
"@resourcesPlaylistActionsPlay": {},
|
||||
"resourcesPlaylistName": "{count,plural, other{播放列表}}",
|
||||
"@resourcesPlaylistName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesQueueName": "{count,plural, other{队列}}",
|
||||
"@resourcesQueueName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSongListsArtistTopSongs": "热门歌曲",
|
||||
"@resourcesSongListsArtistTopSongs": {},
|
||||
"resourcesSongName": "{count,plural, other{歌曲}}",
|
||||
"@resourcesSongName": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourcesSortByAdded": "最近添加",
|
||||
"@resourcesSortByAdded": {},
|
||||
"resourcesSortByArtist": "根据歌手",
|
||||
"@resourcesSortByArtist": {},
|
||||
"resourcesSortByFrequentlyPlayed": "播放最多",
|
||||
"@resourcesSortByFrequentlyPlayed": {},
|
||||
"resourcesSortByName": "根据名称",
|
||||
"@resourcesSortByName": {},
|
||||
"resourcesSortByRandom": "随机",
|
||||
"@resourcesSortByRandom": {},
|
||||
"resourcesSortByRecentlyPlayed": "最近播放",
|
||||
"@resourcesSortByRecentlyPlayed": {},
|
||||
"resourcesSortByYear": "根据年份",
|
||||
"@resourcesSortByYear": {},
|
||||
"searchHeaderTitle": "搜索: {query}",
|
||||
"@searchHeaderTitle": {
|
||||
"placeholders": {
|
||||
"query": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"searchInputPlaceholder": "搜索",
|
||||
"@searchInputPlaceholder": {},
|
||||
"searchMoreResults": "更多…",
|
||||
"@searchMoreResults": {},
|
||||
"searchNowPlayingContext": "搜索结果",
|
||||
"@searchNowPlayingContext": {},
|
||||
"settingsAboutActionsLicenses": "许可",
|
||||
"@settingsAboutActionsLicenses": {},
|
||||
"settingsAboutActionsProjectHomepage": "项目地址",
|
||||
"@settingsAboutActionsProjectHomepage": {},
|
||||
"settingsAboutName": "关于",
|
||||
"@settingsAboutName": {},
|
||||
"settingsAboutVersion": "版本 {version}",
|
||||
"@settingsAboutVersion": {
|
||||
"placeholders": {
|
||||
"version": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsMusicName": "音乐",
|
||||
"@settingsMusicName": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOff": "不记录scrobble历史",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOff": {},
|
||||
"settingsMusicOptionsScrobbleDescriptionOn": "Scrobble播放历史",
|
||||
"@settingsMusicOptionsScrobbleDescriptionOn": {},
|
||||
"settingsMusicOptionsScrobbleTitle": "Scrobble模式",
|
||||
"@settingsMusicOptionsScrobbleTitle": {},
|
||||
"settingsNetworkName": "网络",
|
||||
"@settingsNetworkName": {},
|
||||
"settingsNetworkOptionsMaxBitrateMobileTitle": "最大比特率 (3G/4G/5G)",
|
||||
"@settingsNetworkOptionsMaxBitrateMobileTitle": {},
|
||||
"settingsNetworkOptionsMaxBitrateWifiTitle": "最大比特率 (Wi-Fi)",
|
||||
"@settingsNetworkOptionsMaxBitrateWifiTitle": {},
|
||||
"settingsNetworkOptionsMaxBufferTitle": "最大缓冲时间",
|
||||
"@settingsNetworkOptionsMaxBufferTitle": {},
|
||||
"settingsNetworkOptionsMinBufferTitle": "最小缓冲时间",
|
||||
"@settingsNetworkOptionsMinBufferTitle": {},
|
||||
"settingsNetworkValuesKbps": "{value}kbps",
|
||||
"@settingsNetworkValuesKbps": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesSeconds": "{value} 秒",
|
||||
"@settingsNetworkValuesSeconds": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsNetworkValuesUnlimitedKbps": "不限制",
|
||||
"@settingsNetworkValuesUnlimitedKbps": {},
|
||||
"settingsResetActionsClearImageCache": "清除图片缓存",
|
||||
"@settingsResetActionsClearImageCache": {},
|
||||
"settingsResetName": "重置",
|
||||
"@settingsResetName": {},
|
||||
"settingsServersActionsAdd": "添加服务器",
|
||||
"@settingsServersActionsAdd": {},
|
||||
"settingsServersActionsDelete": "删除",
|
||||
"@settingsServersActionsDelete": {},
|
||||
"settingsServersActionsEdit": "编辑服务器",
|
||||
"@settingsServersActionsEdit": {},
|
||||
"settingsServersActionsSave": "保存",
|
||||
"@settingsServersActionsSave": {},
|
||||
"settingsServersActionsTestConnection": "测试连接",
|
||||
"@settingsServersActionsTestConnection": {},
|
||||
"settingsServersFieldsAddress": "地址",
|
||||
"@settingsServersFieldsAddress": {},
|
||||
"settingsServersFieldsPassword": "密码",
|
||||
"@settingsServersFieldsPassword": {},
|
||||
"settingsServersFieldsUsername": "用户名",
|
||||
"@settingsServersFieldsUsername": {},
|
||||
"settingsServersMessagesConnectionFailed": "连接到 {address} 失败,检查设置或服务器",
|
||||
"@settingsServersMessagesConnectionFailed": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersMessagesConnectionOk": "连接到 {address} 正常!",
|
||||
"@settingsServersMessagesConnectionOk": {
|
||||
"placeholders": {
|
||||
"address": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settingsServersName": "服务器",
|
||||
"@settingsServersName": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOff": "密码以 token + salt 加密发送",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOff": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordDescriptionOn": "密码以明文发送(不推荐,注意链接安全!)",
|
||||
"@settingsServersOptionsForcePlaintextPasswordDescriptionOn": {},
|
||||
"settingsServersOptionsForcePlaintextPasswordTitle": "强制使用明文密码",
|
||||
"@settingsServersOptionsForcePlaintextPasswordTitle": {},
|
||||
"actionsDownload": "下载",
|
||||
"@actionsDownload": {},
|
||||
"actionsDownloadCancel": "取消下载",
|
||||
"@actionsDownloadCancel": {},
|
||||
"actionsDownloadDelete": "删除已下载",
|
||||
"@actionsDownloadDelete": {},
|
||||
"actionsOk": "确定",
|
||||
"@actionsOk": {},
|
||||
"resourcesFilterArtist": "歌手",
|
||||
"@resourcesFilterArtist": {},
|
||||
"resourcesFilterOwner": "所有者",
|
||||
"@resourcesFilterOwner": {},
|
||||
"resourcesSongListDeleteAllTitle": "删除下载?",
|
||||
"@resourcesSongListDeleteAllTitle": {},
|
||||
"resourcesSortByAlbum": "专辑",
|
||||
"@resourcesSortByAlbum": {},
|
||||
"resourcesSortByAlbumCount": "专辑数量",
|
||||
"@resourcesSortByAlbumCount": {},
|
||||
"resourcesSortByUpdated": "最近添加",
|
||||
"@resourcesSortByUpdated": {},
|
||||
"settingsAboutActionsSupport": "支持开发者",
|
||||
"@settingsAboutActionsSupport": {},
|
||||
"resourcesFilterAlbum": "专辑",
|
||||
"@resourcesFilterAlbum": {},
|
||||
"resourcesSortByTitle": "标题",
|
||||
"@resourcesSortByTitle": {},
|
||||
"actionsCancel": "取消",
|
||||
"@actionsCancel": {},
|
||||
"actionsDelete": "删除",
|
||||
"@actionsDelete": {},
|
||||
"resourcesFilterYear": "年份",
|
||||
"@resourcesFilterYear": {},
|
||||
"resourcesSongListDeleteAllContent": "该操作会删除所有已下载的歌曲文件。",
|
||||
"@resourcesSongListDeleteAllContent": {}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,8 @@ enum QueueContextType {
|
||||
album('album'),
|
||||
playlist('playlist'),
|
||||
library('library'),
|
||||
genre('genre');
|
||||
genre('genre'),
|
||||
artist('artist');
|
||||
|
||||
const QueueContextType(this.value);
|
||||
final String value;
|
||||
|
||||
@@ -28,6 +28,7 @@ const _$QueueContextTypeEnumMap = {
|
||||
QueueContextType.playlist: 'playlist',
|
||||
QueueContextType.library: 'library',
|
||||
QueueContextType.genre: 'genre',
|
||||
QueueContextType.artist: 'artist',
|
||||
};
|
||||
|
||||
_$_MediaItemData _$$_MediaItemDataFromJson(Map<String, dynamic> json) =>
|
||||
|
||||
@@ -214,7 +214,7 @@ class DownloadService extends _$DownloadService {
|
||||
Future<void> deleteAll(int sourceId) async {
|
||||
final db = ref.read(databaseProvider);
|
||||
|
||||
final albumIds = await db.albumIdsWithDownloaded(sourceId).get();
|
||||
final albumIds = await db.albumIdsWithDownloadStatus(sourceId).get();
|
||||
for (var id in albumIds) {
|
||||
await deleteAlbum(await (db.albumById(sourceId, id)).getSingle());
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ part of 'download_service.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$downloadServiceHash() => r'92e963b5c070f4d1edb0cd81899b16393c2b9a70';
|
||||
String _$downloadServiceHash() => r'c72c49f980e307f3013467e76b6564d14a34a736';
|
||||
|
||||
/// See also [DownloadService].
|
||||
@ProviderFor(DownloadService)
|
||||
|
||||
@@ -31,7 +31,7 @@ class SyncService extends _$SyncService {
|
||||
final source = ref.read(musicSourceProvider);
|
||||
final db = ref.read(databaseProvider);
|
||||
|
||||
final ids = <String>[];
|
||||
final ids = <String>{};
|
||||
await for (var artists in source.allArtists()) {
|
||||
ids.addAll(artists.map((e) => e.id.value));
|
||||
await db.saveArtists(artists);
|
||||
@@ -44,7 +44,7 @@ class SyncService extends _$SyncService {
|
||||
final source = ref.read(musicSourceProvider);
|
||||
final db = ref.read(databaseProvider);
|
||||
|
||||
final ids = <String>[];
|
||||
final ids = <String>{};
|
||||
await for (var albums in source.allAlbums()) {
|
||||
ids.addAll(albums.map((e) => e.id.value));
|
||||
await db.saveAlbums(albums);
|
||||
@@ -57,7 +57,7 @@ class SyncService extends _$SyncService {
|
||||
final source = ref.read(musicSourceProvider);
|
||||
final db = ref.read(databaseProvider);
|
||||
|
||||
final ids = <String>[];
|
||||
final ids = <String>{};
|
||||
await for (var playlists in source.allPlaylists()) {
|
||||
ids.addAll(playlists.map((e) => e.playist.id.value));
|
||||
await db.savePlaylists(playlists);
|
||||
@@ -70,7 +70,7 @@ class SyncService extends _$SyncService {
|
||||
final source = ref.read(musicSourceProvider);
|
||||
final db = ref.read(databaseProvider);
|
||||
|
||||
final ids = <String>[];
|
||||
final ids = <String>{};
|
||||
await for (var songs in source.allSongs()) {
|
||||
ids.addAll(songs.map((e) => e.id.value));
|
||||
await db.saveSongs(songs);
|
||||
|
||||
@@ -6,7 +6,7 @@ part of 'sync_service.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$syncServiceHash() => r'2b8da374c3143bc56f17115440d57bc70468a17e';
|
||||
String _$syncServiceHash() => r'58ebee4e6f055b64ee6789ae43d63c0e15c679e0';
|
||||
|
||||
/// See also [SyncService].
|
||||
@ProviderFor(SyncService)
|
||||
|
||||
@@ -82,10 +82,4 @@ class MusicSource implements BaseMusicSource {
|
||||
|
||||
@override
|
||||
Uri streamUri(String songId) => _source.streamUri(songId);
|
||||
|
||||
@override
|
||||
bool operator ==(other) => other is BaseMusicSource && (other.id == id);
|
||||
|
||||
@override
|
||||
int get hashCode => id;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ homepage: https://github.com/austinried/subtracks
|
||||
repository: https://github.com/austinried/subtracks
|
||||
issue_tracker: https://github.com/austinried/subtracks/issues
|
||||
publish_to: 'none'
|
||||
version: 2.0.0-alpha.1+10
|
||||
version: 2.0.0-alpha.2+11
|
||||
|
||||
environment:
|
||||
sdk: '>=2.19.2 <3.0.0'
|
||||
|
||||
Reference in New Issue
Block a user