mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-05 11:10:47 -06:00
[client] Download older versions
This commit is contained in:
@@ -2,8 +2,9 @@ import 'package:flutter/material.dart';
|
||||
import 'package:phylum/libphylum/db/db.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
|
||||
Future<void> downloadResource(BuildContext context, Resource r) => throw UnimplementedError();
|
||||
Future<void> downloadResource(BuildContext context, Resource r, {ResourceVersion? version}) =>
|
||||
throw UnimplementedError();
|
||||
|
||||
class DownloadManager with ChangeNotifier {
|
||||
Future<void> downloadResource(PhylumAccount account, Resource r) async {}
|
||||
Future<void> downloadResource(PhylumAccount account, Resource r, {ResourceVersion? version}) async {}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,8 @@ import 'package:phylum/libphylum/db/db.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
Future<bool> downloadResource(BuildContext context, Resource r) async {
|
||||
await context.read<DownloadManager>().downloadResource(context.read(), r);
|
||||
Future<bool> downloadResource(BuildContext context, Resource r, {ResourceVersion? version}) async {
|
||||
await context.read<DownloadManager>().downloadResource(context.read(), r, version: version);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -73,17 +73,20 @@ class DownloadManager with ChangeNotifier {
|
||||
_downloader.start();
|
||||
}
|
||||
|
||||
Future<void> downloadResource(PhylumAccount account, Resource r) async {
|
||||
Future<void> downloadResource(PhylumAccount account, Resource r, {ResourceVersion? version}) async {
|
||||
await _downloader.ready;
|
||||
if (Platform.isAndroid || Platform.isAndroid) {
|
||||
await Permission.notification.request();
|
||||
}
|
||||
final uri = account.apiClient.createUriBuilder('/api/v1/fs/contents/${r.id}:');
|
||||
final version = await account.db.latestVersion(r.id).getSingleOrNull();
|
||||
final mimeType = version?.mimeType ?? MimeTypeResolver().lookup(r.name) ?? 'application/octet-stream';
|
||||
if (version != null) {
|
||||
uri.queryParameters['version'] = version.id;
|
||||
}
|
||||
final v = version ?? await account.db.latestVersion(r.id).getSingleOrNull();
|
||||
final mimeType = v?.mimeType ?? MimeTypeResolver().lookup(r.name) ?? 'application/octet-stream';
|
||||
final task = DownloadTask(
|
||||
url: uri.toString(),
|
||||
filename: r.name,
|
||||
filename: version == null ? r.name : '${r.name}-${version.created.toIso8601String()}',
|
||||
displayName: r.name,
|
||||
headers: account.apiClient.requestHeaders,
|
||||
updates: Updates.statusAndProgress,
|
||||
|
||||
@@ -7,7 +7,7 @@ import 'package:phylum/libphylum/responses/responses.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:web/web.dart' as web;
|
||||
|
||||
Future<bool> downloadResource(BuildContext context, Resource r) async {
|
||||
Future<bool> downloadResource(BuildContext context, Resource r, {ResourceVersion? version}) async {
|
||||
final apiClient = context.read<PhylumAccount>().apiClient;
|
||||
final success = await apiClient
|
||||
.sendRequest(const SetCookieRequest(), (_, response) => parseEmptyResponse(response))
|
||||
@@ -15,15 +15,19 @@ Future<bool> downloadResource(BuildContext context, Resource r) async {
|
||||
if (!success) {
|
||||
return false;
|
||||
}
|
||||
final uri = apiClient.createUriBuilder('/api/v1/fs/contents/${r.id}:')..queryParameters['download'] = '';
|
||||
final uri = apiClient.createUriBuilder('/api/v1/fs/contents/${r.id}:');
|
||||
uri.queryParameters['download'] = '';
|
||||
if (version != null) {
|
||||
uri.queryParameters['version'] = version.id;
|
||||
}
|
||||
web.HTMLAnchorElement()
|
||||
..target = '_blank'
|
||||
..href = uri.toString()
|
||||
..download = r.name
|
||||
..download = version == null ? r.name : '${r.name}-${version.created.toIso8601String()}'
|
||||
..click();
|
||||
return true;
|
||||
}
|
||||
|
||||
class DownloadManager with ChangeNotifier {
|
||||
Future<void> downloadResource(PhylumAccount account, Resource r) async {}
|
||||
Future<void> downloadResource(PhylumAccount account, Resource r, {String? versionId}) async {}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import 'package:drift/drift.dart' show TableOrViewStatements, OrderingTerm;
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:phylum/integrations/download_manager.dart';
|
||||
import 'package:phylum/libphylum/db/db.dart';
|
||||
import 'package:phylum/libphylum/db/resource_helpers.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
import 'package:phylum/util/file_size.dart';
|
||||
import 'package:phylum/util/time.dart';
|
||||
@@ -39,7 +41,13 @@ class ResourceVersionsView extends StatelessWidget {
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
IconButton(icon: Icon(Icons.remove_red_eye), onPressed: () {}),
|
||||
IconButton(icon: Icon(Icons.download), onPressed: () {}),
|
||||
IconButton(
|
||||
icon: Icon(Icons.download),
|
||||
onPressed: () async {
|
||||
final r = await account.db.getResource(resourceId);
|
||||
if (r == null || !context.mounted) return;
|
||||
downloadResource(context, r, version: v);
|
||||
}),
|
||||
],
|
||||
),
|
||||
)),
|
||||
|
||||
Reference in New Issue
Block a user