mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 16:05:18 +00:00

Download track feature complete support in Android Android sudden solid color screen inno-script updated for permission_handler gensums updated for support for android apk updated description of Spotube in every file changes added to CHANGELOG
123 lines
3.4 KiB
Dart
123 lines
3.4 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:hotkey_manager/hotkey_manager.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'package:spotube/helpers/get-random-element.dart';
|
|
import 'package:spotube/models/LocalStorageKeys.dart';
|
|
import 'package:spotube/models/Logger.dart';
|
|
import 'package:spotube/models/generated_secrets.dart';
|
|
|
|
class UserPreferences extends ChangeNotifier {
|
|
String geniusAccessToken;
|
|
HotKey? nextTrackHotKey;
|
|
HotKey? prevTrackHotKey;
|
|
HotKey? playPauseHotKey;
|
|
UserPreferences({
|
|
required this.geniusAccessToken,
|
|
this.nextTrackHotKey,
|
|
this.prevTrackHotKey,
|
|
this.playPauseHotKey,
|
|
}) {
|
|
onInit();
|
|
}
|
|
|
|
final logger = createLogger(UserPreferences);
|
|
|
|
Future<HotKey?> _getHotKeyFromLocalStorage(
|
|
SharedPreferences preferences, String key) async {
|
|
String? str = preferences.getString(key);
|
|
if (str != null) {
|
|
Map<String, dynamic> json = await jsonDecode(str);
|
|
if (json.isEmpty) {
|
|
return null;
|
|
}
|
|
return HotKey.fromJson(json);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
Future<void> onInit() async {
|
|
try {
|
|
SharedPreferences localStorage = await SharedPreferences.getInstance();
|
|
String? accessToken =
|
|
localStorage.getString(LocalStorageKeys.geniusAccessToken);
|
|
geniusAccessToken = accessToken != null && accessToken.isNotEmpty
|
|
? accessToken
|
|
: getRandomElement(lyricsSecrets);
|
|
|
|
nextTrackHotKey ??= (await _getHotKeyFromLocalStorage(
|
|
localStorage,
|
|
LocalStorageKeys.nextTrackHotKey,
|
|
)) ??
|
|
HotKey(
|
|
KeyCode.slash,
|
|
modifiers: [KeyModifier.control, KeyModifier.alt],
|
|
);
|
|
|
|
prevTrackHotKey ??= (await _getHotKeyFromLocalStorage(
|
|
localStorage,
|
|
LocalStorageKeys.prevTrackHotKey,
|
|
)) ??
|
|
HotKey(
|
|
KeyCode.comma,
|
|
modifiers: [KeyModifier.control, KeyModifier.alt],
|
|
);
|
|
|
|
playPauseHotKey ??= (await _getHotKeyFromLocalStorage(
|
|
localStorage,
|
|
LocalStorageKeys.playPauseHotKey,
|
|
)) ??
|
|
HotKey(
|
|
KeyCode.period,
|
|
modifiers: [KeyModifier.control, KeyModifier.alt],
|
|
);
|
|
notifyListeners();
|
|
} catch (e, stack) {
|
|
logger.e("onInit", e, stack);
|
|
}
|
|
}
|
|
|
|
void setGeniusAccessToken(String token) {
|
|
geniusAccessToken = token;
|
|
notifyListeners();
|
|
}
|
|
|
|
void setNextTrackHotKey(HotKey? value) {
|
|
nextTrackHotKey = value;
|
|
SharedPreferences.getInstance().then((preferences) {
|
|
preferences.setString(
|
|
LocalStorageKeys.nextTrackHotKey,
|
|
jsonEncode(value?.toJson() ?? {}),
|
|
);
|
|
});
|
|
notifyListeners();
|
|
}
|
|
|
|
void setPrevTrackHotKey(HotKey? value) {
|
|
prevTrackHotKey = value;
|
|
SharedPreferences.getInstance().then((preferences) {
|
|
preferences.setString(
|
|
LocalStorageKeys.prevTrackHotKey,
|
|
jsonEncode(value?.toJson() ?? {}),
|
|
);
|
|
});
|
|
notifyListeners();
|
|
}
|
|
|
|
void setPlayPauseHotKey(HotKey? value) {
|
|
playPauseHotKey = value;
|
|
SharedPreferences.getInstance().then((preferences) {
|
|
preferences.setString(
|
|
LocalStorageKeys.playPauseHotKey,
|
|
jsonEncode(value?.toJson() ?? {}),
|
|
);
|
|
});
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
final userPreferencesProvider =
|
|
ChangeNotifierProvider((_) => UserPreferences(geniusAccessToken: ""));
|