Skip to content

Commit 6ed9eac

Browse files
author
Igor Demyanov
committed
support web upload file
1 parent 8b2a4ce commit 6ed9eac

6 files changed

Lines changed: 25 additions & 16 deletions

File tree

backend/lib/src/service/slideshow/slideshow_config.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class SlideShowConfig {
3636
action: SlideshowAction.pause,
3737
minPressingMs: 200,
3838
),
39-
hintOffsetX: 320,
39+
hintOffsetX: 2000,
4040
hintOffsetY: 20,
4141
);
4242
}
@@ -123,7 +123,7 @@ class SlideShowButtons {
123123
SlideShowButtonConfig button2;
124124
SlideShowButtonConfig button3;
125125

126-
@JsonKey(defaultValue: 320)
126+
@JsonKey(defaultValue: 2000)
127127
int hintOffsetX;
128128
@JsonKey(defaultValue: 20)
129129
int hintOffsetY;

backend/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: 'dslideshow_backend'
2-
version: 9.1.0
2+
version: 9.1.0+1
33
description: A sample command-line application
44
publish_to: none
55
environment:

common/lib/version.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
abstract class ApplicationInfo{
2-
static const String frontendVersion = '9.0.1+1';
3-
static const String backendVersion = '9.0.1+1';
2+
static const String frontendVersion = '9.1.0+1';
3+
static const String backendVersion = '9.1.0+1';
44
}

config_app/lib/features/upload/presentation/bloc/upload_queue_bloc.dart

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:config_app/features/upload/domain/upload_task.dart';
66
import 'package:config_app/src/web_client/web_client.dart';
77
import 'package:file_picker/file_picker.dart';
88
import 'package:freezed_annotation/freezed_annotation.dart';
9+
import 'package:logging/logging.dart';
910
import 'package:uuid/uuid.dart';
1011
import 'package:path/path.dart' as p;
1112
// Замените на ваш реальный WebClient
@@ -23,6 +24,8 @@ sealed class UploadQueueState with _$UploadQueueState {
2324

2425
// --- BLOC ---
2526
class UploadQueueBloc extends Bloc<UploadQueueEvent, UploadQueueState> {
27+
static final _log = Logger('UploadQueueBloc');
28+
2629
final RealtimeService client;
2730

2831
static const int _maxConcurrentUploads = 2; // Константа параллелизма
@@ -41,6 +44,7 @@ class UploadQueueBloc extends Bloc<UploadQueueEvent, UploadQueueState> {
4144

4245
Future<void> _onAddPlatformFiles(
4346
_AddPlatformFiles event, Emitter<UploadQueueState> emit) async {
47+
_log.info("_onAddPlatformFiles: files = ${event.files.length}");
4448
final newTasks = event.files.map((file) {
4549
String serverPath = p.relative(file.name, from: '');
4650
return UploadTask(
@@ -197,27 +201,33 @@ class UploadQueueBloc extends Bloc<UploadQueueEvent, UploadQueueState> {
197201
// Поэтому, визуально слот "занимается" только когда прилетит первый прогресс или мы сделаем событие Started.
198202
// Добавим специальный метод в bloc для старта, чтобы обновить UI.
199203
// Но для простоты примера, будем считать Uploading по первому байту.
200-
201-
void onProgress (sent, total) {
202-
final now = DateTime.now().millisecondsSinceEpoch;
203-
// Обновляем, только если прошло время ИЛИ если загрузка завершена (100%)
204-
if (now - lastUpdateTimestamp > throttleDuration || sent == total) {
205-
lastUpdateTimestamp = now;
206-
add(UploadQueueEvent.updateProgress(task.id, sent, total));
207-
}
208-
};
204+
205+
void onProgress(sent, total) {
206+
final now = DateTime.now().millisecondsSinceEpoch;
207+
// Обновляем, только если прошло время ИЛИ если загрузка завершена (100%)
208+
if (now - lastUpdateTimestamp > throttleDuration || sent == total) {
209+
lastUpdateTimestamp = now;
210+
add(UploadQueueEvent.updateProgress(task.id, sent, total));
211+
}
212+
}
213+
214+
;
209215
final wclient = WebClient(
210216
code: client.authCode,
211217
host: client.connectUri.host,
212218
port: client.connectUri.port);
213219

214220
if (task.bytes != null) {
221+
_log.info("_uploadFileRoutine ${task.id} is bytes");
222+
215223
await wclient.uploadMediaBytes(
216224
task.bytes!,
217225
task.serverPath,
218226
onProgress,
219227
);
220228
} else {
229+
_log.info("_uploadFileRoutine ${task.id} is file");
230+
221231
// Читаем файл
222232
final file = File(task.localPath);
223233
if (!await file.exists()) {

config_app/lib/features/upload/presentation/pages/upload_screen.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import 'package:flutter/foundation.dart';
1010
import 'package:flutter/material.dart';
1111
import 'package:flutter_bloc/flutter_bloc.dart';
1212
import 'package:path/path.dart' as p;
13-
import 'package:path_provider/path_provider.dart';
1413

1514
class UploadScreen extends StatelessWidget {
1615
static const _filesValue = 'files';

dslideshow_flutter/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: dslideshow_flutter
22
description: Flutter SlideShow
3-
version: 9.1.0
3+
version: 9.1.0+1
44
publish_to: none
55

66
environment:

0 commit comments

Comments
 (0)