Log all network requests
This commit is contained in:
parent
d840bec091
commit
34ffc9e5a1
12 changed files with 86 additions and 38 deletions
30
lib/core/network.dart
Normal file
30
lib/core/network.dart
Normal file
|
@ -0,0 +1,30 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:developer';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
|
||||
import 'package:super_logging/super_logging.dart';
|
||||
|
||||
class Network {
|
||||
final _dio = Dio();
|
||||
|
||||
Network._privateConstructor() {
|
||||
_dio.interceptors.add(PrettyDioLogger(
|
||||
requestHeader: false,
|
||||
responseHeader: false,
|
||||
responseBody: true,
|
||||
logPrint: (object) {
|
||||
log(object);
|
||||
SuperLogging.logFile.writeAsStringSync(
|
||||
object.toString() + "\n",
|
||||
encoding: Utf8Codec(allowMalformed: true),
|
||||
flush: true,
|
||||
mode: FileMode.append,
|
||||
);
|
||||
}));
|
||||
}
|
||||
static Network instance = Network._privateConstructor();
|
||||
|
||||
Dio getDio() => _dio;
|
||||
}
|
|
@ -17,11 +17,9 @@ final _logger = Logger("main");
|
|||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
await SuperLogging.main(LogConfig(
|
||||
body: _main,
|
||||
logDirPath: (await getTemporaryDirectory()).path + "/logs",
|
||||
enableInDebugMode: true,
|
||||
));
|
||||
SuperLogging.logDirPath = (await getTemporaryDirectory()).path + "/logs";
|
||||
SuperLogging.enableInDebugMode = true;
|
||||
await SuperLogging.main(_main);
|
||||
}
|
||||
|
||||
void _main() async {
|
||||
|
|
|
@ -8,6 +8,7 @@ import 'package:logging/logging.dart';
|
|||
|
||||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/core/network.dart';
|
||||
import 'package:photos/db/collections_db.dart';
|
||||
import 'package:photos/db/files_db.dart';
|
||||
import 'package:photos/events/collection_updated_event.dart';
|
||||
|
@ -24,6 +25,7 @@ class CollectionsService {
|
|||
CollectionsDB _db;
|
||||
FilesDB _filesDB;
|
||||
Configuration _config;
|
||||
final _dio = Network.instance.getDio();
|
||||
final _localCollections = Map<String, Collection>();
|
||||
final _collectionIDToCollections = Map<int, Collection>();
|
||||
final _cachedKeys = Map<int, Uint8List>();
|
||||
|
@ -79,7 +81,7 @@ class CollectionsService {
|
|||
}
|
||||
|
||||
Future<List<User>> getSharees(int collectionID) {
|
||||
return Dio()
|
||||
return _dio
|
||||
.get(
|
||||
Configuration.instance.getHttpEndpoint() + "/collections/sharees",
|
||||
queryParameters: {
|
||||
|
@ -101,7 +103,7 @@ class CollectionsService {
|
|||
Future<void> share(int collectionID, String email, String publicKey) {
|
||||
final encryptedKey = CryptoUtil.sealSync(
|
||||
getCollectionKey(collectionID), Sodium.base642bin(publicKey));
|
||||
return Dio()
|
||||
return _dio
|
||||
.post(
|
||||
Configuration.instance.getHttpEndpoint() + "/collections/share",
|
||||
data: {
|
||||
|
@ -116,7 +118,7 @@ class CollectionsService {
|
|||
}
|
||||
|
||||
Future<void> unshare(int collectionID, String email) {
|
||||
return Dio().post(
|
||||
return _dio.post(
|
||||
Configuration.instance.getHttpEndpoint() + "/collections/unshare",
|
||||
data: {
|
||||
"collectionID": collectionID,
|
||||
|
@ -145,7 +147,7 @@ class CollectionsService {
|
|||
}
|
||||
|
||||
Future<List<Collection>> _fetchCollections(int sinceTime) {
|
||||
return Dio()
|
||||
return _dio
|
||||
.get(
|
||||
Configuration.instance.getHttpEndpoint() + "/collections",
|
||||
queryParameters: {
|
||||
|
@ -228,7 +230,7 @@ class CollectionsService {
|
|||
file.uploadedFileID, file.encryptedKey, file.keyDecryptionNonce)
|
||||
.toMap());
|
||||
}
|
||||
return Dio()
|
||||
return _dio
|
||||
.post(
|
||||
Configuration.instance.getHttpEndpoint() + "/collections/add-files",
|
||||
data: params,
|
||||
|
@ -251,7 +253,7 @@ class CollectionsService {
|
|||
}
|
||||
params["fileIDs"].add(file.uploadedFileID);
|
||||
}
|
||||
await Dio().post(
|
||||
await _dio.post(
|
||||
Configuration.instance.getHttpEndpoint() + "/collections/remove-files",
|
||||
data: params,
|
||||
options:
|
||||
|
@ -263,7 +265,7 @@ class CollectionsService {
|
|||
}
|
||||
|
||||
Future<Collection> createAndCacheCollection(Collection collection) async {
|
||||
return Dio()
|
||||
return _dio
|
||||
.post(
|
||||
Configuration.instance.getHttpEndpoint() + "/collections",
|
||||
data: collection.toMap(),
|
||||
|
|
|
@ -3,6 +3,7 @@ import 'package:connectivity/connectivity.dart';
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/core/network.dart';
|
||||
import 'package:photos/db/files_db.dart';
|
||||
import 'package:photos/events/collection_updated_event.dart';
|
||||
import 'package:photos/events/sync_status_update_event.dart';
|
||||
|
@ -24,7 +25,7 @@ import 'package:photos/core/configuration.dart';
|
|||
|
||||
class SyncService {
|
||||
final _logger = Logger("SyncService");
|
||||
final _dio = Dio();
|
||||
final _dio = Network.instance.getDio();
|
||||
final _db = FilesDB.instance;
|
||||
final _uploader = FileUploader.instance;
|
||||
final _collectionsService = CollectionsService.instance;
|
||||
|
|
|
@ -4,6 +4,7 @@ import 'package:flutter/widgets.dart';
|
|||
import 'package:logging/logging.dart';
|
||||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/core/network.dart';
|
||||
import 'package:photos/db/public_keys_db.dart';
|
||||
|
||||
import 'package:photos/events/user_authenticated_event.dart';
|
||||
|
@ -16,7 +17,7 @@ import 'package:photos/utils/dialog_util.dart';
|
|||
import 'package:photos/utils/toast_util.dart';
|
||||
|
||||
class UserService {
|
||||
final _dio = Dio();
|
||||
final _dio = Network.instance.getDio();
|
||||
final _logger = Logger("UserAuthenticator");
|
||||
final _config = Configuration.instance;
|
||||
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
import 'dart:developer';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_typeahead/flutter_typeahead.dart';
|
||||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/network.dart';
|
||||
import 'package:photos/models/location.dart';
|
||||
import 'package:photos/ui/loading_widget.dart';
|
||||
import 'package:photos/ui/location_search_results_page.dart';
|
||||
|
@ -41,15 +40,16 @@ class _LocationSearchWidgetState extends State<LocationSearchWidget> {
|
|||
return null;
|
||||
}
|
||||
_searchString = pattern;
|
||||
return Dio()
|
||||
return Network.instance
|
||||
.getDio()
|
||||
.get(
|
||||
Configuration.instance.getHttpEndpoint() + "/search/location",
|
||||
queryParameters: {
|
||||
"query": pattern,
|
||||
},
|
||||
options: Options(
|
||||
headers: {"X-Auth-Token": Configuration.instance.getToken()}),
|
||||
)
|
||||
Configuration.instance.getHttpEndpoint() + "/search/location",
|
||||
queryParameters: {
|
||||
"query": pattern,
|
||||
},
|
||||
options: Options(
|
||||
headers: {"X-Auth-Token": Configuration.instance.getToken()}),
|
||||
)
|
||||
.then((response) {
|
||||
if (_searchString == pattern) {
|
||||
// Query has not changed
|
||||
|
|
|
@ -2,7 +2,6 @@ import 'dart:io';
|
|||
|
||||
import 'package:archive/archive_io.dart';
|
||||
import 'package:crisp/crisp.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
@ -11,6 +10,7 @@ import 'package:flutter_sodium/flutter_sodium.dart';
|
|||
import 'package:logging/logging.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/network.dart';
|
||||
import 'package:photos/db/files_db.dart';
|
||||
import 'package:photos/ui/loading_widget.dart';
|
||||
import 'package:photos/utils/dialog_util.dart';
|
||||
|
@ -56,6 +56,7 @@ class UsageWidget extends StatefulWidget {
|
|||
|
||||
class UsageWidgetState extends State<UsageWidget> {
|
||||
double _usageInGBs;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_getUsage();
|
||||
|
@ -135,7 +136,7 @@ class UsageWidgetState extends State<UsageWidget> {
|
|||
}
|
||||
|
||||
void _getUsage() {
|
||||
Dio().get(
|
||||
Network.instance.getDio().get(
|
||||
Configuration.instance.getHttpEndpoint() + "/billing/usage",
|
||||
queryParameters: {
|
||||
"startTime": 0,
|
||||
|
|
|
@ -5,6 +5,7 @@ import 'package:flutter_sodium/flutter_sodium.dart';
|
|||
import 'package:logging/logging.dart';
|
||||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/core/network.dart';
|
||||
import 'package:photos/db/files_db.dart';
|
||||
import 'package:photos/events/collection_updated_event.dart';
|
||||
import 'package:photos/events/remote_sync_event.dart';
|
||||
|
@ -14,7 +15,7 @@ import 'package:photos/utils/file_util.dart';
|
|||
|
||||
class DiffFetcher {
|
||||
final _logger = Logger("FileDownloader");
|
||||
final _dio = Dio();
|
||||
final _dio = Network.instance.getDio();
|
||||
|
||||
Future<List<File>> getEncryptedFilesDiff(
|
||||
int collectionID, int sinceTime, int limit) async {
|
||||
|
|
|
@ -8,6 +8,7 @@ import 'package:flutter_sodium/flutter_sodium.dart';
|
|||
import 'package:logging/logging.dart';
|
||||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/constants.dart';
|
||||
import 'package:photos/core/network.dart';
|
||||
import 'package:photos/db/files_db.dart';
|
||||
import 'package:photos/models/file.dart';
|
||||
import 'package:photos/models/location.dart';
|
||||
|
@ -17,7 +18,7 @@ import 'package:photos/utils/crypto_util.dart';
|
|||
|
||||
class FileUploader {
|
||||
final _logger = Logger("FileUploader");
|
||||
final _dio = Dio();
|
||||
final _dio = Network.instance.getDio();
|
||||
final _queue = LinkedHashMap<int, FileUploadItem>();
|
||||
final _maximumConcurrentUploads = 4;
|
||||
int _currentlyUploading = 0;
|
||||
|
@ -258,7 +259,7 @@ class FileUploader {
|
|||
|
||||
Future<void> _fetchUploadURLs() {
|
||||
if (_uploadURLFetchInProgress == null) {
|
||||
_uploadURLFetchInProgress = Dio()
|
||||
_uploadURLFetchInProgress = _dio
|
||||
.get(
|
||||
Configuration.instance.getHttpEndpoint() + "/files/upload-urls",
|
||||
queryParameters: {
|
||||
|
@ -282,7 +283,7 @@ class FileUploader {
|
|||
final fileSize = file.lengthSync().toString();
|
||||
final startTime = DateTime.now().millisecondsSinceEpoch;
|
||||
_logger.info("Putting file of size " + fileSize + " to " + uploadURL.url);
|
||||
await Dio().put(uploadURL.url,
|
||||
await _dio.put(uploadURL.url,
|
||||
data: file.openRead(),
|
||||
options: Options(headers: {
|
||||
Headers.contentLengthHeader: await file.length(),
|
||||
|
|
|
@ -15,6 +15,7 @@ import 'package:photos/core/cache/video_cache_manager.dart';
|
|||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/constants.dart';
|
||||
import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/core/network.dart';
|
||||
import 'package:photos/db/files_db.dart';
|
||||
import 'package:photos/events/collection_updated_event.dart';
|
||||
import 'package:photos/models/file.dart';
|
||||
|
@ -188,12 +189,13 @@ Future<io.File> _downloadAndDecrypt(File file, BaseCacheManager cacheManager,
|
|||
final encryptedFile = io.File(encryptedFilePath);
|
||||
final decryptedFile = io.File(decryptedFilePath);
|
||||
final startTime = DateTime.now().millisecondsSinceEpoch;
|
||||
return Dio()
|
||||
return Network.instance
|
||||
.getDio()
|
||||
.download(
|
||||
file.getDownloadUrl(),
|
||||
encryptedFilePath,
|
||||
onReceiveProgress: progressCallback,
|
||||
)
|
||||
file.getDownloadUrl(),
|
||||
encryptedFilePath,
|
||||
onReceiveProgress: progressCallback,
|
||||
)
|
||||
.then((response) async {
|
||||
if (response.statusCode != 200) {
|
||||
logger.warning("Could not download file: ", response.toString());
|
||||
|
@ -232,7 +234,10 @@ Future<io.File> _downloadAndDecryptThumbnail(File file) async {
|
|||
final temporaryPath = Configuration.instance.getTempDirectory() +
|
||||
file.generatedID.toString() +
|
||||
"_thumbnail.decrypted";
|
||||
return Dio().download(file.getThumbnailUrl(), temporaryPath).then((_) async {
|
||||
return Network.instance
|
||||
.getDio()
|
||||
.download(file.getThumbnailUrl(), temporaryPath)
|
||||
.then((_) async {
|
||||
final encryptedFile = io.File(temporaryPath);
|
||||
final thumbnailDecryptionKey = decryptFileKey(file);
|
||||
final data = CryptoUtil.decryptChaCha(
|
||||
|
|
|
@ -499,6 +499,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.3"
|
||||
pretty_dio_logger:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: pretty_dio_logger
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
process:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -650,7 +657,7 @@ packages:
|
|||
name: super_logging
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.4"
|
||||
version: "2.0.1"
|
||||
synchronized:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
@ -37,7 +37,7 @@ dependencies:
|
|||
visibility_detector: ^0.1.5
|
||||
event_bus: ^1.1.1
|
||||
sentry: ">=3.0.0 <4.0.0"
|
||||
super_logging: ^1.0.0
|
||||
super_logging: ^2.0.1
|
||||
archive: ^2.0.11
|
||||
flutter_email_sender: ^3.0.1
|
||||
like_button: ^0.2.0
|
||||
|
@ -61,6 +61,7 @@ dependencies:
|
|||
convex_bottom_bar: ^2.6.0
|
||||
scrollable_positioned_list: ^0.1.8
|
||||
connectivity: ^2.0.1
|
||||
pretty_dio_logger: ^1.1.1
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
|
Loading…
Add table
Reference in a new issue