Documents
This commit is contained in:
parent
097866b269
commit
af8a7dab28
|
|
@ -1,12 +1,16 @@
|
|||
// Dart imports:
|
||||
import 'dart:async';
|
||||
import 'dart:io' as file;
|
||||
import 'dart:io';
|
||||
|
||||
// Flutter imports:
|
||||
import 'package:built_collection/built_collection.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
// Package imports:
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
|
||||
|
||||
// Project imports:
|
||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||
|
|
@ -16,9 +20,15 @@ import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:pinch_zoom/pinch_zoom.dart';
|
||||
import 'package:printing/printing.dart';
|
||||
|
||||
import 'package:invoiceninja_flutter/utils/web_stub.dart'
|
||||
if (dart.library.html) 'package:invoiceninja_flutter/utils/web.dart';
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
|
||||
class ViewDocumentList implements PersistUI {
|
||||
ViewDocumentList({
|
||||
this.force = false,
|
||||
|
|
@ -406,6 +416,46 @@ void handleDocumentAction(
|
|||
showDocument();
|
||||
}
|
||||
break;
|
||||
case EntityAction.download:
|
||||
void downloadDocument() async {
|
||||
final DocumentEntity document =
|
||||
store.state.documentState.map[documentIds.first];
|
||||
if (kIsWeb) {
|
||||
WebUtils.downloadBinaryFile(document.name, document.data);
|
||||
} else {
|
||||
final directory = await (isDesktopOS()
|
||||
? getDownloadsDirectory()
|
||||
: getApplicationDocumentsDirectory());
|
||||
|
||||
String filePath =
|
||||
'${directory.path}${file.Platform.pathSeparator}${document.name}';
|
||||
|
||||
if (file.File(filePath).existsSync()) {
|
||||
final extension = document.name.split('.').last;
|
||||
final timestamp = DateTime.now().millisecondsSinceEpoch;
|
||||
filePath =
|
||||
filePath.replaceFirst('.$extension', '_$timestamp.$extension');
|
||||
}
|
||||
|
||||
await File(filePath).writeAsBytes(document.data);
|
||||
|
||||
if (isDesktopOS()) {
|
||||
showToast(localization.fileSavedInPath
|
||||
.replaceFirst(':path', directory.path));
|
||||
} else {
|
||||
await Share.shareXFiles([XFile(filePath)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (document.data == null) {
|
||||
store.dispatch(LoadDocumentData(
|
||||
documentId: document.id,
|
||||
completer: Completer<void>()
|
||||
..future.then((value) => downloadDocument())));
|
||||
} else {
|
||||
downloadDocument();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,3 @@
|
|||
// Dart imports:
|
||||
import 'dart:io';
|
||||
import 'dart:io' as file;
|
||||
|
||||
// Flutter imports:
|
||||
import 'package:desktop_drop/desktop_drop.dart';
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
|
|
@ -11,8 +7,6 @@ import 'package:flutter/material.dart';
|
|||
// Package imports:
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:http/http.dart';
|
||||
import 'package:image_cropper/image_cropper.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
|
|
@ -20,13 +14,10 @@ import 'package:invoiceninja_flutter/redux/document/document_actions.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/dashed_rect.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
|
||||
// Project imports:
|
||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||
import 'package:invoiceninja_flutter/data/web_client.dart';
|
||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/icon_text.dart';
|
||||
|
|
@ -39,9 +30,6 @@ import 'package:invoiceninja_flutter/utils/icons.dart';
|
|||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
||||
|
||||
import 'package:invoiceninja_flutter/utils/web_stub.dart'
|
||||
if (dart.library.html) 'package:invoiceninja_flutter/utils/web.dart';
|
||||
|
||||
class DocumentGrid extends StatefulWidget {
|
||||
const DocumentGrid({
|
||||
@required this.documents,
|
||||
|
|
@ -318,41 +306,8 @@ class DocumentTile extends StatelessWidget {
|
|||
handleDocumentAction(context, [document],
|
||||
EntityAction.viewDocument);
|
||||
} else if (value == localization.download) {
|
||||
final http.Response response = await WebClient()
|
||||
.get(document.url, state.credentials.token,
|
||||
rawResponse: true);
|
||||
|
||||
if (kIsWeb) {
|
||||
WebUtils.downloadBinaryFile(
|
||||
document.name, response.bodyBytes);
|
||||
} else {
|
||||
final directory = await (isDesktopOS()
|
||||
? getDownloadsDirectory()
|
||||
: getApplicationDocumentsDirectory());
|
||||
|
||||
String filePath =
|
||||
'${directory.path}${file.Platform.pathSeparator}${document.name}';
|
||||
|
||||
if (file.File(filePath).existsSync()) {
|
||||
final extension =
|
||||
document.name.split('.').last;
|
||||
final timestamp =
|
||||
DateTime.now().millisecondsSinceEpoch;
|
||||
filePath = filePath.replaceFirst(
|
||||
'.$extension',
|
||||
'_$timestamp.$extension');
|
||||
}
|
||||
|
||||
await File(filePath)
|
||||
.writeAsBytes(response.bodyBytes);
|
||||
|
||||
if (isDesktopOS()) {
|
||||
showToast(localization.fileSavedInPath
|
||||
.replaceFirst(':path', directory.path));
|
||||
} else {
|
||||
await Share.shareXFiles([XFile(filePath)]);
|
||||
}
|
||||
}
|
||||
handleDocumentAction(
|
||||
context, [document], EntityAction.download);
|
||||
} else if (value == localization.delete) {
|
||||
confirmCallback(
|
||||
context: context,
|
||||
|
|
|
|||
Loading…
Reference in New Issue