diff --git a/lib/services/files_service.dart b/lib/services/files_service.dart new file mode 100644 index 000000000..16718b336 --- /dev/null +++ b/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 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; + } + } +} diff --git a/lib/ui/viewer/file/video_widget.dart b/lib/ui/viewer/file/video_widget.dart index d319a0ed4..da5af0032 100644 --- a/lib/ui/viewer/file/video_widget.dart +++ b/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 { 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 { } } + 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,