Skip to content

Commit

Permalink
feat: add client switching feature
Browse files Browse the repository at this point in the history
  • Loading branch information
gokadzev committed Jan 22, 2025
1 parent bfd5d06 commit 974a1da
Show file tree
Hide file tree
Showing 21 changed files with 108 additions and 5 deletions.
23 changes: 18 additions & 5 deletions lib/API/musify.dart
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ Map activePlaylist = {
'list': [],
};

List<YoutubeApiClient> userChosenClients = [
YoutubeApiClient.tv,
YoutubeApiClient.androidVr,
YoutubeApiClient.safari,
];

dynamic nextRecommendedSong;

final currentLikedSongsLength = ValueNotifier<int>(userLikedSongsList.length);
Expand Down Expand Up @@ -614,15 +620,22 @@ Future<Map?> getPlaylistInfoForWidget(
}
}

final clients = {
'tv': YoutubeApiClient.tv,
'androidVr': YoutubeApiClient.androidVr,
'safari': YoutubeApiClient.safari,
'ios': YoutubeApiClient.ios,
'android': YoutubeApiClient.android,
'androidMusic': YoutubeApiClient.androidMusic,
'mediaConnect': YoutubeApiClient.mediaConnect,
'web': YoutubeApiClient.mweb,
};

Future<AudioOnlyStreamInfo> getSongManifest(String songId) async {
try {
final manifest = await _yt.videos.streams.getManifest(
songId,
ytClients: [
YoutubeApiClient.tv,
YoutubeApiClient.androidVr,
YoutubeApiClient.safari,
],
ytClients: userChosenClients,
);
final audioStream = manifest.audioOnly.withHighestBitrate();
return audioStream;
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_ar.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Clear recently played history?",
"clearSearchHistory": "امسح سجل البحث",
"clearSearchHistoryQuestion": "Clear search history?",
"client": "Client",
"confirm": "تأكيد",
"confirmation": "تأكيد",
"copyLogs": "نسخ السجلات",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_de.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Wiedergabeverlauf löschen?",
"clearSearchHistory": "Suchverlauf löschen",
"clearSearchHistoryQuestion": "Suchverlauf löschen?",
"client": "Client",
"confirm": "Bestätigen",
"confirmation": "Bestätigung",
"copyLogs": "Logs kopieren",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_el.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Καθαρισμός πρόσφατου ιστορικού αναπαραγωγής?",
"clearSearchHistory": "Καθαρισμός ιστορικού αναζήτησης",
"clearSearchHistoryQuestion": "Καθαρισμός ιστορικού αναζήτησης?",
"client": "Client",
"confirm": "Επιβεβαίωση",
"confirmation": "Επιβεβαίωση",
"copyLogs": "Αντιγραφή καταγραφών",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Are you sure you want to clear recently played history?",
"clearSearchHistory": "Clear search history",
"clearSearchHistoryQuestion": "Are you sure you want to clear search history?",
"client": "Client",
"confirm": "Confirm",
"confirmation": "Confirmation",
"copyLogs": "Copy logs",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_es.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "¿Borrar el historial de reproducción reciente?",
"clearSearchHistory": "Borrar historial de búsqueda",
"clearSearchHistoryQuestion": "¿Borrar el historial de búsqueda?",
"client": "Client",
"confirm": "Confirmar",
"confirmation": "Confirmación",
"copyLogs": "Copiar registros",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_fr.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Souhaitez-vous effacer l'historique de lecture ?",
"clearSearchHistory": "Effacer l'historique de recherche",
"clearSearchHistoryQuestion": "Souhaitez-vous effacer l'historique de recherche ?",
"client": "Client",
"confirm": "Confirmer",
"confirmation": "Confirmation",
"copyLogs": "Copier les logs",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_gl.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Borrar o historial de reproducción recente?",
"clearSearchHistory": "Borrar historial de búsqueda",
"clearSearchHistoryQuestion": "Borrar o historial de búsqueda?",
"client": "Client",
"confirm": "Confirmar",
"confirmation": "Confirmación",
"copyLogs": "Copiar rexistros",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_id.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Hapus riwayat terputar?",
"clearSearchHistory": "Hapus riwayat pencarian",
"clearSearchHistoryQuestion": "Hapus riwayat pencarian?",
"client": "Client",
"confirm": "Konfirmasi",
"confirmation": "Konfirmasi",
"copyLogs": "Salin log",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_it.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Cancellare cronologia recenti?",
"clearSearchHistory": "Cancella cronologia ricerche",
"clearSearchHistoryQuestion": "Cancellare cronologia ricerche?",
"client": "Client",
"confirm": "Conferma",
"confirmation": "Conferma",
"copyLogs": "Copia log",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_ja.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "再生履歴を削除しますか?",
"clearSearchHistory": "検索履歴を削除",
"clearSearchHistoryQuestion": "検索履歴を削除しますか?",
"client": "Client",
"confirm": "確認",
"confirmation": "確認",
"copyLogs": "ログをコピー",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_ka.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "გავასუფთავოთ ბოლოს მოსმენილი სიმღერების ისტორია?",
"clearSearchHistory": "საძიებო ისტორიის გასუფთავება",
"clearSearchHistoryQuestion": "გავასუფთავოთ ძიების ისტორია?",
"client": "Client",
"confirm": "დადასტურება",
"confirmation": "დადასტურება",
"copyLogs": "ლოგების კოპირება",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_ko.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "최근 재생 기록을 지울까요?",
"clearSearchHistory": "검색 기록 지우기",
"clearSearchHistoryQuestion": "검색 기록 지울까요?",
"client": "Client",
"confirm": "확인",
"confirmation": "확인",
"copyLogs": "로그 복사",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_pl.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Wyczyścić historię ostatnio odtworzonych utworów?",
"clearSearchHistory": "Wyczyść historię wyszukiwania",
"clearSearchHistoryQuestion": "Wyczyścić historię wyszukiwania?",
"client": "Client",
"confirm": "Potwierdź",
"confirmation": "Potwierdzenie",
"copyLogs": "Kopiuj logi",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_pt.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Deseja limpar o histórico de reprodução recente?",
"clearSearchHistory": "Limpar histórico de pesquisa",
"clearSearchHistoryQuestion": "Deseja limpar o histórico de pesquisa?",
"client": "Client",
"confirm": "Confirmar",
"confirmation": "Confirmação",
"copyLogs": "Copiar logs",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_ru.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Точно очистить недавние треки?",
"clearSearchHistory": "Очистить историю поиска",
"clearSearchHistoryQuestion": "Точно очистить историю поиска?",
"client": "Client",
"confirm": "Подтвердить",
"confirmation": "Подтверждение",
"copyLogs": "Скопировать логи",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_tr.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Yakında oynatınlanlar temizlensin mi?",
"clearSearchHistory": "Arama Geçmişini Temizle",
"clearSearchHistoryQuestion": "Arama geçmişi temizlensin mi?",
"client": "Client",
"confirm": "Onayla",
"confirmation": "Onay",
"copyLogs": "Logları Kopyala",
Expand Down
1 change: 1 addition & 0 deletions lib/localization/app_uk.arb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"clearRecentlyPlayedQuestion": "Clear recently played history?",
"clearSearchHistory": "Очистити історію пошуку",
"clearSearchHistoryQuestion": "Clear search history?",
"client": "Client",
"confirm": "Підтвердити",
"confirmation": "Підтвердження",
"copyLogs": "Копіювати журнали",
Expand Down
14 changes: 14 additions & 0 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,15 @@ import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:musify/API/musify.dart';
import 'package:musify/services/audio_service.dart';
import 'package:musify/services/data_manager.dart';
import 'package:musify/services/logger_service.dart';
import 'package:musify/services/router_service.dart';
import 'package:musify/services/settings_manager.dart';
import 'package:musify/services/update_manager.dart';
import 'package:musify/style/app_themes.dart';
import 'package:youtube_explode_dart/youtube_explode_dart.dart';

late MusifyAudioHandler audioHandler;

Expand Down Expand Up @@ -222,6 +224,18 @@ Future<void> initialisation() async {

// Init router
NavigationManager.instance;

// Init clients
if (clientsSetting.value.isNotEmpty) {
final chosenClients = <YoutubeApiClient>[];
for (final client in clientsSetting.value) {
final _client = clients[client];
if (_client != null) {
chosenClients.add(_client);
}
}
userChosenClients = chosenClients;
}
} catch (e, stackTrace) {
logger.log('Initialization Error', e, stackTrace);
}
Expand Down
55 changes: 55 additions & 0 deletions lib/screens/settings_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,61 @@ class SettingsPage extends StatelessWidget {
);
},
),
CustomBar(
context.l10n!.client,
FluentIcons.device_meeting_room_24_filled,
onTap: () {
final availableClients = clients.keys.toList();
showCustomBottomSheet(
context,
StatefulBuilder(
builder: (context, setState) {
return ListView.builder(
shrinkWrap: true,
physics: const BouncingScrollPhysics(),
padding: commonListViewBottmomPadding,
itemCount: availableClients.length,
itemBuilder: (context, index) {
final client = availableClients[index];
final _clientInModel = clients[client];
final isSelected =
userChosenClients.contains(_clientInModel);

final borderRadius = getItemBorderRadius(
index,
availableClients.length,
);

return BottomSheetBar(
client,
() {
setState(() {
if (isSelected) {
clientsSetting.value.remove(client);
userChosenClients.remove(_clientInModel);
} else {
if (_clientInModel != null) {
clientsSetting.value.add(client);
userChosenClients.add(_clientInModel);
}
}
});
addOrUpdateData(
'settings',
'clients',
clientsSetting.value,
);
},
isSelected ? activatedColor : inactivatedColor,
borderRadius: borderRadius,
);
},
);
},
),
);
},
),
CustomBar(
context.l10n!.language,
FluentIcons.translate_24_filled,
Expand Down
4 changes: 4 additions & 0 deletions lib/services/settings_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ final audioQualitySetting = ValueNotifier<String>(
Hive.box('settings').get('audioQuality', defaultValue: 'high'),
);

final clientsSetting = ValueNotifier<List>(
Hive.box('settings').get('clients', defaultValue: []),
);

Locale languageSetting = Locale(
appLanguages[Hive.box('settings').get('language', defaultValue: 'English')
as String] ??
Expand Down

0 comments on commit 974a1da

Please sign in to comment.