Files
fcs/lib/pages/pickup/model/pickup_model.dart
2021-10-09 09:27:51 +06:30

86 lines
2.3 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'dart:math';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:fcs/data/services/services.dart';
import 'package:fcs/domain/constants.dart';
import 'package:fcs/domain/entities/package.dart';
import 'package:fcs/domain/entities/pickup.dart';
import 'package:fcs/domain/entities/processing.dart';
import 'package:fcs/helpers/firebase_helper.dart';
import 'package:fcs/pages/main/model/base_model.dart';
import 'package:fcs/pagination/paginator_listener.dart';
import 'package:logging/logging.dart';
import 'package:path/path.dart' as Path;
class PickupModel extends BaseModel {
final log = Logger('PickupModel');
StreamSubscription<QuerySnapshot>? listener;
PaginatorListener<Package>? pickups;
int _menuSelectedIndex = 1;
set menuSelectedIndex(int index) {
_menuSelectedIndex = index;
// _loadPackages(_menuSelectedIndex == 2);
// _loadCustomerPackages(_menuSelectedIndex == 2);
notifyListeners();
}
int get menuSelectedIndex => _menuSelectedIndex;
void initUser(user) {
super.initUser(user);
}
void privilegeChanged() {
if (user != null) {
_initData();
}
}
Future<void> _initData() async {}
@override
logout() async {
if (listener != null) await listener!.cancel();
if (pickups != null) pickups!.close();
// pickups = [];
}
Future<void> complete(
Pickup pickup, List<File?> files, List<String?> deletedUrls) async {
for (String? url in deletedUrls) {
pickup.photoUrls.remove(url);
}
// check files count
var count = (pickup.photoUrls.length) + files.length - (deletedUrls.length);
if (count > uploadPhotoLimit)
throw Exception("Exceed number of file upload");
List<String> uploadedURLs = [];
String path = Path.join(pickups_files_path, pickup.id);
uploadedURLs = await uploadFiles(path, files);
pickup.photoUrls.addAll(uploadedURLs);
pickup.photoUrls.removeWhere((e) => deletedUrls.contains(e));
try {
await Services.instance.pickupService.completePickup(pickup);
} catch (e) {
// delete newly uploaded photos if fails
try {
deleteStorageFromUrls(uploadedURLs);
pickup.photoUrls.removeWhere((i) => uploadedURLs.contains(i));
} catch (e) {}
throw e;
}
return deleteStorageFromUrls(deletedUrls);
}
}