mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-15 19:38:10 +02:00
Still no auto retry for rate-limit. Instead, rate-limit errors are ignored and the unchecked Apps have to wait until the next cycle. Even this needs more testing before release.
126 lines
3.3 KiB
Dart
126 lines
3.3 KiB
Dart
// Exposes functions used to save/load app settings
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:fluttertoast/fluttertoast.dart';
|
|
import 'package:permission_handler/permission_handler.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
enum ThemeSettings { system, light, dark }
|
|
|
|
enum ColourSettings { basic, materialYou }
|
|
|
|
enum SortColumnSettings { added, nameAuthor, authorName }
|
|
|
|
enum SortOrderSettings { ascending, descending }
|
|
|
|
const maxAPIRateLimitMinutes = 30;
|
|
const minUpdateIntervalMinutes = maxAPIRateLimitMinutes + 30;
|
|
const maxUpdateIntervalMinutes = 4320;
|
|
List<int> updateIntervals = [15, 30, 60, 120, 180, 360, 720, 1440, 4320, 0]
|
|
.where((element) =>
|
|
(element >= minUpdateIntervalMinutes &&
|
|
element <= maxUpdateIntervalMinutes) ||
|
|
element == 0)
|
|
.toList();
|
|
|
|
class SettingsProvider with ChangeNotifier {
|
|
SharedPreferences? prefs;
|
|
|
|
String sourceUrl = 'https://github.com/ImranR98/Obtainium';
|
|
|
|
// Not done in constructor as we want to be able to await it
|
|
Future<void> initializeSettings() async {
|
|
prefs = await SharedPreferences.getInstance();
|
|
notifyListeners();
|
|
}
|
|
|
|
ThemeSettings get theme {
|
|
return ThemeSettings
|
|
.values[prefs?.getInt('theme') ?? ThemeSettings.system.index];
|
|
}
|
|
|
|
set theme(ThemeSettings t) {
|
|
prefs?.setInt('theme', t.index);
|
|
notifyListeners();
|
|
}
|
|
|
|
ColourSettings get colour {
|
|
return ColourSettings
|
|
.values[prefs?.getInt('colour') ?? ColourSettings.basic.index];
|
|
}
|
|
|
|
set colour(ColourSettings t) {
|
|
prefs?.setInt('colour', t.index);
|
|
notifyListeners();
|
|
}
|
|
|
|
int get updateInterval {
|
|
var min = prefs?.getInt('updateInterval') ?? 180;
|
|
if (!updateIntervals.contains(min)) {
|
|
var temp = updateIntervals[0];
|
|
for (var i in updateIntervals) {
|
|
if (min > i && i != 0) {
|
|
temp = i;
|
|
}
|
|
}
|
|
min = temp;
|
|
}
|
|
return min;
|
|
}
|
|
|
|
set updateInterval(int min) {
|
|
prefs?.setInt('updateInterval', (min < 15 && min != 0) ? 15 : min);
|
|
notifyListeners();
|
|
}
|
|
|
|
SortColumnSettings get sortColumn {
|
|
return SortColumnSettings
|
|
.values[prefs?.getInt('sortColumn') ?? SortColumnSettings.added.index];
|
|
}
|
|
|
|
set sortColumn(SortColumnSettings s) {
|
|
prefs?.setInt('sortColumn', s.index);
|
|
notifyListeners();
|
|
}
|
|
|
|
SortOrderSettings get sortOrder {
|
|
return SortOrderSettings.values[
|
|
prefs?.getInt('sortOrder') ?? SortOrderSettings.descending.index];
|
|
}
|
|
|
|
set sortOrder(SortOrderSettings s) {
|
|
prefs?.setInt('sortOrder', s.index);
|
|
notifyListeners();
|
|
}
|
|
|
|
bool checkAndFlipFirstRun() {
|
|
bool result = prefs?.getBool('firstRun') ?? true;
|
|
if (result) {
|
|
prefs?.setBool('firstRun', false);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
Future<void> getInstallPermission() async {
|
|
while (!(await Permission.requestInstallPackages.isGranted)) {
|
|
// Explicit request as InstallPlugin request sometimes bugged
|
|
Fluttertoast.showToast(
|
|
msg: 'Please allow Obtainium to install Apps',
|
|
toastLength: Toast.LENGTH_LONG);
|
|
if ((await Permission.requestInstallPackages.request()) ==
|
|
PermissionStatus.granted) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool get showAppWebpage {
|
|
return prefs?.getBool('showAppWebpage') ?? true;
|
|
}
|
|
|
|
set showAppWebpage(bool show) {
|
|
prefs?.setBool('showAppWebpage', show);
|
|
notifyListeners();
|
|
}
|
|
}
|