Abstract out the logging

This way moving away from Fimber will be much easier.
This commit is contained in:
Vishesh Handa
2020-04-04 11:24:28 +02:00
parent 56dcb1cb2e
commit bb0e574495
20 changed files with 140 additions and 102 deletions

View File

@ -1,11 +1,11 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:fimber/fimber.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:git_bindings/git_bindings.dart'; import 'package:git_bindings/git_bindings.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/logger.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
// //
@ -16,10 +16,10 @@ Future migrateGitRepo({
@required String fromGitBasePath, @required String fromGitBasePath,
@required String toGitBaseFolder, @required String toGitBaseFolder,
}) async { }) async {
Fimber.d("migrateGitRepo $fromGitBasePath $toGitBaseFolder"); Log.d("migrateGitRepo $fromGitBasePath $toGitBaseFolder");
var fromBasePath = p.join(gitBasePath, fromGitBasePath); var fromBasePath = p.join(gitBasePath, fromGitBasePath);
var toGitRepoPath = p.join(gitBasePath, toGitBaseFolder); var toGitRepoPath = p.join(gitBasePath, toGitBaseFolder);
Fimber.d("toGitRemotePath $toGitRepoPath"); Log.d("toGitRemotePath $toGitRepoPath");
final dir = Directory(fromBasePath); final dir = Directory(fromBasePath);
var lister = dir.list(recursive: false); var lister = dir.list(recursive: false);
@ -31,7 +31,7 @@ Future migrateGitRepo({
var fileName = p.basename(file.path); var fileName = p.basename(file.path);
var toPath = p.join(toGitRepoPath, fileName); var toPath = p.join(toGitRepoPath, fileName);
Fimber.d("Migrating " + file.path + " --> " + toPath); Log.d("Migrating " + file.path + " --> " + toPath);
await file.copy(toPath); await file.copy(toPath);
@ -43,5 +43,5 @@ Future migrateGitRepo({
await gitRepo.add(fileName); await gitRepo.add(fileName);
await gitRepo.commit(message: "Added Note"); await gitRepo.commit(message: "Added Note");
} }
Fimber.d("migrateGitRepo: Done"); Log.d("migrateGitRepo: Done");
} }

View File

@ -2,11 +2,11 @@ import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:fimber/fimber.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:gitjournal/utils/logger.dart';
import 'githost.dart'; import 'githost.dart';
class GitHub implements GitHost { class GitHub implements GitHost {
@ -20,24 +20,24 @@ class GitHub implements GitHost {
void init(OAuthCallback callback) { void init(OAuthCallback callback) {
Future _handleMessages(MethodCall call) async { Future _handleMessages(MethodCall call) async {
if (call.method != "onURL") { if (call.method != "onURL") {
Fimber.d("GitHub Unknown Call: " + call.method); Log.d("GitHub Unknown Call: " + call.method);
return; return;
} }
closeWebView(); closeWebView();
Fimber.d("GitHub: Called onUrl with " + call.arguments.toString()); Log.d("GitHub: Called onUrl with " + call.arguments.toString());
String url = call.arguments["URL"]; String url = call.arguments["URL"];
var uri = Uri.parse(url); var uri = Uri.parse(url);
var authCode = uri.queryParameters['code']; var authCode = uri.queryParameters['code'];
if (authCode == null) { if (authCode == null) {
Fimber.d("GitHub: Missing auth code. Now what?"); Log.d("GitHub: Missing auth code. Now what?");
callback(GitHostException.OAuthFailed); callback(GitHostException.OAuthFailed);
} }
_accessCode = await _getAccessCode(authCode); _accessCode = await _getAccessCode(authCode);
if (_accessCode == null || _accessCode.isEmpty) { if (_accessCode == null || _accessCode.isEmpty) {
Fimber.d("GitHub: AccessCode is invalid: " + _accessCode); Log.d("GitHub: AccessCode is invalid: " + _accessCode);
callback(GitHostException.OAuthFailed); callback(GitHostException.OAuthFailed);
} }
@ -45,7 +45,7 @@ class GitHub implements GitHost {
} }
_platform.setMethodCallHandler(_handleMessages); _platform.setMethodCallHandler(_handleMessages);
Fimber.d("GitHub: Installed Handler"); Log.d("GitHub: Installed Handler");
} }
Future<String> _getAccessCode(String authCode) async { Future<String> _getAccessCode(String authCode) async {
@ -54,13 +54,13 @@ class GitHub implements GitHost {
var response = await http.post(url); var response = await http.post(url);
if (response.statusCode != 200) { if (response.statusCode != 200) {
Fimber.d("Github getAccessCode: Invalid response " + Log.d("Github getAccessCode: Invalid response " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);
throw GitHostException.OAuthFailed; throw GitHostException.OAuthFailed;
} }
Fimber.d("GithubResponse: " + response.body); Log.d("GithubResponse: " + response.body);
var map = Uri.splitQueryString(response.body); var map = Uri.splitQueryString(response.body);
return map["access_token"]; return map["access_token"];
@ -89,7 +89,7 @@ class GitHub implements GitHost {
var response = await http.get(url, headers: headers); var response = await http.get(url, headers: headers);
if (response.statusCode != 200) { if (response.statusCode != 200) {
Fimber.d("Github listRepos: Invalid response " + Log.d("Github listRepos: Invalid response " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);
@ -128,7 +128,7 @@ class GitHub implements GitHost {
var response = var response =
await http.post(url, headers: headers, body: json.encode(data)); await http.post(url, headers: headers, body: json.encode(data));
if (response.statusCode != 201) { if (response.statusCode != 201) {
Fimber.d("Github createRepo: Invalid response " + Log.d("Github createRepo: Invalid response " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);
@ -142,7 +142,7 @@ class GitHub implements GitHost {
throw GitHostException.CreateRepoFailed; throw GitHostException.CreateRepoFailed;
} }
Fimber.d("GitHub createRepo: " + response.body); Log.d("GitHub createRepo: " + response.body);
Map<String, dynamic> map = json.decode(response.body); Map<String, dynamic> map = json.decode(response.body);
return _repoFromJson(map); return _repoFromJson(map);
} }
@ -163,7 +163,7 @@ class GitHub implements GitHost {
var response = await http.get(url, headers: headers); var response = await http.get(url, headers: headers);
if (response.statusCode != 200) { if (response.statusCode != 200) {
Fimber.d("Github getRepo: Invalid response " + Log.d("Github getRepo: Invalid response " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);
@ -171,7 +171,7 @@ class GitHub implements GitHost {
throw GitHostException.GetRepoFailed; throw GitHostException.GetRepoFailed;
} }
Fimber.d("GitHub getRepo: " + response.body); Log.d("GitHub getRepo: " + response.body);
Map<String, dynamic> map = json.decode(response.body); Map<String, dynamic> map = json.decode(response.body);
return _repoFromJson(map); return _repoFromJson(map);
} }
@ -198,14 +198,14 @@ class GitHub implements GitHost {
var response = var response =
await http.post(url, headers: headers, body: json.encode(data)); await http.post(url, headers: headers, body: json.encode(data));
if (response.statusCode != 201) { if (response.statusCode != 201) {
Fimber.d("Github addDeployKey: Invalid response " + Log.d("Github addDeployKey: Invalid response " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);
throw GitHostException.DeployKeyFailed; throw GitHostException.DeployKeyFailed;
} }
Fimber.d("GitHub addDeployKey: " + response.body); Log.d("GitHub addDeployKey: " + response.body);
return json.decode(response.body); return json.decode(response.body);
} }
@ -230,7 +230,7 @@ class GitHub implements GitHost {
var response = await http.get(url, headers: headers); var response = await http.get(url, headers: headers);
if (response.statusCode != 200) { if (response.statusCode != 200) {
Fimber.d("Github getUserInfo: Invalid response " + Log.d("Github getUserInfo: Invalid response " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);
@ -239,7 +239,7 @@ class GitHub implements GitHost {
Map<String, dynamic> map = jsonDecode(response.body); Map<String, dynamic> map = jsonDecode(response.body);
if (map == null || map.isEmpty) { if (map == null || map.isEmpty) {
Fimber.d("Github getUserInfo: jsonDecode Failed " + Log.d("Github getUserInfo: jsonDecode Failed " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);

View File

@ -3,11 +3,11 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:math'; import 'dart:math';
import 'package:fimber/fimber.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:gitjournal/utils/logger.dart';
import 'githost.dart'; import 'githost.dart';
class GitLab implements GitHost { class GitLab implements GitHost {
@ -22,12 +22,12 @@ class GitLab implements GitHost {
void init(OAuthCallback callback) { void init(OAuthCallback callback) {
Future _handleMessages(MethodCall call) async { Future _handleMessages(MethodCall call) async {
if (call.method != "onURL") { if (call.method != "onURL") {
Fimber.d("GitLab Unknown Call: " + call.method); Log.d("GitLab Unknown Call: " + call.method);
return; return;
} }
closeWebView(); closeWebView();
Fimber.d("GitLab: Called onUrl with " + call.arguments.toString()); Log.d("GitLab: Called onUrl with " + call.arguments.toString());
String url = call.arguments["URL"]; String url = call.arguments["URL"];
var queryParamters = url.substring(url.indexOf('#') + 1); var queryParamters = url.substring(url.indexOf('#') + 1);
@ -35,9 +35,9 @@ class GitLab implements GitHost {
var state = map['state']; var state = map['state'];
if (state != _stateOAuth) { if (state != _stateOAuth) {
Fimber.d("GitLab: OAuth State incorrect"); Log.d("GitLab: OAuth State incorrect");
Fimber.d("Required State: " + _stateOAuth); Log.d("Required State: " + _stateOAuth);
Fimber.d("Actual State: " + state); Log.d("Actual State: " + state);
callback(GitHostException.OAuthFailed); callback(GitHostException.OAuthFailed);
return; return;
} }
@ -52,7 +52,7 @@ class GitLab implements GitHost {
} }
_platform.setMethodCallHandler(_handleMessages); _platform.setMethodCallHandler(_handleMessages);
Fimber.d("GitLab: Installed Handler"); Log.d("GitLab: Installed Handler");
} }
@override @override
@ -76,7 +76,7 @@ class GitLab implements GitHost {
var response = await http.get(url); var response = await http.get(url);
if (response.statusCode != 200) { if (response.statusCode != 200) {
Fimber.d("GitLab listRepos: Invalid response " + Log.d("GitLab listRepos: Invalid response " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);
@ -114,7 +114,7 @@ class GitLab implements GitHost {
var response = var response =
await http.post(url, headers: headers, body: json.encode(data)); await http.post(url, headers: headers, body: json.encode(data));
if (response.statusCode != 201) { if (response.statusCode != 201) {
Fimber.d("GitLab createRepo: Invalid response " + Log.d("GitLab createRepo: Invalid response " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);
@ -128,7 +128,7 @@ class GitLab implements GitHost {
throw GitHostException.CreateRepoFailed; throw GitHostException.CreateRepoFailed;
} }
Fimber.d("GitLab createRepo: " + response.body); Log.d("GitLab createRepo: " + response.body);
Map<String, dynamic> map = json.decode(response.body); Map<String, dynamic> map = json.decode(response.body);
return _repoFromJson(map); return _repoFromJson(map);
} }
@ -146,7 +146,7 @@ class GitLab implements GitHost {
var response = await http.get(url); var response = await http.get(url);
if (response.statusCode != 200) { if (response.statusCode != 200) {
Fimber.d("GitLab getRepo: Invalid response " + Log.d("GitLab getRepo: Invalid response " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);
@ -154,7 +154,7 @@ class GitLab implements GitHost {
throw GitHostException.GetRepoFailed; throw GitHostException.GetRepoFailed;
} }
Fimber.d("GitLab getRepo: " + response.body); Log.d("GitLab getRepo: " + response.body);
Map<String, dynamic> map = json.decode(response.body); Map<String, dynamic> map = json.decode(response.body);
return _repoFromJson(map); return _repoFromJson(map);
} }
@ -182,14 +182,14 @@ class GitLab implements GitHost {
var response = var response =
await http.post(url, headers: headers, body: json.encode(data)); await http.post(url, headers: headers, body: json.encode(data));
if (response.statusCode != 201) { if (response.statusCode != 201) {
Fimber.d("GitLab addDeployKey: Invalid response " + Log.d("GitLab addDeployKey: Invalid response " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);
throw GitHostException.DeployKeyFailed; throw GitHostException.DeployKeyFailed;
} }
Fimber.d("GitLab addDeployKey: " + response.body); Log.d("GitLab addDeployKey: " + response.body);
return json.decode(response.body); return json.decode(response.body);
} }
@ -210,7 +210,7 @@ class GitLab implements GitHost {
var response = await http.get(url); var response = await http.get(url);
if (response.statusCode != 200) { if (response.statusCode != 200) {
Fimber.d("GitLab getUserInfo: Invalid response " + Log.d("GitLab getUserInfo: Invalid response " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);
@ -219,7 +219,7 @@ class GitLab implements GitHost {
Map<String, dynamic> map = jsonDecode(response.body); Map<String, dynamic> map = jsonDecode(response.body);
if (map == null || map.isEmpty) { if (map == null || map.isEmpty) {
Fimber.d("GitLab getUserInfo: jsonDecode Failed " + Log.d("GitLab getUserInfo: jsonDecode Failed " +
response.statusCode.toString() + response.statusCode.toString() +
": " + ": " +
response.body); response.body);

View File

@ -1,10 +1,10 @@
import 'dart:io'; import 'dart:io';
import 'package:device_info/device_info.dart'; import 'package:device_info/device_info.dart';
import 'package:fimber/fimber.dart';
import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_analytics/observer.dart'; import 'package:firebase_analytics/observer.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gitjournal/utils/logger.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:flutter_runtime_env/flutter_runtime_env.dart' as runtime_env; import 'package:flutter_runtime_env/flutter_runtime_env.dart' as runtime_env;
@ -27,7 +27,7 @@ import 'setup/screens.dart';
class JournalApp extends StatelessWidget { class JournalApp extends StatelessWidget {
static Future main(SharedPreferences pref) async { static Future main(SharedPreferences pref) async {
Fimber.plantTree(DebugTree.elapsed(useColors: true)); Log.init();
var appState = AppState(pref); var appState = AppState(pref);
appState.dumpToLog(); appState.dumpToLog();
@ -72,13 +72,13 @@ class JournalApp extends StatelessWidget {
if (Platform.isAndroid) { if (Platform.isAndroid) {
var info = await deviceInfo.androidInfo; var info = await deviceInfo.androidInfo;
isPhysicalDevice = info.isPhysicalDevice; isPhysicalDevice = info.isPhysicalDevice;
Fimber.d("Device Fingerprint: " + info.fingerprint); Log.d("Device Fingerprint: " + info.fingerprint);
} else if (Platform.isIOS) { } else if (Platform.isIOS) {
var info = await deviceInfo.iosInfo; var info = await deviceInfo.iosInfo;
isPhysicalDevice = info.isPhysicalDevice; isPhysicalDevice = info.isPhysicalDevice;
} }
} catch (e) { } catch (e) {
Fimber.d(e); Log.d(e);
} }
if (isPhysicalDevice == false) { if (isPhysicalDevice == false) {
@ -88,7 +88,7 @@ class JournalApp extends StatelessWidget {
bool inFireBaseTestLab = await runtime_env.inFirebaseTestLab(); bool inFireBaseTestLab = await runtime_env.inFirebaseTestLab();
bool enabled = !JournalApp.isInDebugMode && !inFireBaseTestLab; bool enabled = !JournalApp.isInDebugMode && !inFireBaseTestLab;
Fimber.d("Analytics Collection: $enabled"); Log.d("Analytics Collection: $enabled");
JournalApp.analytics.setAnalyticsCollectionEnabled(enabled); JournalApp.analytics.setAnalyticsCollectionEnabled(enabled);
if (enabled) { if (enabled) {

View File

@ -1,7 +1,7 @@
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:fimber/fimber.dart';
import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/utils/logger.dart';
enum SyncStatus { enum SyncStatus {
Unknown, Unknown,
@ -47,13 +47,13 @@ class AppState {
} }
void dumpToLog() { void dumpToLog() {
Fimber.d(" ---- Settings ---- "); Log.d(" ---- Settings ---- ");
Fimber.d("localGitRepoConfigured: $localGitRepoConfigured"); Log.d("localGitRepoConfigured: $localGitRepoConfigured");
Fimber.d("remoteGitRepoConfigured: $remoteGitRepoConfigured"); Log.d("remoteGitRepoConfigured: $remoteGitRepoConfigured");
Fimber.d("localGitRepoFolderName: $localGitRepoFolderName"); Log.d("localGitRepoFolderName: $localGitRepoFolderName");
Fimber.d("remoteGitRepoFolderName: $remoteGitRepoFolderName"); Log.d("remoteGitRepoFolderName: $remoteGitRepoFolderName");
Fimber.d("onBoardingCompleted: $onBoardingCompleted"); Log.d("onBoardingCompleted: $onBoardingCompleted");
Fimber.d(" ------------------ "); Log.d(" ------------------ ");
} }
Future save(SharedPreferences pref) async { Future save(SharedPreferences pref) async {

View File

@ -2,7 +2,6 @@ import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:fimber/fimber.dart';
import 'package:git_bindings/git_bindings.dart'; import 'package:git_bindings/git_bindings.dart';
@ -10,6 +9,7 @@ import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/core/notes_folder.dart';
import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/logger.dart';
class NoteRepoResult { class NoteRepoResult {
bool error; bool error;
@ -143,7 +143,7 @@ class GitNoteRepository {
try { try {
await _gitRepo.pull(); await _gitRepo.pull();
} on GitException catch (ex) { } on GitException catch (ex) {
Fimber.d(ex.toString()); Log.d(ex.toString());
} }
} }
@ -155,7 +155,7 @@ class GitNoteRepository {
await pull(); await pull();
return push(); return push();
} }
Fimber.d(ex.toString()); Log.d(ex.toString());
rethrow; rethrow;
} }
} }

View File

@ -1,8 +1,8 @@
import 'dart:collection'; import 'dart:collection';
import 'package:fimber/fimber.dart';
import 'package:yaml/yaml.dart'; import 'package:yaml/yaml.dart';
import 'package:yaml_serializer/yaml_serializer.dart'; import 'package:yaml_serializer/yaml_serializer.dart';
import 'package:gitjournal/utils/logger.dart';
import 'md_yaml_doc.dart'; import 'md_yaml_doc.dart';
@ -71,8 +71,7 @@ class MarkdownYAMLCodec {
map[key] = value; map[key] = value;
}); });
} catch (err) { } catch (err) {
Fimber.d( Log.d('MarkdownYAMLSerializer::decode("$yamlText") -> ${err.toString()}');
'MarkdownYAMLSerializer::decode("$yamlText") -> ${err.toString()}');
} }
return map; return map;

View File

@ -1,11 +1,12 @@
import 'dart:io'; import 'dart:io';
import 'package:fimber/fimber.dart';
import 'package:gitjournal/core/md_yaml_doc_loader.dart'; import 'package:gitjournal/core/md_yaml_doc_loader.dart';
import 'package:gitjournal/core/note_notifier.dart'; import 'package:gitjournal/core/note_notifier.dart';
import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/markdown.dart'; import 'package:gitjournal/utils/markdown.dart';
import 'package:gitjournal/utils/logger.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'md_yaml_doc.dart'; import 'md_yaml_doc.dart';
@ -168,7 +169,7 @@ class Note with NotesNotifier {
if (this.fileLastModified == fileLastModified) { if (this.fileLastModified == fileLastModified) {
return _loadState; return _loadState;
} }
Fimber.d("Note modified: $_filePath"); Log.d("Note modified: $_filePath");
} }
try { try {

View File

@ -1,7 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:fimber/fimber.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_crashlytics/flutter_crashlytics.dart'; import 'package:flutter_crashlytics/flutter_crashlytics.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
@ -10,6 +9,7 @@ import 'package:collection/collection.dart';
import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/core/sorting_mode.dart'; import 'package:gitjournal/core/sorting_mode.dart';
import 'package:gitjournal/utils/logger.dart';
class NotesCache { class NotesCache {
final String filePath; final String filePath;
@ -109,7 +109,7 @@ class NotesCache {
try { try {
return json.decode(contents).cast<String>(); return json.decode(contents).cast<String>();
} catch (ex, st) { } catch (ex, st) {
Fimber.e("Exception - $ex for contents: $contents"); Log.e("Exception - $ex for contents: $contents");
await FlutterCrashlytics().logException(ex, st); await FlutterCrashlytics().logException(ex, st);
return []; return [];
} }

View File

@ -1,12 +1,13 @@
import 'dart:io'; import 'dart:io';
import 'package:fimber/fimber.dart';
import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/core/sorting_mode.dart'; import 'package:gitjournal/core/sorting_mode.dart';
import 'package:gitjournal/folder_views/common.dart'; import 'package:gitjournal/folder_views/common.dart';
import 'package:gitjournal/folder_views/standard_view.dart'; import 'package:gitjournal/folder_views/standard_view.dart';
import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/screens/note_editor.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/logger.dart';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
@ -127,7 +128,7 @@ class NotesFolderConfig extends Equatable {
map[key] = value; map[key] = value;
}); });
} catch (err) { } catch (err) {
Fimber.d('NotesFolderConfig::decode("$contents") -> ${err.toString()}'); Log.d('NotesFolderConfig::decode("$contents") -> ${err.toString()}');
} }
var sortingMode = var sortingMode =

View File

@ -1,7 +1,8 @@
import 'dart:io'; import 'dart:io';
import 'package:fimber/fimber.dart';
import 'package:gitjournal/features.dart'; import 'package:gitjournal/features.dart';
import 'package:gitjournal/utils/logger.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:path/path.dart'; import 'package:path/path.dart';
import 'package:synchronized/synchronized.dart'; import 'package:synchronized/synchronized.dart';
@ -171,7 +172,7 @@ class NotesFolderFS with NotesFolderNotifier implements NotesFolder {
} }
if (fsEntity is Directory) { if (fsEntity is Directory) {
//Fimber.d("Found directory ${fsEntity.path}"); //Log.d("Found directory ${fsEntity.path}");
var subFolder = NotesFolderFS(this, fsEntity.path); var subFolder = NotesFolderFS(this, fsEntity.path);
if (subFolder.name.startsWith('.')) { if (subFolder.name.startsWith('.')) {
continue; continue;
@ -188,10 +189,10 @@ class NotesFolderFS with NotesFolderNotifier implements NotesFolder {
var note = Note(this, fsEntity.path); var note = Note(this, fsEntity.path);
if (!note.filePath.toLowerCase().endsWith('.md')) { if (!note.filePath.toLowerCase().endsWith('.md')) {
//Fimber.d("Ignoring file ${fsEntity.path}"); //Log.d("Ignoring file ${fsEntity.path}");
continue; continue;
} }
//Fimber.d("Found file ${fsEntity.path}"); //Log.d("Found file ${fsEntity.path}");
note.addModifiedListener(_noteModified); note.addModifiedListener(_noteModified);
_notes.add(note); _notes.add(note);
@ -210,7 +211,7 @@ class NotesFolderFS with NotesFolderNotifier implements NotesFolder {
_entityMap.remove(path); _entityMap.remove(path);
if (e is Note) { if (e is Note) {
Fimber.d("File $path was no longer found"); Log.d("File $path was no longer found");
e.removeModifiedListener(_noteModified); e.removeModifiedListener(_noteModified);
var i = _notes.indexWhere((n) => n.filePath == path); var i = _notes.indexWhere((n) => n.filePath == path);
assert(i != -1); assert(i != -1);
@ -218,7 +219,7 @@ class NotesFolderFS with NotesFolderNotifier implements NotesFolder {
_notes.removeAt(i); _notes.removeAt(i);
notifyNoteRemoved(i, note); notifyNoteRemoved(i, note);
} else { } else {
Fimber.d("Folder $path was no longer found"); Log.d("Folder $path was no longer found");
e.removeListener(_entityChanged); e.removeListener(_entityChanged);
var i = _folders.indexWhere((f) => f.folderPath == path); var i = _folders.indexWhere((f) => f.folderPath == path);
assert(i != -1); assert(i != -1);

View File

@ -1,8 +1,8 @@
import 'dart:math'; import 'dart:math';
import 'package:fimber/fimber.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gitjournal/core/sorting_mode.dart'; import 'package:gitjournal/core/sorting_mode.dart';
import 'package:gitjournal/utils/logger.dart';
import 'note.dart'; import 'note.dart';
import 'notes_folder.dart'; import 'notes_folder.dart';
@ -141,7 +141,7 @@ class SortedNotesFolder with NotesFolderNotifier implements NotesFolder {
bool get isEmpty => folder.isEmpty; bool get isEmpty => folder.isEmpty;
void changeSortingMode(SortingMode sm) { void changeSortingMode(SortingMode sm) {
Fimber.d("Setting sorting to me ${sm.toInternalString()}"); Log.d("Setting sorting to me ${sm.toInternalString()}");
_sortingMode = sm; _sortingMode = sm;
_sortFunc = _sortingMode.sortingFunction(); _sortFunc = _sortingMode.sortingFunction();

View File

@ -1,5 +1,5 @@
import 'package:fimber/fimber.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/core/notes_folder.dart';
import 'package:gitjournal/folder_views/card_view.dart'; import 'package:gitjournal/folder_views/card_view.dart';
@ -7,6 +7,7 @@ import 'package:gitjournal/folder_views/grid_view.dart';
import 'package:gitjournal/folder_views/journal_view.dart'; import 'package:gitjournal/folder_views/journal_view.dart';
import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/screens/note_editor.dart';
import 'package:gitjournal/utils.dart'; import 'package:gitjournal/utils.dart';
import 'package:gitjournal/utils/logger.dart';
import 'standard_view.dart'; import 'standard_view.dart';
@ -66,7 +67,7 @@ void openNoteEditor(BuildContext context, Note note) async {
); );
var showUndoSnackBar = await Navigator.of(context).push(route); var showUndoSnackBar = await Navigator.of(context).push(route);
if (showUndoSnackBar != null) { if (showUndoSnackBar != null) {
Fimber.d("Showing an undo snackbar"); Log.d("Showing an undo snackbar");
var snackBar = buildUndoDeleteSnackbar(context, note); var snackBar = buildUndoDeleteSnackbar(context, note);
Scaffold.of(context) Scaffold.of(context)

View File

@ -2,13 +2,13 @@ import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:fimber/fimber.dart';
import 'package:git_bindings/git_bindings.dart'; import 'package:git_bindings/git_bindings.dart';
import 'package:gitjournal/setup/sshkey.dart'; import 'package:gitjournal/setup/sshkey.dart';
import 'package:gitjournal/screens/settings_widgets.dart'; import 'package:gitjournal/screens/settings_widgets.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils.dart'; import 'package:gitjournal/utils.dart';
import 'package:gitjournal/utils/logger.dart';
class GitRemoteSettingsScreen extends StatefulWidget { class GitRemoteSettingsScreen extends StatefulWidget {
@override @override
@ -105,7 +105,7 @@ class _GitRemoteSettingsScreenState extends State<GitRemoteSettingsScreen> {
generateSSHKeys(comment: comment).then((String publicKey) { generateSSHKeys(comment: comment).then((String publicKey) {
setState(() { setState(() {
this.publicKey = publicKey; this.publicKey = publicKey;
Fimber.d("PublicKey: " + publicKey); Log.d("PublicKey: " + publicKey);
_copyKeyToClipboard(context); _copyKeyToClipboard(context);
}); });
}); });

View File

@ -1,4 +1,3 @@
import 'package:fimber/fimber.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:function_types/function_types.dart'; import 'package:function_types/function_types.dart';
@ -9,6 +8,7 @@ import 'package:flutter_crashlytics/flutter_crashlytics.dart';
import 'package:gitjournal/analytics.dart'; import 'package:gitjournal/analytics.dart';
import 'package:gitjournal/apis/githost_factory.dart'; import 'package:gitjournal/apis/githost_factory.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/logger.dart';
import 'button.dart'; import 'button.dart';
import 'error.dart'; import 'error.dart';
@ -42,7 +42,7 @@ class GitHostSetupAutoConfigureState extends State<GitHostSetupAutoConfigure> {
} }
void _startAutoConfigure() async { void _startAutoConfigure() async {
Fimber.d("Starting autoconfigure"); Log.d("Starting autoconfigure");
setState(() { setState(() {
_configuringStarted = true; _configuringStarted = true;
}); });
@ -53,7 +53,7 @@ class GitHostSetupAutoConfigureState extends State<GitHostSetupAutoConfigure> {
if (error != null) { if (error != null) {
throw error; throw error;
} }
Fimber.d("GitHost Initalized: " + widget.gitHostType.toString()); Log.d("GitHost Initalized: " + widget.gitHostType.toString());
GitHostRepo repo; GitHostRepo repo;
try { try {
@ -112,7 +112,7 @@ class GitHostSetupAutoConfigureState extends State<GitHostSetupAutoConfigure> {
} }
void _handleGitHostException(Exception e, StackTrace stacktrace) { void _handleGitHostException(Exception e, StackTrace stacktrace) {
Fimber.d("GitHostSetupAutoConfigure: " + e.toString()); Log.d("GitHostSetupAutoConfigure: " + e.toString());
setState(() { setState(() {
errorMessage = widget.gitHostType.toString() + ": " + e.toString(); errorMessage = widget.gitHostType.toString() + ": " + e.toString();
getAnalytics().logEvent( getAnalytics().logEvent(

View File

@ -1,7 +1,7 @@
import 'package:fimber/fimber.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:function_types/function_types.dart'; import 'package:function_types/function_types.dart';
import 'package:gitjournal/analytics.dart'; import 'package:gitjournal/analytics.dart';
import 'package:gitjournal/utils/logger.dart';
class GitHostSetupButton extends StatelessWidget { class GitHostSetupButton extends StatelessWidget {
final Func0<void> onPressed; final Func0<void> onPressed;
@ -47,7 +47,7 @@ class GitHostSetupButton extends StatelessWidget {
} }
void _onPressedWithAnalytics() { void _onPressedWithAnalytics() {
Fimber.d("githostsetup_button_click " + text); Log.d("githostsetup_button_click " + text);
getAnalytics().logEvent( getAnalytics().logEvent(
name: "githostsetup_button_click", name: "githostsetup_button_click",
parameters: <String, dynamic>{ parameters: <String, dynamic>{

View File

@ -1,7 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'package:dots_indicator/dots_indicator.dart'; import 'package:dots_indicator/dots_indicator.dart';
import 'package:fimber/fimber.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -13,6 +12,8 @@ import 'package:gitjournal/apis/githost_factory.dart';
import 'package:gitjournal/state_container.dart'; import 'package:gitjournal/state_container.dart';
import 'package:gitjournal/utils.dart'; import 'package:gitjournal/utils.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/logger.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
@ -372,7 +373,7 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
generateSSHKeys(comment: comment).then((String publicKey) { generateSSHKeys(comment: comment).then((String publicKey) {
setState(() { setState(() {
this.publicKey = publicKey; this.publicKey = publicKey;
Fimber.d("PublicKey: " + publicKey); Log.d("PublicKey: " + publicKey);
_copyKeyToClipboard(context); _copyKeyToClipboard(context);
}); });
}); });
@ -410,8 +411,8 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
await launch(gitLabUrl); await launch(gitLabUrl);
} }
} catch (err, stack) { } catch (err, stack) {
Fimber.d('_launchDeployKeyPage: ' + err.toString()); Log.d('_launchDeployKeyPage: ' + err.toString());
Fimber.d(stack.toString()); Log.d(stack.toString());
} }
} }
@ -426,8 +427,8 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
} }
} catch (err, stack) { } catch (err, stack) {
// FIXME: Error handling? // FIXME: Error handling?
Fimber.d("_launchCreateRepoPage: " + err.toString()); Log.d("_launchCreateRepoPage: " + err.toString());
Fimber.d(stack.toString()); Log.d(stack.toString());
} }
} }
@ -446,7 +447,7 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
String repoPath = p.join(basePath, "journal"); String repoPath = p.join(basePath, "journal");
String error; String error;
try { try {
Fimber.d("Cloning " + _gitCloneUrl); Log.d("Cloning " + _gitCloneUrl);
await GitRepo.clone(repoPath, _gitCloneUrl); await GitRepo.clone(repoPath, _gitCloneUrl);
} on GitException catch (e) { } on GitException catch (e) {
error = e.cause; error = e.cause;
@ -520,7 +521,7 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
var dotGitDir = Directory(p.join(baseDir.path, ".git")); var dotGitDir = Directory(p.join(baseDir.path, ".git"));
bool exists = dotGitDir.existsSync(); bool exists = dotGitDir.existsSync();
if (exists) { if (exists) {
Fimber.d("Removing " + baseDir.path); Log.d("Removing " + baseDir.path);
await baseDir.delete(recursive: true); await baseDir.delete(recursive: true);
await baseDir.create(); await baseDir.create();
} }

View File

@ -1,9 +1,9 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:fimber/fimber.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gitjournal/apis/git_migration.dart'; import 'package:gitjournal/apis/git_migration.dart';
import 'package:gitjournal/appstate.dart'; import 'package:gitjournal/appstate.dart';
import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/note.dart';
@ -13,6 +13,8 @@ import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/core/git_repo.dart'; import 'package:gitjournal/core/git_repo.dart';
import 'package:gitjournal/features.dart'; import 'package:gitjournal/features.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/logger.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_crashlytics/flutter_crashlytics.dart'; import 'package:flutter_crashlytics/flutter_crashlytics.dart';
@ -61,10 +63,10 @@ class StateContainer with ChangeNotifier {
void _loadFromCache() async { void _loadFromCache() async {
await _notesCache.load(appState.notesFolder); await _notesCache.load(appState.notesFolder);
Fimber.i("Finished loading the notes cache"); Log.i("Finished loading the notes cache");
await _loadNotes(); await _loadNotes();
Fimber.i("Finished loading all the notes"); Log.i("Finished loading all the notes");
} }
void removeExistingRemoteClone() async { void removeExistingRemoteClone() async {
@ -86,7 +88,7 @@ class StateContainer with ChangeNotifier {
Future<void> syncNotes({bool doNotThrow = false}) async { Future<void> syncNotes({bool doNotThrow = false}) async {
if (!appState.remoteGitRepoConfigured) { if (!appState.remoteGitRepoConfigured) {
Fimber.d("Not syncing because RemoteRepo not configured"); Log.d("Not syncing because RemoteRepo not configured");
return true; return true;
} }
@ -104,11 +106,11 @@ class StateContainer with ChangeNotifier {
await _gitRepo.push(); await _gitRepo.push();
Fimber.d("Synced!"); Log.d("Synced!");
appState.syncStatus = SyncStatus.Done; appState.syncStatus = SyncStatus.Done;
notifyListeners(); notifyListeners();
} catch (e, stacktrace) { } catch (e, stacktrace) {
Fimber.d("Failed to Sync"); Log.d("Failed to Sync");
appState.syncStatus = SyncStatus.Error; appState.syncStatus = SyncStatus.Error;
notifyListeners(); notifyListeners();
if (shouldLogGitException(e)) { if (shouldLogGitException(e)) {
@ -134,7 +136,7 @@ class StateContainer with ChangeNotifier {
var newFolder = NotesFolderFS(parent, newFolderPath); var newFolder = NotesFolderFS(parent, newFolderPath);
newFolder.create(); newFolder.create();
Fimber.d("Created New Folder: " + newFolderPath); Log.d("Created New Folder: " + newFolderPath);
parent.addFolder(newFolder); parent.addFolder(newFolder);
_gitRepo.addFolder(newFolder).then((NoteRepoResult _) { _gitRepo.addFolder(newFolder).then((NoteRepoResult _) {
@ -145,7 +147,7 @@ class StateContainer with ChangeNotifier {
void removeFolder(NotesFolderFS folder) async { void removeFolder(NotesFolderFS folder) async {
return _opLock.synchronized(() async { return _opLock.synchronized(() async {
Fimber.d("Removing Folder: " + folder.folderPath); Log.d("Removing Folder: " + folder.folderPath);
folder.parentFS.removeFolder(folder); folder.parentFS.removeFolder(folder);
_gitRepo.removeFolder(folder).then((NoteRepoResult _) { _gitRepo.removeFolder(folder).then((NoteRepoResult _) {
@ -194,7 +196,7 @@ class StateContainer with ChangeNotifier {
void addNote(Note note) async { void addNote(Note note) async {
return _opLock.synchronized(() async { return _opLock.synchronized(() async {
Fimber.d("State Container addNote"); Log.d("State Container addNote");
note.parent.insert(0, note); note.parent.insert(0, note);
note.updateModified(); note.updateModified();
_gitRepo.addNote(note).then((NoteRepoResult _) { _gitRepo.addNote(note).then((NoteRepoResult _) {
@ -229,7 +231,7 @@ class StateContainer with ChangeNotifier {
void updateNote(Note note) async { void updateNote(Note note) async {
return _opLock.synchronized(() async { return _opLock.synchronized(() async {
Fimber.d("State Container updateNote"); Log.d("State Container updateNote");
note.updateModified(); note.updateModified();
_gitRepo.updateNote(note).then((NoteRepoResult _) { _gitRepo.updateNote(note).then((NoteRepoResult _) {
_syncNotes(); _syncNotes();
@ -243,7 +245,7 @@ class StateContainer with ChangeNotifier {
} }
return _opLock.synchronized(() async { return _opLock.synchronized(() async {
Fimber.d("State Container saveFolderConfig"); Log.d("State Container saveFolderConfig");
await config.saveToFS(); await config.saveToFS();
_gitRepo.addFolderConfig(config).then((NoteRepoResult _) { _gitRepo.addFolderConfig(config).then((NoteRepoResult _) {
_syncNotes(); _syncNotes();

View File

@ -1,4 +1,3 @@
import 'package:fimber/fimber.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:package_info/package_info.dart'; import 'package:package_info/package_info.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -6,6 +5,7 @@ import 'package:provider/provider.dart';
import 'app.dart'; import 'app.dart';
import 'core/note.dart'; import 'core/note.dart';
import 'state_container.dart'; import 'state_container.dart';
import 'utils/logger.dart';
Future<String> getVersionString() async { Future<String> getVersionString() async {
var info = await PackageInfo.fromPlatform(); var info = await PackageInfo.fromPlatform();
@ -27,7 +27,7 @@ SnackBar buildUndoDeleteSnackbar(BuildContext context, Note deletedNote) {
action: SnackBarAction( action: SnackBarAction(
label: "Undo", label: "Undo",
onPressed: () { onPressed: () {
Fimber.d("Undoing delete"); Log.d("Undoing delete");
var stateContainer = var stateContainer =
Provider.of<StateContainer>(context, listen: false); Provider.of<StateContainer>(context, listen: false);

32
lib/utils/logger.dart Normal file
View File

@ -0,0 +1,32 @@
import 'package:fimber/fimber.dart';
import 'package:flutter/foundation.dart' as foundation;
class Log {
static void init() {
if (foundation.kDebugMode) {
Fimber.plantTree(DebugTree.elapsed(useColors: true));
} else {
Fimber.plantTree(DebugTree.elapsed(useColors: false));
}
}
static void v(String msg, {dynamic ex, StackTrace stacktrace}) {
Fimber.v(msg, ex: ex, stacktrace: stacktrace);
}
static void d(String msg, {dynamic ex, StackTrace stacktrace}) {
Fimber.d(msg, ex: ex, stacktrace: stacktrace);
}
static void i(String msg, {dynamic ex, StackTrace stacktrace}) {
Fimber.i(msg, ex: ex, stacktrace: stacktrace);
}
static void e(String msg, {dynamic ex, StackTrace stacktrace}) {
Fimber.e(msg, ex: ex, stacktrace: stacktrace);
}
static void w(String msg, {dynamic ex, StackTrace stacktrace}) {
Fimber.w(msg, ex: ex, stacktrace: stacktrace);
}
}