瀏覽代碼

video loader bug fix for files in which diff is not fetched yet

ashilkn 2 年之前
父節點
當前提交
0e3d6afc76
共有 2 個文件被更改,包括 50 次插入0 次删除
  1. 37 0
      lib/services/files_service.dart
  2. 13 0
      lib/ui/viewer/file/video_widget.dart

+ 37 - 0
lib/services/files_service.dart

@@ -0,0 +1,37 @@
+// ignore: import_of_legacy_library_into_null_safe
+import 'package:dio/dio.dart';
+import 'package:logging/logging.dart';
+import 'package:photos/core/configuration.dart';
+import 'package:photos/core/network.dart';
+
+class FilesService {
+  late Configuration _config;
+  late Dio _dio;
+  late Logger _logger;
+  FilesService._privateConstructor() {
+    _config = Configuration.instance;
+    _dio = Network.instance.getDio();
+    _logger = Logger("FilesService");
+  }
+  static final FilesService instance = FilesService._privateConstructor();
+
+  Future<int> getFileSize(int uploadedFileID) async {
+    try {
+      final response = await _dio.post(
+        Configuration.instance.getHttpEndpoint() + "/files/size",
+        options: Options(
+          headers: {
+            "X-Auth-Token": _config.getToken(),
+          },
+        ),
+        data: {
+          "fileIDs": [uploadedFileID],
+        },
+      );
+      return response.data["size"];
+    } catch (e) {
+      _logger.severe(e);
+      rethrow;
+    }
+  }
+}

+ 13 - 0
lib/ui/viewer/file/video_widget.dart

@@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
 import 'package:logging/logging.dart';
 import 'package:photos/core/constants.dart';
 import 'package:photos/models/file.dart';
+import 'package:photos/services/files_service.dart';
 import 'package:photos/ui/viewer/file/thumbnail_widget.dart';
 import 'package:photos/ui/viewer/file/video_controls.dart';
 import 'package:photos/utils/file_util.dart';
@@ -45,6 +46,7 @@ class _VideoWidgetState extends State<VideoWidget> {
     super.initState();
     if (widget.file.isRemoteFile) {
       _loadNetworkVideo();
+      _setFileSizeIfNull();
     } else if (widget.file.isSharedMediaToAppSandbox) {
       final localFile = io.File(getSharedMediaFilePath(widget.file));
       if (localFile.existsSync()) {
@@ -68,6 +70,17 @@ class _VideoWidgetState extends State<VideoWidget> {
     }
   }
 
+  void _setFileSizeIfNull() {
+    if (widget.file.fileSize == null) {
+      FilesService.instance
+          .getFileSize(widget.file.uploadedFileID)
+          .then((value) {
+        widget.file.fileSize = value;
+        setState(() {});
+      });
+    }
+  }
+
   void _loadNetworkVideo() {
     getFileFromServer(
       widget.file,