diff --git a/CHANGELOG.md b/CHANGELOG.md
index dab8b69..41c538d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+## 0.0.74
+
+- Improving uploading speed
+- Fixing issue with ffmpeg for android
+
## 0.0.73
- Integrated QR code scanner in the main camera
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 1ed6135..d00d31e 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -49,6 +49,8 @@
FirebaseAutomaticScreenReportingEnabled
+ FlutterDeepLinkingEnabled
+
LSRequiresIPhoneOS
ITSAppUsesNonExemptEncryption
diff --git a/lib/src/services/api/mediafiles/upload.service.dart b/lib/src/services/api/mediafiles/upload.service.dart
index a6b5672..0c2e930 100644
--- a/lib/src/services/api/mediafiles/upload.service.dart
+++ b/lib/src/services/api/mediafiles/upload.service.dart
@@ -1,11 +1,13 @@
import 'dart:async';
import 'dart:convert';
import 'package:background_downloader/background_downloader.dart';
+import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:cryptography_flutter_plus/cryptography_flutter_plus.dart';
import 'package:cryptography_plus/cryptography_plus.dart';
import 'package:drift/drift.dart';
import 'package:fixnum/fixnum.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
+import 'package:http/http.dart' as http;
import 'package:mutex/mutex.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/constants/secure_storage_keys.dart';
@@ -14,6 +16,7 @@ import 'package:twonly/src/database/tables/messages.table.dart';
import 'package:twonly/src/database/twonly.db.dart';
import 'package:twonly/src/model/protobuf/api/http/http_requests.pb.dart';
import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart';
+import 'package:twonly/src/services/api/mediafiles/media_background.service.dart';
import 'package:twonly/src/services/api/messages.dart';
import 'package:twonly/src/services/mediafiles/mediafile.service.dart';
import 'package:twonly/src/utils/log.dart';
@@ -322,10 +325,62 @@ Future _uploadUploadRequest(MediaFileService media) async {
},
);
- Log.info('Enqueue upload task: ${task.taskId}');
+ final connectivityResult = await Connectivity().checkConnectivity();
- await FileDownloader().enqueue(task);
-
- await media.setUploadState(UploadState.backgroundUploadTaskStarted);
+ if (!connectivityResult.contains(ConnectivityResult.mobile) &&
+ !connectivityResult.contains(ConnectivityResult.wifi)) {
+ // no internet, directly put it into the background...
+ await FileDownloader().enqueue(task);
+ await media.setUploadState(UploadState.backgroundUploadTaskStarted);
+ Log.info('Enqueue upload task: ${task.taskId}');
+ } else {
+ unawaited(uploadFileFastOrEnqueue(task, media));
+ }
});
}
+
+Future uploadFileFastOrEnqueue(
+ UploadTask task,
+ MediaFileService media,
+) async {
+ final requestMultipart = http.MultipartRequest(
+ 'POST',
+ Uri.parse(task.url),
+ );
+
+ requestMultipart.headers.addAll(task.headers);
+
+ requestMultipart.files.add(
+ await http.MultipartFile.fromPath(
+ 'file',
+ await task.filePath(),
+ filename: 'upload',
+ ),
+ );
+
+ try {
+ Log.info('Uploading fast: ${task.taskId}');
+ final response =
+ await requestMultipart.send().timeout(const Duration(seconds: 4));
+ var status = TaskStatus.failed;
+ if (response.statusCode == 200) {
+ status = TaskStatus.complete;
+ } else if (response.statusCode == 404) {
+ status = TaskStatus.notFound;
+ }
+ await handleUploadStatusUpdate(
+ TaskStatusUpdate(
+ task,
+ status,
+ null,
+ null,
+ null,
+ response.statusCode,
+ ),
+ );
+ } catch (e) {
+ Log.info('Upload failed enqueuing task...');
+ await FileDownloader().enqueue(task);
+ await media.setUploadState(UploadState.backgroundUploadTaskStarted);
+ }
+}
diff --git a/lib/src/services/mediafiles/compression.service.dart b/lib/src/services/mediafiles/compression.service.dart
index b87757c..d2e492b 100644
--- a/lib/src/services/mediafiles/compression.service.dart
+++ b/lib/src/services/mediafiles/compression.service.dart
@@ -76,17 +76,29 @@ Future compressAndOverlayVideo(MediaFileService media) async {
var overLayCommand = '';
if (media.overlayImagePath.existsSync()) {
- overLayCommand =
- '-i "${media.overlayImagePath.path}" -filter_complex "[1:v][0:v]scale2ref=w=ref_w:h=ref_h[ovr][base];[base][ovr]overlay=0:0"';
+ if (Platform.isAndroid) {
+ overLayCommand =
+ '-i "${media.overlayImagePath.path}" -filter_complex "[1:v]format=yuva420p[ovr_in];[0:v]format=yuv420p[base_in];[ovr_in][base_in]scale2ref=w=rw:h=rh[ovr_out][base_out];[base_out][ovr_out]overlay=0:0"';
+ } else {
+ overLayCommand =
+ '-i "${media.overlayImagePath.path}" -filter_complex "[1:v][0:v]scale2ref=w=ref_w:h=ref_h[ovr][base];[base][ovr]overlay=0:0"';
+ }
}
final stopwatch = Stopwatch()..start();
+
+ var additionalParams = '';
+
+ if (Platform.isAndroid) {
+ additionalParams += ' -c:v libx264';
+ }
+
var command =
- '-i "${media.originalPath.path}" $overLayCommand -map "0:a?" -preset veryfast -crf 28 -c:a aac -b:a 64k "${media.ffmpegOutputPath.path}"';
+ '-i "${media.originalPath.path}" $overLayCommand -map "0:a?" $additionalParams -preset veryfast -crf 28 -c:a aac -b:a 64k "${media.ffmpegOutputPath.path}"';
if (media.removeAudio) {
command =
- '-i "${media.originalPath.path}" $overLayCommand -preset veryfast -crf 28 -an "${media.ffmpegOutputPath.path}"';
+ '-i "${media.originalPath.path}" $overLayCommand $additionalParams -preset veryfast -crf 28 -an "${media.ffmpegOutputPath.path}"';
}
final session = await FFmpegKit.execute(command);
diff --git a/lib/src/views/camera/camera_preview_components/main_camera_controller.dart b/lib/src/views/camera/camera_preview_components/main_camera_controller.dart
index 9092292..6f050fe 100644
--- a/lib/src/views/camera/camera_preview_components/main_camera_controller.dart
+++ b/lib/src/views/camera/camera_preview_components/main_camera_controller.dart
@@ -220,10 +220,12 @@ class MainCameraController {
}
}
} else {
- if (scannedNewProfiles[profile.userId.toInt()] == null) {
- scannedNewProfiles[profile.userId.toInt()] = ScannedNewProfile(
- profile: profile,
- );
+ if (profile.username != gUser.username) {
+ if (scannedNewProfiles[profile.userId.toInt()] == null) {
+ scannedNewProfiles[profile.userId.toInt()] = ScannedNewProfile(
+ profile: profile,
+ );
+ }
}
}
}
diff --git a/pubspec.yaml b/pubspec.yaml
index 474ef7d..9af96d9 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@ description: "twonly, a privacy-friendly way to connect with friends through sec
publish_to: 'none'
-version: 0.0.73+73
+version: 0.0.74+74
environment:
sdk: ^3.6.0