Added update all button + Obtainium added by default

This commit is contained in:
Imran Remtulla
2022-08-25 14:26:15 -04:00
parent aeada9635d
commit 0362cdf8ac
4 changed files with 82 additions and 46 deletions

View File

@@ -22,7 +22,7 @@ void backgroundUpdateCheck() {
important: false);
try {
await appsProvider.loadApps();
List<App> updates = await appsProvider.getUpdates();
List<App> updates = await appsProvider.checkUpdates();
if (updates.isNotEmpty) {
String message = updates.length == 1
? '${updates[0].name} has an update.'
@@ -87,13 +87,14 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return DynamicColorBuilder(
builder: (ColorScheme? lightDynamic, ColorScheme? darkDynamic) {
AppsProvider appsProvider = context.read<AppsProvider>();
appsProvider.deleteSavedAPKs();
// Initialize the settings provider (if needed) and perform first-run actions if needed
SettingsProvider settingsProvider = context.watch<SettingsProvider>();
if (settingsProvider.prefs == null) {
settingsProvider.initializeSettings().then((_) {
bool isFirstRun = settingsProvider.checkAndFlipFirstRun();
if (isFirstRun) {
AppsProvider appsProvider = context.read<AppsProvider>();
appsProvider
.notify(
3,
@@ -106,6 +107,14 @@ class MyApp extends StatelessWidget {
.whenComplete(() {
appsProvider.downloaderNotifications.cancel(3);
});
appsProvider.saveApp(App(
'imranr98_obtainium_github',
'https://github.com/ImranR98/Obtainium',
'ImranR98',
'Obtainium',
'v0.1.0-beta', // KEEP THIS IN SYNC WITH GITHUB RELEASES
'v0.1.0-beta',
''));
}
});
}

View File

@@ -14,9 +14,25 @@ class _AppsPageState extends State<AppsPage> {
@override
Widget build(BuildContext context) {
var appsProvider = context.watch<AppsProvider>();
appsProvider.getUpdates();
appsProvider.checkUpdates();
var existingUpdateAppIds = appsProvider.getExistingUpdates();
return Center(
return Scaffold(
floatingActionButton: existingUpdateAppIds.isEmpty
? null
: ElevatedButton.icon(
onPressed: appsProvider.apps.values
.where((element) => element.downloadProgress != null)
.isNotEmpty
? null
: () {
for (var e in existingUpdateAppIds) {
appsProvider.downloadAndInstallLatestApp(e);
}
},
icon: const Icon(Icons.update),
label: const Text('Update All')),
body: Center(
child: appsProvider.loadingApps
? const CircularProgressIndicator()
: appsProvider.apps.isEmpty
@@ -25,14 +41,14 @@ class _AppsPageState extends State<AppsPage> {
style: Theme.of(context).textTheme.headline4,
)
: RefreshIndicator(
onRefresh: appsProvider.getUpdates,
onRefresh: appsProvider.checkUpdates,
child: ListView(
children: appsProvider.apps.values
.map(
(e) => ListTile(
title: Text('${e.app.author}/${e.app.name}'),
subtitle:
Text(e.app.installedVersion ?? 'Not Installed'),
subtitle: Text(
e.app.installedVersion ?? 'Not Installed'),
trailing: e.downloadProgress != null
? Text(
'Downloading - ${e.downloadProgress!.toInt()}%')
@@ -54,6 +70,6 @@ class _AppsPageState extends State<AppsPage> {
.toList(),
),
),
);
));
}
}

View File

@@ -132,6 +132,15 @@ class AppsProvider with ChangeNotifier {
return appsDir;
}
Future<void> deleteSavedAPKs() async {
(await getExternalStorageDirectory())
?.listSync()
.where((element) => element.path.endsWith('.apk'))
.forEach((element) {
element.deleteSync();
});
}
Future<void> loadApps() async {
loadingApps = true;
notifyListeners();
@@ -186,7 +195,7 @@ class AppsProvider with ChangeNotifier {
return null;
}
Future<List<App>> getUpdates() async {
Future<List<App>> checkUpdates() async {
List<App> updates = [];
if (!gettingUpdates) {
gettingUpdates = true;
@@ -203,14 +212,16 @@ class AppsProvider with ChangeNotifier {
return updates;
}
Future<void> installUpdates() async {
List<String> getExistingUpdates() {
List<String> updateAppIds = [];
List<String> appIds = apps.keys.toList();
for (int i = 0; i < appIds.length; i++) {
App? app = apps[appIds[i]]!.app;
if (app.installedVersion != app.latestVersion) {
await downloadAndInstallLatestApp(app.id);
updateAppIds.add(app.id);
}
}
return updateAppIds;
}
@override

View File

@@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
version: 0.1.0+1
version: 0.1.0+1 # When changing this, update the tag in main() accordingly
environment:
sdk: '>=2.19.0-79.0.dev <3.0.0'