mirror of
https://github.com/revanced/revanced-manager
synced 2024-05-14 13:56:57 +02:00
refactor: update deprecated and minor code refactors (#710)
Improve code readability & additional refactoring Commits: chore: exclude generated from analyzer refactor: add SharedPreferences to locator refactor: access shared pref from locator, and code refactor refactor: remove unwanted `await` refactor: remove `const` from `CacheConfig`
This commit is contained in:
parent
3ae4d69110
commit
6829d3cdea
@ -12,6 +12,8 @@ include: package:flutter_lints/flutter.yaml
|
|||||||
analyzer:
|
analyzer:
|
||||||
exclude:
|
exclude:
|
||||||
- lib/utils/env_class.g.dart
|
- lib/utils/env_class.g.dart
|
||||||
|
- "**/*.locator.dart"
|
||||||
|
- "**/*.router.dart"
|
||||||
|
|
||||||
linter:
|
linter:
|
||||||
rules:
|
rules:
|
||||||
|
@ -15,6 +15,7 @@ import 'package:revanced_manager/ui/views/patcher/patcher_viewmodel.dart';
|
|||||||
import 'package:revanced_manager/ui/views/patches_selector/patches_selector_view.dart';
|
import 'package:revanced_manager/ui/views/patches_selector/patches_selector_view.dart';
|
||||||
import 'package:revanced_manager/ui/views/settings/settings_view.dart';
|
import 'package:revanced_manager/ui/views/settings/settings_view.dart';
|
||||||
import 'package:revanced_manager/ui/widgets/appInfoView/app_info_view.dart';
|
import 'package:revanced_manager/ui/widgets/appInfoView/app_info_view.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:stacked/stacked_annotations.dart';
|
import 'package:stacked/stacked_annotations.dart';
|
||||||
import 'package:stacked_services/stacked_services.dart';
|
import 'package:stacked_services/stacked_services.dart';
|
||||||
|
|
||||||
@ -40,6 +41,10 @@ import 'package:stacked_services/stacked_services.dart';
|
|||||||
LazySingleton(classType: GithubAPI),
|
LazySingleton(classType: GithubAPI),
|
||||||
LazySingleton(classType: CrowdinAPI),
|
LazySingleton(classType: CrowdinAPI),
|
||||||
LazySingleton(classType: Toast),
|
LazySingleton(classType: Toast),
|
||||||
|
Presolve(
|
||||||
|
classType: SharedPreferences,
|
||||||
|
presolveUsing: SharedPreferences.getInstance,
|
||||||
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
class AppSetup {}
|
class AppSetup {}
|
||||||
|
@ -4,7 +4,6 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_i18n/flutter_i18n.dart';
|
import 'package:flutter_i18n/flutter_i18n.dart';
|
||||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||||
import 'package:revanced_manager/app/app.locator.dart';
|
import 'package:revanced_manager/app/app.locator.dart';
|
||||||
import 'package:revanced_manager/services/crowdin_api.dart';
|
|
||||||
import 'package:revanced_manager/services/github_api.dart';
|
import 'package:revanced_manager/services/github_api.dart';
|
||||||
import 'package:revanced_manager/services/manager_api.dart';
|
import 'package:revanced_manager/services/manager_api.dart';
|
||||||
import 'package:revanced_manager/services/patcher_api.dart';
|
import 'package:revanced_manager/services/patcher_api.dart';
|
||||||
@ -13,27 +12,25 @@ import 'package:revanced_manager/ui/theme/dynamic_theme_builder.dart';
|
|||||||
import 'package:revanced_manager/ui/views/navigation/navigation_view.dart';
|
import 'package:revanced_manager/ui/views/navigation/navigation_view.dart';
|
||||||
import 'package:revanced_manager/utils/environment.dart';
|
import 'package:revanced_manager/utils/environment.dart';
|
||||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
|
||||||
import 'package:stacked_themes/stacked_themes.dart';
|
|
||||||
import 'package:timezone/data/latest.dart' as tz;
|
import 'package:timezone/data/latest.dart' as tz;
|
||||||
|
|
||||||
late SharedPreferences prefs;
|
|
||||||
Future main() async {
|
Future main() async {
|
||||||
await ThemeManager.initialise();
|
|
||||||
await setupLocator();
|
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
await locator<ManagerAPI>().initialize();
|
await setupLocator();
|
||||||
final String apiUrl = locator<ManagerAPI>().getApiUrl();
|
final manager = locator<ManagerAPI>();
|
||||||
await locator<RevancedAPI>().initialize(apiUrl);
|
await manager.initialize();
|
||||||
await locator<CrowdinAPI>().initialize();
|
final String apiUrl = manager.getApiUrl();
|
||||||
final bool isSentryEnabled = locator<ManagerAPI>().isSentryEnabled();
|
final bool isSentryEnabled = manager.isSentryEnabled();
|
||||||
final String repoUrl = locator<ManagerAPI>().getRepoUrl();
|
final String repoUrl = manager.getRepoUrl();
|
||||||
locator<GithubAPI>().initialize(repoUrl);
|
|
||||||
await locator<PatcherAPI>().initialize();
|
|
||||||
tz.initializeTimeZones();
|
|
||||||
prefs = await SharedPreferences.getInstance();
|
|
||||||
|
|
||||||
await SentryFlutter.init(
|
await Future.wait([
|
||||||
|
locator<RevancedAPI>().initialize(apiUrl),
|
||||||
|
locator<PatcherAPI>().initialize(),
|
||||||
|
]);
|
||||||
|
locator<GithubAPI>().initialize(repoUrl);
|
||||||
|
tz.initializeTimeZones();
|
||||||
|
|
||||||
|
return SentryFlutter.init(
|
||||||
(options) {
|
(options) {
|
||||||
options
|
options
|
||||||
..dsn = isSentryEnabled ? Environment.sentryDSN : ''
|
..dsn = isSentryEnabled ? Environment.sentryDSN : ''
|
||||||
@ -51,11 +48,8 @@ Future main() async {
|
|||||||
}
|
}
|
||||||
} as BeforeSendCallback?;
|
} as BeforeSendCallback?;
|
||||||
},
|
},
|
||||||
appRunner: () {
|
appRunner: () => runApp(const MyApp()),
|
||||||
runApp(const MyApp());
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
runApp(const MyApp());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyApp extends StatelessWidget {
|
class MyApp extends StatelessWidget {
|
||||||
|
@ -7,11 +7,14 @@ import 'package:sentry_flutter/sentry_flutter.dart';
|
|||||||
|
|
||||||
@lazySingleton
|
@lazySingleton
|
||||||
class CrowdinAPI {
|
class CrowdinAPI {
|
||||||
late Dio _dio = Dio();
|
CrowdinAPI() {
|
||||||
final DioCacheManager _dioCacheManager = DioCacheManager(CacheConfig());
|
initialize();
|
||||||
final apiKey = Environment.crowdinKEY;
|
}
|
||||||
|
Dio _dio = Dio();
|
||||||
|
DioCacheManager get _dioCacheManager => DioCacheManager(CacheConfig());
|
||||||
|
String get apiKey => Environment.crowdinKEY;
|
||||||
|
|
||||||
Future<void> initialize() async {
|
void initialize() {
|
||||||
try {
|
try {
|
||||||
_dio = Dio(
|
_dio = Dio(
|
||||||
BaseOptions(
|
BaseOptions(
|
||||||
@ -24,7 +27,7 @@ class CrowdinAPI {
|
|||||||
captureFailedRequests: true,
|
captureFailedRequests: true,
|
||||||
);
|
);
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,7 +35,7 @@ class CrowdinAPI {
|
|||||||
try {
|
try {
|
||||||
await _dioCacheManager.clearAll();
|
await _dioCacheManager.clearAll();
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +59,7 @@ class CrowdinAPI {
|
|||||||
|
|
||||||
return targetLanguages;
|
return targetLanguages;
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ class GithubAPI {
|
|||||||
captureFailedRequests: true,
|
captureFailedRequests: true,
|
||||||
);
|
);
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ class GithubAPI {
|
|||||||
try {
|
try {
|
||||||
await _dioCacheManager.clearAll();
|
await _dioCacheManager.clearAll();
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ class GithubAPI {
|
|||||||
);
|
);
|
||||||
return response.data[0];
|
return response.data[0];
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,7 +93,7 @@ class GithubAPI {
|
|||||||
)
|
)
|
||||||
.toList();
|
.toList();
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return List.empty();
|
return List.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,7 +113,7 @@ class GithubAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -128,7 +128,7 @@ class GithubAPI {
|
|||||||
patches = list.map((patch) => Patch.fromJson(patch)).toList();
|
patches = list.map((patch) => Patch.fromJson(patch)).toList();
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return List.empty();
|
return List.empty();
|
||||||
}
|
}
|
||||||
return patches;
|
return patches;
|
||||||
@ -143,7 +143,7 @@ class GithubAPI {
|
|||||||
return 'Unknown';
|
return 'Unknown';
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:device_apps/device_apps.dart';
|
import 'package:device_apps/device_apps.dart';
|
||||||
import 'package:injectable/injectable.dart';
|
import 'package:injectable/injectable.dart';
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
@ -17,10 +18,10 @@ import 'package:shared_preferences/shared_preferences.dart';
|
|||||||
class ManagerAPI {
|
class ManagerAPI {
|
||||||
final RevancedAPI _revancedAPI = locator<RevancedAPI>();
|
final RevancedAPI _revancedAPI = locator<RevancedAPI>();
|
||||||
final GithubAPI _githubAPI = locator<GithubAPI>();
|
final GithubAPI _githubAPI = locator<GithubAPI>();
|
||||||
|
final SharedPreferences _prefs = locator<SharedPreferences>();
|
||||||
final RootAPI _rootAPI = RootAPI();
|
final RootAPI _rootAPI = RootAPI();
|
||||||
final String patcherRepo = 'revanced-patcher';
|
final String patcherRepo = 'revanced-patcher';
|
||||||
final String cliRepo = 'revanced-cli';
|
final String cliRepo = 'revanced-cli';
|
||||||
late SharedPreferences _prefs;
|
|
||||||
String storedPatchesFile = '/selected-patches.json';
|
String storedPatchesFile = '/selected-patches.json';
|
||||||
String defaultApiUrl = 'https://releases.revanced.app/';
|
String defaultApiUrl = 'https://releases.revanced.app/';
|
||||||
String defaultRepoUrl = 'https://api.github.com';
|
String defaultRepoUrl = 'https://api.github.com';
|
||||||
@ -31,7 +32,6 @@ class ManagerAPI {
|
|||||||
String defaultManagerRepo = 'revanced/revanced-manager';
|
String defaultManagerRepo = 'revanced/revanced-manager';
|
||||||
|
|
||||||
Future<void> initialize() async {
|
Future<void> initialize() async {
|
||||||
_prefs = await SharedPreferences.getInstance();
|
|
||||||
storedPatchesFile =
|
storedPatchesFile =
|
||||||
(await getApplicationDocumentsDirectory()).path + storedPatchesFile;
|
(await getApplicationDocumentsDirectory()).path + storedPatchesFile;
|
||||||
}
|
}
|
||||||
@ -180,7 +180,7 @@ class ManagerAPI {
|
|||||||
_revancedAPI.clearAllCache();
|
_revancedAPI.clearAllCache();
|
||||||
_githubAPI.clearAllCache();
|
_githubAPI.clearAllCache();
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,7 +197,7 @@ class ManagerAPI {
|
|||||||
return await _githubAPI.getPatches(repoName);
|
return await _githubAPI.getPatches(repoName);
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -214,7 +214,7 @@ class ManagerAPI {
|
|||||||
return await _githubAPI.getLatestReleaseFile('.jar', repoName);
|
return await _githubAPI.getLatestReleaseFile('.jar', repoName);
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -231,7 +231,7 @@ class ManagerAPI {
|
|||||||
return await _githubAPI.getLatestReleaseFile('.apk', repoName);
|
return await _githubAPI.getLatestReleaseFile('.apk', repoName);
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ class PatcherAPI {
|
|||||||
_patches = await _managerAPI.getPatches();
|
_patches = await _managerAPI.getPatches();
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
_patches = List.empty();
|
_patches = List.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -92,7 +92,7 @@ class PatcherAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -171,7 +171,7 @@ class PatcherAPI {
|
|||||||
}
|
}
|
||||||
return originalFilePath;
|
return originalFilePath;
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return originalFilePath;
|
return originalFilePath;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -194,7 +194,7 @@ class PatcherAPI {
|
|||||||
selectedPatches.add(settingsPatch);
|
selectedPatches.add(settingsPatch);
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -231,11 +231,11 @@ class PatcherAPI {
|
|||||||
'keyStoreFilePath': _keyStoreFile.path,
|
'keyStoreFilePath': _keyStoreFile.path,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e) {
|
||||||
if (kDebugMode) {
|
if (kDebugMode) {
|
||||||
print(e);
|
print(e);
|
||||||
}
|
}
|
||||||
throw await Sentry.captureException(e, stackTrace: s);
|
rethrow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -257,7 +257,7 @@ class PatcherAPI {
|
|||||||
return await DeviceApps.isAppInstalled(patchedApp.packageName);
|
return await DeviceApps.isAppInstalled(patchedApp.packageName);
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -268,11 +268,15 @@ class PatcherAPI {
|
|||||||
try {
|
try {
|
||||||
if (_outFile != null) {
|
if (_outFile != null) {
|
||||||
final String newName = _getFileName(appName, version);
|
final String newName = _getFileName(appName, version);
|
||||||
CRFileSaver.saveFileWithDialog(SaveFileDialogParams(
|
CRFileSaver.saveFileWithDialog(
|
||||||
sourceFilePath: _outFile!.path, destinationFileName: newName,),);
|
SaveFileDialogParams(
|
||||||
|
sourceFilePath: _outFile!.path,
|
||||||
|
destinationFileName: newName,
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -287,7 +291,7 @@ class PatcherAPI {
|
|||||||
ShareExtend.share(shareFile.path, 'file');
|
ShareExtend.share(shareFile.path, 'file');
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ class RevancedAPI {
|
|||||||
captureFailedRequests: true,
|
captureFailedRequests: true,
|
||||||
);
|
);
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ class RevancedAPI {
|
|||||||
try {
|
try {
|
||||||
await _dioCacheManager.clearAll();
|
await _dioCacheManager.clearAll();
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ class RevancedAPI {
|
|||||||
contributors[name] = repo['contributors'];
|
contributors[name] = repo['contributors'];
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
return contributors;
|
return contributors;
|
||||||
@ -80,7 +80,7 @@ class RevancedAPI {
|
|||||||
final List<dynamic> patches = response.data;
|
final List<dynamic> patches = response.data;
|
||||||
return patches.map((patch) => Patch.fromJson(patch)).toList();
|
return patches.map((patch) => Patch.fromJson(patch)).toList();
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return List.empty();
|
return List.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ class RevancedAPI {
|
|||||||
(t['name'] as String).endsWith(extension),
|
(t['name'] as String).endsWith(extension),
|
||||||
);
|
);
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -116,7 +116,7 @@ class RevancedAPI {
|
|||||||
return release['version'];
|
return release['version'];
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -133,7 +133,7 @@ class RevancedAPI {
|
|||||||
return await DefaultCacheManager().getSingleFile(url);
|
return await DefaultCacheManager().getSingleFile(url);
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -154,7 +154,7 @@ class RevancedAPI {
|
|||||||
return format(timestamp, locale: 'en_short');
|
return format(timestamp, locale: 'en_short');
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -11,7 +11,7 @@ class RootAPI {
|
|||||||
final bool? isRooted = await Root.isRootAvailable();
|
final bool? isRooted = await Root.isRootAvailable();
|
||||||
return isRooted != null && isRooted;
|
return isRooted != null && isRooted;
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -25,7 +25,7 @@ class RootAPI {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -79,7 +79,7 @@ class RootAPI {
|
|||||||
return apps.map((pack) => pack.trim()).toList();
|
return apps.map((pack) => pack.trim()).toList();
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return List.empty();
|
return List.empty();
|
||||||
}
|
}
|
||||||
return List.empty();
|
return List.empty();
|
||||||
@ -126,7 +126,7 @@ class RootAPI {
|
|||||||
await mountApk(packageName, originalFilePath);
|
await mountApk(packageName, originalFilePath);
|
||||||
return true;
|
return true;
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ class AppSelectorViewModel extends BaseViewModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
_toast.showBottom('appSelectorView.errorMessage');
|
_toast.showBottom('appSelectorView.errorMessage');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ class HomeViewModel extends BaseViewModel {
|
|||||||
int.parse(currentVersion.replaceAll(RegExp('[^0-9]'), ''));
|
int.parse(currentVersion.replaceAll(RegExp('[^0-9]'), ''));
|
||||||
return latestVersionInt > currentVersionInt;
|
return latestVersionInt > currentVersionInt;
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -138,7 +138,7 @@ class HomeViewModel extends BaseViewModel {
|
|||||||
_toast.showBottom('homeView.errorDownloadMessage');
|
_toast.showBottom('homeView.errorDownloadMessage');
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
_toast.showBottom('homeView.errorInstallMessage');
|
_toast.showBottom('homeView.errorInstallMessage');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ class InstallerViewModel extends BaseViewModel {
|
|||||||
),
|
),
|
||||||
).then((value) => FlutterBackground.enableBackgroundExecution());
|
).then((value) => FlutterBackground.enableBackgroundExecution());
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -131,14 +131,13 @@ class InstallerViewModel extends BaseViewModel {
|
|||||||
_app.apkFilePath,
|
_app.apkFilePath,
|
||||||
_patches,
|
_patches,
|
||||||
);
|
);
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e) {
|
||||||
update(
|
update(
|
||||||
-100.0,
|
-100.0,
|
||||||
'Aborting...',
|
'Aborting...',
|
||||||
'An error occurred! Aborting\nError:\n$e',
|
'An error occurred! Aborting\nError:\n$e',
|
||||||
);
|
);
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
rethrow;
|
||||||
throw await Sentry.captureException(e, stackTrace: s);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
update(-100.0, 'Aborting...', 'No app or patches selected! Aborting');
|
update(-100.0, 'Aborting...', 'No app or patches selected! Aborting');
|
||||||
@ -146,14 +145,13 @@ class InstallerViewModel extends BaseViewModel {
|
|||||||
if (FlutterBackground.isBackgroundExecutionEnabled) {
|
if (FlutterBackground.isBackgroundExecutionEnabled) {
|
||||||
try {
|
try {
|
||||||
FlutterBackground.disableBackgroundExecution();
|
FlutterBackground.disableBackgroundExecution();
|
||||||
} on Exception catch (e, s) {
|
} on Exception {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
rethrow;
|
||||||
// ignore
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await Wakelock.disable();
|
await Wakelock.disable();
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,7 +210,7 @@ class InstallerViewModel extends BaseViewModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,7 +218,7 @@ class InstallerViewModel extends BaseViewModel {
|
|||||||
try {
|
try {
|
||||||
_patcherAPI.exportPatchedFile(_app.name, _app.version);
|
_patcherAPI.exportPatchedFile(_app.name, _app.version);
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,7 +226,7 @@ class InstallerViewModel extends BaseViewModel {
|
|||||||
try {
|
try {
|
||||||
_patcherAPI.sharePatchedFile(_app.name, _app.version);
|
_patcherAPI.sharePatchedFile(_app.name, _app.version);
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,7 +241,7 @@ class InstallerViewModel extends BaseViewModel {
|
|||||||
locator<PatcherViewModel>().selectedPatches.clear();
|
locator<PatcherViewModel>().selectedPatches.clear();
|
||||||
locator<PatcherViewModel>().notifyListeners();
|
locator<PatcherViewModel>().notifyListeners();
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,9 +15,9 @@ import 'package:stacked/stacked.dart';
|
|||||||
|
|
||||||
@lazySingleton
|
@lazySingleton
|
||||||
class NavigationViewModel extends IndexTrackingViewModel {
|
class NavigationViewModel extends IndexTrackingViewModel {
|
||||||
|
final prefs = locator<SharedPreferences>();
|
||||||
Future<void> initialize(BuildContext context) async {
|
Future<void> initialize(BuildContext context) async {
|
||||||
locator<Toast>().initialize(context);
|
locator<Toast>().initialize(context);
|
||||||
final SharedPreferences prefs = await SharedPreferences.getInstance();
|
|
||||||
if (prefs.getBool('permissionsRequested') == null) {
|
if (prefs.getBool('permissionsRequested') == null) {
|
||||||
await prefs.setBool('permissionsRequested', true);
|
await prefs.setBool('permissionsRequested', true);
|
||||||
RootAPI().hasRootPermissions().then(
|
RootAPI().hasRootPermissions().then(
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_i18n/flutter_i18n.dart';
|
import 'package:flutter_i18n/flutter_i18n.dart';
|
||||||
import 'package:revanced_manager/app/app.locator.dart';
|
import 'package:revanced_manager/app/app.locator.dart';
|
||||||
import 'package:revanced_manager/main.dart';
|
|
||||||
import 'package:revanced_manager/services/crowdin_api.dart';
|
import 'package:revanced_manager/services/crowdin_api.dart';
|
||||||
import 'package:revanced_manager/services/toast.dart';
|
import 'package:revanced_manager/services/toast.dart';
|
||||||
import 'package:revanced_manager/ui/views/navigation/navigation_viewmodel.dart';
|
import 'package:revanced_manager/ui/views/navigation/navigation_viewmodel.dart';
|
||||||
@ -17,23 +16,14 @@ final _settingViewModel = SettingsViewModel();
|
|||||||
|
|
||||||
class SUpdateLanguage extends BaseViewModel {
|
class SUpdateLanguage extends BaseViewModel {
|
||||||
final CrowdinAPI _crowdinAPI = locator<CrowdinAPI>();
|
final CrowdinAPI _crowdinAPI = locator<CrowdinAPI>();
|
||||||
|
final SharedPreferences _prefs = locator<SharedPreferences>();
|
||||||
final Toast _toast = locator<Toast>();
|
final Toast _toast = locator<Toast>();
|
||||||
late SharedPreferences _prefs;
|
|
||||||
String selectedLanguage = 'English';
|
String selectedLanguage = 'English';
|
||||||
String selectedLanguageLocale = prefs.getString('language') ?? 'en_US';
|
String get selectedLanguageLocale => _prefs.getString('language') ?? 'en_US';
|
||||||
List languages = [];
|
List languages = [];
|
||||||
|
|
||||||
Future<void> initialize() async {
|
|
||||||
_prefs = await SharedPreferences.getInstance();
|
|
||||||
selectedLanguageLocale =
|
|
||||||
_prefs.getString('language') ?? selectedLanguageLocale;
|
|
||||||
notifyListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> updateLanguage(BuildContext context, String? value) async {
|
Future<void> updateLanguage(BuildContext context, String? value) async {
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
selectedLanguageLocale = value;
|
|
||||||
_prefs = await SharedPreferences.getInstance();
|
|
||||||
await _prefs.setString('language', value);
|
await _prefs.setString('language', value);
|
||||||
await FlutterI18n.refresh(context, Locale(value));
|
await FlutterI18n.refresh(context, Locale(value));
|
||||||
timeago.setLocaleMessages(value, timeago.EnMessages());
|
timeago.setLocaleMessages(value, timeago.EnMessages());
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:cr_file_saver/file_saver.dart';
|
import 'package:cr_file_saver/file_saver.dart';
|
||||||
import 'package:device_info_plus/device_info_plus.dart';
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
@ -74,14 +75,18 @@ class SettingsViewModel extends BaseViewModel {
|
|||||||
if (outFile.existsSync()) {
|
if (outFile.existsSync()) {
|
||||||
final String dateTime =
|
final String dateTime =
|
||||||
DateTime.now().toString().replaceAll(' ', '_').split('.').first;
|
DateTime.now().toString().replaceAll(' ', '_').split('.').first;
|
||||||
await CRFileSaver.saveFileWithDialog(SaveFileDialogParams(
|
await CRFileSaver.saveFileWithDialog(
|
||||||
sourceFilePath: outFile.path, destinationFileName: 'selected_patches_$dateTime.json',),);
|
SaveFileDialogParams(
|
||||||
|
sourceFilePath: outFile.path,
|
||||||
|
destinationFileName: 'selected_patches_$dateTime.json',
|
||||||
|
),
|
||||||
|
);
|
||||||
_toast.showBottom('settingsView.exportedPatches');
|
_toast.showBottom('settingsView.exportedPatches');
|
||||||
} else {
|
} else {
|
||||||
_toast.showBottom('settingsView.noExportFileFound');
|
_toast.showBottom('settingsView.noExportFileFound');
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +106,7 @@ class SettingsViewModel extends BaseViewModel {
|
|||||||
_toast.showBottom('settingsView.importedPatches');
|
_toast.showBottom('settingsView.importedPatches');
|
||||||
}
|
}
|
||||||
} on Exception catch (e, s) {
|
} on Exception catch (e, s) {
|
||||||
await Sentry.captureException(e, stackTrace: s);
|
Sentry.captureException(e, stackTrace: s).ignore();
|
||||||
_toast.showBottom('settingsView.jsonSelectorErrorMessage');
|
_toast.showBottom('settingsView.jsonSelectorErrorMessage');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user