diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index fdf5821..120fd5a 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_bn.arb b/lib/l10n/app_bn.arb index fba708b..953700b 100644 --- a/lib/l10n/app_bn.arb +++ b/lib/l10n/app_bn.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 813d48b..f35070f 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 57a124a..714164a 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index c6e79f3..0792015 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Listas de favoritos", + "favoriteGroupsDescription": "Cre? listas cortas para organizar tus emisoras guardadas.", + "favoriteGroupsAdd": "A?adir lista", + "favoriteGroupsEdit": "Editar lista", + "favoriteGroupsDelete": "Eliminar lista", + "favoriteGroupsNameLabel": "Nombre de la lista", + "favoriteGroupsNameTooLong": "M?ximo 28 caracteres.", + "favoriteGroupsUnassigned": "Sin asignar", + "favoriteGroupsProtectedHint": "Lista por defecto: no se puede editar ni borrar.", + "favoriteGroupsCreated": "Lista creada", + "favoriteGroupsUpdated": "Lista actualizada", + "favoriteGroupsDeleted": "Lista eliminada; sus emisoras vuelven a Sin asignar.", + "favoriteGroupsAssign": "Mover a lista", + "favoriteGroupsAssignSubtitle": "Lista actual: {groupName}", + "favoriteGroupsAssigned": "{stationName} movida a {groupName}", + "favoritesTitle": "Favoritos", + "favoritesEmptyTitle": "Sin favoritos a?n", + "favoritesEmptySubtitle": "Toc? el coraz?n en cualquier emisora para guardarla en tu colecci?n.", + "favoritesHeaderSubtitle": "Organiz? tu colecci?n por listas y dej? cerca las radios importantes.", + "favoritesCollection": "Colecci?n", + "favoritesSavedCount": "{count} guardadas", + "favoritesRemoveTooltip": "Eliminar de favoritos", + "favoritesRemovedMessage": "{stationName} eliminada de favoritos", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 06485c3..4f2c7c0 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb index fe21478..6008bba 100644 --- a/lib/l10n/app_hi.arb +++ b/lib/l10n/app_hi.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index 13c5be7..301a85c 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 56c0be7..a86cc2f 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index 0d0711d..0ceef04 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index e114316..ce044a4 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 4ede2f1..80dbcde 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 75ecd71..9dd5899 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -175,5 +175,51 @@ "type": "int" } } + }, + "favoriteGroupsTitle": "Favorite lists", + "favoriteGroupsDescription": "Create short lists to organize your saved stations.", + "favoriteGroupsAdd": "Add list", + "favoriteGroupsEdit": "Edit list", + "favoriteGroupsDelete": "Delete list", + "favoriteGroupsNameLabel": "List name", + "favoriteGroupsNameTooLong": "Maximum 28 characters.", + "favoriteGroupsUnassigned": "Unassigned", + "favoriteGroupsProtectedHint": "Default list: it cannot be edited or deleted.", + "favoriteGroupsCreated": "List created", + "favoriteGroupsUpdated": "List updated", + "favoriteGroupsDeleted": "List deleted; its stations return to Unassigned.", + "favoriteGroupsAssign": "Move to list", + "favoriteGroupsAssignSubtitle": "Current list: {groupName}", + "favoriteGroupsAssigned": "{stationName} moved to {groupName}", + "favoritesTitle": "Favorites", + "favoritesEmptyTitle": "No favorites yet", + "favoritesEmptySubtitle": "Tap the heart on any station to save it to your collection.", + "favoritesHeaderSubtitle": "Organize your collection by lists and keep important radios close.", + "favoritesCollection": "Collection", + "favoritesSavedCount": "{count} saved", + "favoritesRemoveTooltip": "Remove from favorites", + "favoritesRemovedMessage": "{stationName} removed from favorites", + "@favoriteGroupsAssignSubtitle": { + "placeholders": { + "groupName": {} + } + }, + "@favoriteGroupsAssigned": { + "placeholders": { + "stationName": {}, + "groupName": {} + } + }, + "@favoritesSavedCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "@favoritesRemovedMessage": { + "placeholders": { + "stationName": {} + } } } diff --git a/lib/l10n/gen/app_localizations.dart b/lib/l10n/gen/app_localizations.dart index 73a65a9..b5277ce 100644 --- a/lib/l10n/gen/app_localizations.dart +++ b/lib/l10n/gen/app_localizations.dart @@ -731,6 +731,144 @@ abstract class AppLocalizations { /// In es, this message translates to: /// **'Límite de grabación actualizado a {size} MB'** String recordingsMaxSizeSaved(int size); + + /// No description provided for @favoriteGroupsTitle. + /// + /// In es, this message translates to: + /// **'Listas de favoritos'** + String get favoriteGroupsTitle; + + /// No description provided for @favoriteGroupsDescription. + /// + /// In es, this message translates to: + /// **'Cre? listas cortas para organizar tus emisoras guardadas.'** + String get favoriteGroupsDescription; + + /// No description provided for @favoriteGroupsAdd. + /// + /// In es, this message translates to: + /// **'A?adir lista'** + String get favoriteGroupsAdd; + + /// No description provided for @favoriteGroupsEdit. + /// + /// In es, this message translates to: + /// **'Editar lista'** + String get favoriteGroupsEdit; + + /// No description provided for @favoriteGroupsDelete. + /// + /// In es, this message translates to: + /// **'Eliminar lista'** + String get favoriteGroupsDelete; + + /// No description provided for @favoriteGroupsNameLabel. + /// + /// In es, this message translates to: + /// **'Nombre de la lista'** + String get favoriteGroupsNameLabel; + + /// No description provided for @favoriteGroupsNameTooLong. + /// + /// In es, this message translates to: + /// **'M?ximo 28 caracteres.'** + String get favoriteGroupsNameTooLong; + + /// No description provided for @favoriteGroupsUnassigned. + /// + /// In es, this message translates to: + /// **'Sin asignar'** + String get favoriteGroupsUnassigned; + + /// No description provided for @favoriteGroupsProtectedHint. + /// + /// In es, this message translates to: + /// **'Lista por defecto: no se puede editar ni borrar.'** + String get favoriteGroupsProtectedHint; + + /// No description provided for @favoriteGroupsCreated. + /// + /// In es, this message translates to: + /// **'Lista creada'** + String get favoriteGroupsCreated; + + /// No description provided for @favoriteGroupsUpdated. + /// + /// In es, this message translates to: + /// **'Lista actualizada'** + String get favoriteGroupsUpdated; + + /// No description provided for @favoriteGroupsDeleted. + /// + /// In es, this message translates to: + /// **'Lista eliminada; sus emisoras vuelven a Sin asignar.'** + String get favoriteGroupsDeleted; + + /// No description provided for @favoriteGroupsAssign. + /// + /// In es, this message translates to: + /// **'Mover a lista'** + String get favoriteGroupsAssign; + + /// No description provided for @favoriteGroupsAssignSubtitle. + /// + /// In es, this message translates to: + /// **'Lista actual: {groupName}'** + String favoriteGroupsAssignSubtitle(Object groupName); + + /// No description provided for @favoriteGroupsAssigned. + /// + /// In es, this message translates to: + /// **'{stationName} movida a {groupName}'** + String favoriteGroupsAssigned(Object stationName, Object groupName); + + /// No description provided for @favoritesTitle. + /// + /// In es, this message translates to: + /// **'Favoritos'** + String get favoritesTitle; + + /// No description provided for @favoritesEmptyTitle. + /// + /// In es, this message translates to: + /// **'Sin favoritos a?n'** + String get favoritesEmptyTitle; + + /// No description provided for @favoritesEmptySubtitle. + /// + /// In es, this message translates to: + /// **'Toc? el coraz?n en cualquier emisora para guardarla en tu colecci?n.'** + String get favoritesEmptySubtitle; + + /// No description provided for @favoritesHeaderSubtitle. + /// + /// In es, this message translates to: + /// **'Organiz? tu colecci?n por listas y dej? cerca las radios importantes.'** + String get favoritesHeaderSubtitle; + + /// No description provided for @favoritesCollection. + /// + /// In es, this message translates to: + /// **'Colecci?n'** + String get favoritesCollection; + + /// No description provided for @favoritesSavedCount. + /// + /// In es, this message translates to: + /// **'{count} guardadas'** + String favoritesSavedCount(int count); + + /// No description provided for @favoritesRemoveTooltip. + /// + /// In es, this message translates to: + /// **'Eliminar de favoritos'** + String get favoritesRemoveTooltip; + + /// No description provided for @favoritesRemovedMessage. + /// + /// In es, this message translates to: + /// **'{stationName} eliminada de favoritos'** + String favoritesRemovedMessage(Object stationName); } class _AppLocalizationsDelegate diff --git a/lib/l10n/gen/app_localizations_ar.dart b/lib/l10n/gen/app_localizations_ar.dart index 9affbc2..99cb33d 100644 --- a/lib/l10n/gen/app_localizations_ar.dart +++ b/lib/l10n/gen/app_localizations_ar.dart @@ -353,4 +353,86 @@ class AppLocalizationsAr extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/l10n/gen/app_localizations_bn.dart b/lib/l10n/gen/app_localizations_bn.dart index 4b9757f..c19c9ff 100644 --- a/lib/l10n/gen/app_localizations_bn.dart +++ b/lib/l10n/gen/app_localizations_bn.dart @@ -353,4 +353,86 @@ class AppLocalizationsBn extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/l10n/gen/app_localizations_de.dart b/lib/l10n/gen/app_localizations_de.dart index 25ac375..bee97b4 100644 --- a/lib/l10n/gen/app_localizations_de.dart +++ b/lib/l10n/gen/app_localizations_de.dart @@ -353,4 +353,86 @@ class AppLocalizationsDe extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/l10n/gen/app_localizations_en.dart b/lib/l10n/gen/app_localizations_en.dart index 3402588..ce9ce63 100644 --- a/lib/l10n/gen/app_localizations_en.dart +++ b/lib/l10n/gen/app_localizations_en.dart @@ -353,4 +353,86 @@ class AppLocalizationsEn extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/l10n/gen/app_localizations_es.dart b/lib/l10n/gen/app_localizations_es.dart index 8ae2e09..3adcea9 100644 --- a/lib/l10n/gen/app_localizations_es.dart +++ b/lib/l10n/gen/app_localizations_es.dart @@ -356,4 +356,86 @@ class AppLocalizationsEs extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Límite de grabación actualizado a $size MB'; } + + @override + String get favoriteGroupsTitle => 'Listas de favoritos'; + + @override + String get favoriteGroupsDescription => + 'Cre? listas cortas para organizar tus emisoras guardadas.'; + + @override + String get favoriteGroupsAdd => 'A?adir lista'; + + @override + String get favoriteGroupsEdit => 'Editar lista'; + + @override + String get favoriteGroupsDelete => 'Eliminar lista'; + + @override + String get favoriteGroupsNameLabel => 'Nombre de la lista'; + + @override + String get favoriteGroupsNameTooLong => 'M?ximo 28 caracteres.'; + + @override + String get favoriteGroupsUnassigned => 'Sin asignar'; + + @override + String get favoriteGroupsProtectedHint => + 'Lista por defecto: no se puede editar ni borrar.'; + + @override + String get favoriteGroupsCreated => 'Lista creada'; + + @override + String get favoriteGroupsUpdated => 'Lista actualizada'; + + @override + String get favoriteGroupsDeleted => + 'Lista eliminada; sus emisoras vuelven a Sin asignar.'; + + @override + String get favoriteGroupsAssign => 'Mover a lista'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Lista actual: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName movida a $groupName'; + } + + @override + String get favoritesTitle => 'Favoritos'; + + @override + String get favoritesEmptyTitle => 'Sin favoritos a?n'; + + @override + String get favoritesEmptySubtitle => + 'Toc? el coraz?n en cualquier emisora para guardarla en tu colecci?n.'; + + @override + String get favoritesHeaderSubtitle => + 'Organiz? tu colecci?n por listas y dej? cerca las radios importantes.'; + + @override + String get favoritesCollection => 'Colecci?n'; + + @override + String favoritesSavedCount(int count) { + return '$count guardadas'; + } + + @override + String get favoritesRemoveTooltip => 'Eliminar de favoritos'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName eliminada de favoritos'; + } } diff --git a/lib/l10n/gen/app_localizations_fr.dart b/lib/l10n/gen/app_localizations_fr.dart index 8296630..2e864e6 100644 --- a/lib/l10n/gen/app_localizations_fr.dart +++ b/lib/l10n/gen/app_localizations_fr.dart @@ -353,4 +353,86 @@ class AppLocalizationsFr extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/l10n/gen/app_localizations_hi.dart b/lib/l10n/gen/app_localizations_hi.dart index 4d74b94..7ac32e2 100644 --- a/lib/l10n/gen/app_localizations_hi.dart +++ b/lib/l10n/gen/app_localizations_hi.dart @@ -353,4 +353,86 @@ class AppLocalizationsHi extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/l10n/gen/app_localizations_id.dart b/lib/l10n/gen/app_localizations_id.dart index 8562111..002e551 100644 --- a/lib/l10n/gen/app_localizations_id.dart +++ b/lib/l10n/gen/app_localizations_id.dart @@ -352,4 +352,86 @@ class AppLocalizationsId extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/l10n/gen/app_localizations_it.dart b/lib/l10n/gen/app_localizations_it.dart index 62ac623..7ca3405 100644 --- a/lib/l10n/gen/app_localizations_it.dart +++ b/lib/l10n/gen/app_localizations_it.dart @@ -353,4 +353,86 @@ class AppLocalizationsIt extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/l10n/gen/app_localizations_ja.dart b/lib/l10n/gen/app_localizations_ja.dart index 04f50e8..2fe320b 100644 --- a/lib/l10n/gen/app_localizations_ja.dart +++ b/lib/l10n/gen/app_localizations_ja.dart @@ -353,4 +353,86 @@ class AppLocalizationsJa extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/l10n/gen/app_localizations_pt.dart b/lib/l10n/gen/app_localizations_pt.dart index af3ecb8..5c0c096 100644 --- a/lib/l10n/gen/app_localizations_pt.dart +++ b/lib/l10n/gen/app_localizations_pt.dart @@ -353,4 +353,86 @@ class AppLocalizationsPt extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/l10n/gen/app_localizations_ru.dart b/lib/l10n/gen/app_localizations_ru.dart index efa48d6..3204dac 100644 --- a/lib/l10n/gen/app_localizations_ru.dart +++ b/lib/l10n/gen/app_localizations_ru.dart @@ -353,4 +353,86 @@ class AppLocalizationsRu extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/l10n/gen/app_localizations_zh.dart b/lib/l10n/gen/app_localizations_zh.dart index 7614b9a..87f604e 100644 --- a/lib/l10n/gen/app_localizations_zh.dart +++ b/lib/l10n/gen/app_localizations_zh.dart @@ -353,4 +353,86 @@ class AppLocalizationsZh extends AppLocalizations { String recordingsMaxSizeSaved(int size) { return 'Recording limit updated to $size MB'; } + + @override + String get favoriteGroupsTitle => 'Favorite lists'; + + @override + String get favoriteGroupsDescription => + 'Create short lists to organize your saved stations.'; + + @override + String get favoriteGroupsAdd => 'Add list'; + + @override + String get favoriteGroupsEdit => 'Edit list'; + + @override + String get favoriteGroupsDelete => 'Delete list'; + + @override + String get favoriteGroupsNameLabel => 'List name'; + + @override + String get favoriteGroupsNameTooLong => 'Maximum 28 characters.'; + + @override + String get favoriteGroupsUnassigned => 'Unassigned'; + + @override + String get favoriteGroupsProtectedHint => + 'Default list: it cannot be edited or deleted.'; + + @override + String get favoriteGroupsCreated => 'List created'; + + @override + String get favoriteGroupsUpdated => 'List updated'; + + @override + String get favoriteGroupsDeleted => + 'List deleted; its stations return to Unassigned.'; + + @override + String get favoriteGroupsAssign => 'Move to list'; + + @override + String favoriteGroupsAssignSubtitle(Object groupName) { + return 'Current list: $groupName'; + } + + @override + String favoriteGroupsAssigned(Object stationName, Object groupName) { + return '$stationName moved to $groupName'; + } + + @override + String get favoritesTitle => 'Favorites'; + + @override + String get favoritesEmptyTitle => 'No favorites yet'; + + @override + String get favoritesEmptySubtitle => + 'Tap the heart on any station to save it to your collection.'; + + @override + String get favoritesHeaderSubtitle => + 'Organize your collection by lists and keep important radios close.'; + + @override + String get favoritesCollection => 'Collection'; + + @override + String favoritesSavedCount(int count) { + return '$count saved'; + } + + @override + String get favoritesRemoveTooltip => 'Remove from favorites'; + + @override + String favoritesRemovedMessage(Object stationName) { + return '$stationName removed from favorites'; + } } diff --git a/lib/pantallas/pantalla_ajustes.dart b/lib/pantallas/pantalla_ajustes.dart index df337d7..f42d051 100644 --- a/lib/pantallas/pantalla_ajustes.dart +++ b/lib/pantallas/pantalla_ajustes.dart @@ -13,6 +13,7 @@ import '../estado/estado_idioma.dart'; import '../estado/estado_radio.dart'; import '../l10n/gen/app_localizations.dart'; import '../modelos/emisora.dart'; +import '../modelos/grupo_favoritos.dart'; import '../widgets/ecualizador_widget.dart'; import '../widgets/pluri_glass_surface.dart'; import '../widgets/pluri_icon.dart'; @@ -64,6 +65,8 @@ class _AjustesContent extends StatelessWidget { SizedBox(height: 12), _SeccionOrdenListas(), SizedBox(height: 12), + _SeccionGruposFavoritos(), + SizedBox(height: 12), _SeccionEmisoraPreferida(), SizedBox(height: 12), _SeccionEmisoras(), @@ -693,6 +696,141 @@ class _SeccionOrdenListas extends StatelessWidget { } } +class _SeccionGruposFavoritos extends StatelessWidget { + const _SeccionGruposFavoritos(); + + Future _editarGrupo(BuildContext context, [GrupoFavoritos? grupo]) async { + final l10n = AppLocalizations.of(context); + final controller = TextEditingController(text: grupo?.nombre ?? ''); + final nombre = await showModalBottomSheet( + context: context, + isScrollControlled: true, + showDragHandle: true, + builder: (ctx) { + final bottom = MediaQuery.viewInsetsOf(ctx).bottom; + return Padding( + padding: EdgeInsets.fromLTRB(20, 0, 20, bottom + 24), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + grupo == null ? l10n.favoriteGroupsAdd : l10n.favoriteGroupsEdit, + style: Theme.of(ctx).textTheme.titleLarge, + ), + const SizedBox(height: 16), + TextField( + controller: controller, + autofocus: true, + maxLength: 28, + decoration: InputDecoration( + labelText: l10n.favoriteGroupsNameLabel, + helperText: l10n.favoriteGroupsNameTooLong, + border: const OutlineInputBorder(), + ), + ), + const SizedBox(height: 12), + FilledButton.icon( + icon: const Icon(Icons.save_rounded), + label: Text(AppLocalizations.of(ctx).saveQuickAccessButton), + onPressed: () { + final value = controller.text.trim(); + if (value.isEmpty || value.length > 28) return; + Navigator.pop(ctx, value); + }, + ), + ], + ), + ); + }, + ); + controller.dispose(); + if (nombre == null || !context.mounted) return; + final estado = context.read(); + if (grupo == null) { + await estado.crearGrupoFavoritos(nombre); + } else { + await estado.renombrarGrupoFavoritos(grupo.id, nombre); + } + if (!context.mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(grupo == null ? l10n.favoriteGroupsCreated : l10n.favoriteGroupsUpdated)), + ); + } + + Future _eliminarGrupo(BuildContext context, GrupoFavoritos grupo) async { + final l10n = AppLocalizations.of(context); + await context.read().eliminarGrupoFavoritos(grupo.id); + if (!context.mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(l10n.favoriteGroupsDeleted)), + ); + } + + String _nombreVisible(AppLocalizations l10n, GrupoFavoritos grupo) => + grupo.esSinAsignar ? l10n.favoriteGroupsUnassigned : grupo.nombre; + + @override + Widget build(BuildContext context) { + final estado = context.watch(); + final l10n = AppLocalizations.of(context); + final grupos = estado.gruposFavoritos; + return PluriGlassSurface( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + const Icon(Icons.playlist_add_check_circle_rounded), + const SizedBox(width: 12), + Expanded( + child: Text( + l10n.favoriteGroupsTitle, + style: Theme.of(context).textTheme.titleMedium, + ), + ), + TextButton.icon( + icon: const Icon(Icons.add_rounded), + label: Text(l10n.favoriteGroupsAdd), + onPressed: () => _editarGrupo(context), + ), + ], + ), + const SizedBox(height: 4), + Text(l10n.favoriteGroupsDescription), + const SizedBox(height: 8), + for (final grupo in grupos) + ListTile( + contentPadding: EdgeInsets.zero, + leading: Icon( + grupo.esSinAsignar ? Icons.lock_rounded : Icons.folder_rounded, + ), + title: Text(_nombreVisible(l10n, grupo)), + subtitle: grupo.esSinAsignar ? Text(l10n.favoriteGroupsProtectedHint) : null, + trailing: grupo.esSinAsignar + ? null + : Wrap( + spacing: 4, + children: [ + IconButton( + tooltip: l10n.favoriteGroupsEdit, + icon: const Icon(Icons.edit_rounded), + onPressed: () => _editarGrupo(context, grupo), + ), + IconButton( + tooltip: l10n.favoriteGroupsDelete, + icon: const Icon(Icons.delete_outline_rounded), + onPressed: () => _eliminarGrupo(context, grupo), + ), + ], + ), + ), + ], + ), + ); + } +} + class _SeccionEmisoraPreferida extends StatelessWidget { const _SeccionEmisoraPreferida(); diff --git a/lib/pantallas/pantalla_favoritos.dart b/lib/pantallas/pantalla_favoritos.dart index bbaf9d0..001e6a9 100644 --- a/lib/pantallas/pantalla_favoritos.dart +++ b/lib/pantallas/pantalla_favoritos.dart @@ -2,6 +2,9 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../estado/estado_radio.dart'; +import '../l10n/gen/app_localizations.dart'; +import '../modelos/emisora.dart'; +import '../modelos/grupo_favoritos.dart'; import '../widgets/pluri_glass_surface.dart'; import '../widgets/pluri_icon.dart'; import '../widgets/pluri_layout.dart'; @@ -17,107 +20,250 @@ class PantallaFavoritos extends StatelessWidget { Widget build(BuildContext context) { final estado = context.watch(); final favoritos = estado.listaFavoritos; + final grupos = estado.gruposFavoritos; + final l10n = AppLocalizations.of(context); if (favoritos.isEmpty) { return ListView( padding: PluriLayout.pageListPadding, children: [ PluriScreenHeader( - title: 'Favoritos', - subtitle: 'Tu cabina personal para volver a las senales que mas escuchas.', + title: l10n.favoritesTitle, + subtitle: l10n.favoritesHeaderSubtitle, glyph: PluriIconGlyph.favorites, trailing: PluriStatusPill( icon: Icons.favorite_rounded, - label: 'Coleccion', + label: l10n.favoritesCollection, ), ), SizedBox( height: 320, child: PluriEmptyState( glyph: PluriIconGlyph.favorites, - title: 'Sin favoritos aun', - subtitle: 'Toca el corazon en cualquier emisora para guardarla en tu coleccion.', + title: l10n.favoritesEmptyTitle, + subtitle: l10n.favoritesEmptySubtitle, ), ), ], ); } + final gruposVisibles = grupos.isEmpty + ? const [ + GrupoFavoritos( + id: GrupoFavoritos.sinAsignarId, + nombre: 'Sin asignar', + orden: 0, + protegido: true, + ), + ] + : grupos; + return CustomScrollView( slivers: [ SliverToBoxAdapter( child: PluriScreenHeader( - title: 'Favoritos', - subtitle: 'Reordena tu coleccion y deja arriba las radios que mas importan.', + title: l10n.favoritesTitle, + subtitle: l10n.favoritesHeaderSubtitle, glyph: PluriIconGlyph.favorites, trailing: PluriStatusPill( icon: Icons.library_music_rounded, - label: '${favoritos.length} guardadas', + label: l10n.favoritesSavedCount(favoritos.length), ), ), ), SliverPadding( - padding: const EdgeInsets.fromLTRB(PluriLayout.horizontal, 4, PluriLayout.horizontal, PluriLayout.bottomChromeInset), - sliver: SliverReorderableList( - proxyDecorator: (child, index, animation) => ScaleTransition( - scale: Tween(begin: 1, end: 1.03).animate(animation), - child: child, - ), - // ignore: deprecated_member_use - onReorder: (oldIndex, newIndex) async { - if (newIndex > oldIndex) newIndex--; - final emisora = favoritos[oldIndex]; - await estado.favoritos.reordenar(emisora.uuid, newIndex); - await estado.cargarFavoritos(); - }, - itemCount: favoritos.length, - itemBuilder: (context, i) { - final emisora = favoritos[i]; - return Padding( - key: ValueKey('favorito-pad-${emisora.uuid}'), - padding: const EdgeInsets.symmetric(vertical: 5), - child: PluriGlassSurface( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 7), - child: Row( - children: [ - ReorderableDragStartListener( - index: i, - child: const Padding( - padding: EdgeInsets.all(8), - child: Icon(Icons.drag_indicator_rounded), - ), - ), - Expanded( - child: TarjetaEmisora( - key: Key(emisora.uuid), - emisora: emisora, - esCompacta: true, - onTap: () => reproducirMinimizado(context, emisora), - ), - ), - IconButton.filledTonal( - tooltip: 'Eliminar de favoritos', - icon: const Icon(Icons.delete_outline_rounded), - onPressed: () async { - await estado.favoritos.eliminar(emisora.uuid); - await estado.cargarFavoritos(); - if (context.mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text('${emisora.nombre} eliminada de favoritos'), - ), - ); - } - }, - ), - ], - ), + padding: const EdgeInsets.fromLTRB( + PluriLayout.horizontal, + 4, + PluriLayout.horizontal, + PluriLayout.bottomChromeInset, + ), + sliver: SliverList( + delegate: SliverChildListDelegate([ + for (final grupo in gruposVisibles) ...[ + _GrupoFavoritosPanel( + grupo: grupo, + grupos: gruposVisibles, + emisoras: favoritos + .where((e) => e.grupoFavoritosId == grupo.id) + .toList(), ), - ); - }, + const SizedBox(height: 12), + ], + ]), ), ), ], ); } } + +class _GrupoFavoritosPanel extends StatelessWidget { + const _GrupoFavoritosPanel({ + required this.grupo, + required this.grupos, + required this.emisoras, + }); + + final GrupoFavoritos grupo; + final List grupos; + final List emisoras; + + String _nombreVisible(AppLocalizations l10n, GrupoFavoritos grupo) => + grupo.esSinAsignar ? l10n.favoriteGroupsUnassigned : grupo.nombre; + + @override + Widget build(BuildContext context) { + final l10n = AppLocalizations.of(context); + final theme = Theme.of(context); + return PluriGlassSurface( + padding: const EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Icon(grupo.esSinAsignar ? Icons.lock_rounded : Icons.folder_rounded), + const SizedBox(width: 8), + Expanded( + child: Text( + _nombreVisible(l10n, grupo), + style: theme.textTheme.titleMedium?.copyWith( + fontWeight: FontWeight.w900, + ), + ), + ), + Text('${emisoras.length}'), + ], + ), + const SizedBox(height: 8), + if (emisoras.isEmpty) + Padding( + padding: const EdgeInsets.only(bottom: 4), + child: Text( + l10n.favoritesEmptyTitle, + style: theme.textTheme.bodySmall, + ), + ) + else + for (var i = 0; i < emisoras.length; i++) ...[ + _FavoritoItem( + emisora: emisoras[i], + grupos: grupos, + grupoActual: grupo, + ), + if (i < emisoras.length - 1) const SizedBox(height: 8), + ], + ], + ), + ); + } +} + +class _FavoritoItem extends StatelessWidget { + const _FavoritoItem({ + required this.emisora, + required this.grupos, + required this.grupoActual, + }); + + final Emisora emisora; + final List grupos; + final GrupoFavoritos grupoActual; + + String _nombreVisible(AppLocalizations l10n, GrupoFavoritos grupo) => + grupo.esSinAsignar ? l10n.favoriteGroupsUnassigned : grupo.nombre; + + Future _asignar(BuildContext context) async { + final l10n = AppLocalizations.of(context); + final seleccionado = await showModalBottomSheet( + context: context, + showDragHandle: true, + builder: (ctx) => SafeArea( + child: ListView( + shrinkWrap: true, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(20, 4, 20, 12), + child: Text( + l10n.favoriteGroupsAssign, + style: Theme.of(ctx).textTheme.titleLarge, + ), + ), + for (final grupo in grupos) + ListTile( + leading: Icon( + grupo.id == emisora.grupoFavoritosId + ? Icons.radio_button_checked_rounded + : Icons.radio_button_off_rounded, + ), + title: Text(_nombreVisible(l10n, grupo)), + onTap: () => Navigator.pop(ctx, grupo.id), + ), + ], + ), + ), + ); + if (seleccionado == null || !context.mounted) return; + await context.read().asignarGrupoFavorito( + emisora.uuid, + seleccionado, + ); + if (!context.mounted) return; + final destino = grupos.firstWhere((g) => g.id == seleccionado); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + l10n.favoriteGroupsAssigned(emisora.nombre, _nombreVisible(l10n, destino)), + ), + ), + ); + } + + Future _eliminar(BuildContext context) async { + final l10n = AppLocalizations.of(context); + final estado = context.read(); + await estado.favoritos.eliminar(emisora.uuid); + await estado.cargarFavoritos(); + if (!context.mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(l10n.favoritesRemovedMessage(emisora.nombre))), + ); + } + + @override + Widget build(BuildContext context) { + final l10n = AppLocalizations.of(context); + return Row( + children: [ + Expanded( + child: TarjetaEmisora( + key: Key(emisora.uuid), + emisora: emisora, + esCompacta: true, + onTap: () => reproducirMinimizado(context, emisora), + ), + ), + const SizedBox(width: 6), + Column( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton.filledTonal( + tooltip: l10n.favoriteGroupsAssignSubtitle( + _nombreVisible(l10n, grupoActual), + ), + icon: const Icon(Icons.drive_file_move_rounded), + onPressed: () => _asignar(context), + ), + IconButton.filledTonal( + tooltip: l10n.favoritesRemoveTooltip, + icon: const Icon(Icons.delete_outline_rounded), + onPressed: () => _eliminar(context), + ), + ], + ), + ], + ); + } +}