mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2026-02-04 08:29:33 +00:00
feat: error reporting with logs (#45)
* feat: add ability to get logs file from ui * test: add unit test for log line parsing in logs_provider * refactor: update all logs to obfuscate sensitive information * feat: generate dynamic zip file name for logs export * feat: enhance logging in audiobook player and provider for better debugging * refactor: extract user display logic into UserBar widget for offline access of settings and logs * feat: add About section with app metadata and source code link in YouPage
This commit is contained in:
parent
7b0c2c4b88
commit
35a2d7cfce
44 changed files with 861 additions and 176 deletions
|
|
@ -8,6 +8,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|||
import 'package:shelfsdk/audiobookshelf_api.dart';
|
||||
import 'package:vaani/db/cache_manager.dart';
|
||||
import 'package:vaani/settings/api_settings_provider.dart';
|
||||
import 'package:vaani/shared/extensions/obfuscation.dart';
|
||||
|
||||
part 'api_provider.g.dart';
|
||||
|
||||
|
|
@ -80,7 +81,7 @@ FutureOr<ServerStatusResponse?> serverStatus(
|
|||
Uri baseUrl, [
|
||||
ResponseErrorHandler? responseErrorHandler,
|
||||
]) async {
|
||||
_logger.fine('fetching server status: $baseUrl');
|
||||
_logger.fine('fetching server status: ${baseUrl.obfuscate()}');
|
||||
final api = ref.watch(audiobookshelfApiProvider(baseUrl));
|
||||
final res =
|
||||
await api.server.status(responseErrorHandler: responseErrorHandler);
|
||||
|
|
@ -145,7 +146,6 @@ class PersonalizedView extends _$PersonalizedView {
|
|||
_logger.warning('failed to fetch personalized view');
|
||||
yield [];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// method to force refresh the view and ignore the cache
|
||||
|
|
|
|||
|
|
@ -327,7 +327,7 @@ class _IsServerAliveProviderElement
|
|||
String get address => (origin as IsServerAliveProvider).address;
|
||||
}
|
||||
|
||||
String _$serverStatusHash() => r'2739906a1862d09b098588ebd16749a09032ee99';
|
||||
String _$serverStatusHash() => r'd7079e19e68f5f61b0afa0f73a2af8807c4b3cf6';
|
||||
|
||||
/// fetch status of server
|
||||
///
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ import 'package:vaani/api/server_provider.dart'
|
|||
import 'package:vaani/db/storage.dart';
|
||||
import 'package:vaani/settings/api_settings_provider.dart';
|
||||
import 'package:vaani/settings/models/audiobookshelf_server.dart';
|
||||
import 'package:vaani/settings/models/authenticated_user.dart'
|
||||
as model;
|
||||
import 'package:vaani/settings/models/authenticated_user.dart' as model;
|
||||
import 'package:vaani/shared/extensions/obfuscation.dart';
|
||||
|
||||
part 'authenticated_user_provider.g.dart';
|
||||
|
||||
|
|
@ -35,7 +35,9 @@ class AuthenticatedUser extends _$AuthenticatedUser {
|
|||
Set<model.AuthenticatedUser> readFromBoxOrCreate() {
|
||||
if (_box.isNotEmpty) {
|
||||
final foundData = _box.getRange(0, _box.length);
|
||||
_logger.fine('found users in box: $foundData');
|
||||
_logger.fine(
|
||||
'found users in box: ${foundData.obfuscate()}',
|
||||
);
|
||||
return foundData.toSet();
|
||||
} else {
|
||||
_logger.fine('no settings found in box');
|
||||
|
|
@ -49,7 +51,7 @@ class AuthenticatedUser extends _$AuthenticatedUser {
|
|||
return;
|
||||
}
|
||||
_box.addAll(state);
|
||||
_logger.fine('writing state to box: $state');
|
||||
_logger.fine('writing state to box: ${state.obfuscate()}');
|
||||
}
|
||||
|
||||
void addUser(model.AuthenticatedUser user, {bool setActive = false}) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'authenticated_user_provider.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$authenticatedUserHash() => r'308f19b33ae04af6340fb83167fa64aa23400a09';
|
||||
String _$authenticatedUserHash() => r'1983527595207c63a12bc84cf0bf1a3c1d729506';
|
||||
|
||||
/// provides with a set of authenticated users
|
||||
///
|
||||
|
|
|
|||
|
|
@ -1,16 +1,18 @@
|
|||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:vaani/api/authenticated_user_provider.dart';
|
||||
import 'package:vaani/db/storage.dart';
|
||||
import 'package:vaani/settings/api_settings_provider.dart';
|
||||
import 'package:vaani/settings/models/audiobookshelf_server.dart'
|
||||
as model;
|
||||
import 'package:vaani/settings/models/audiobookshelf_server.dart' as model;
|
||||
import 'package:vaani/shared/extensions/obfuscation.dart';
|
||||
|
||||
part 'server_provider.g.dart';
|
||||
|
||||
final _box = AvailableHiveBoxes.serverBox;
|
||||
|
||||
final _logger = Logger('AudiobookShelfServerProvider');
|
||||
|
||||
class ServerAlreadyExistsException implements Exception {
|
||||
final model.AudiobookShelfServer server;
|
||||
|
||||
|
|
@ -47,10 +49,10 @@ class AudiobookShelfServer extends _$AudiobookShelfServer {
|
|||
Set<model.AudiobookShelfServer> readFromBoxOrCreate() {
|
||||
if (_box.isNotEmpty) {
|
||||
final foundServers = _box.getRange(0, _box.length);
|
||||
debugPrint('found servers in box: $foundServers');
|
||||
_logger.info('found servers in box: ${foundServers.obfuscate()}');
|
||||
return foundServers.whereNotNull().toSet();
|
||||
} else {
|
||||
debugPrint('no settings found in box');
|
||||
_logger.info('no settings found in box');
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
|
@ -61,7 +63,7 @@ class AudiobookShelfServer extends _$AudiobookShelfServer {
|
|||
return;
|
||||
}
|
||||
_box.addAll(state);
|
||||
debugPrint('writing state to box: $state');
|
||||
_logger.info('writing state to box: ${state.obfuscate()}');
|
||||
}
|
||||
|
||||
void addServer(model.AudiobookShelfServer server) {
|
||||
|
|
@ -71,8 +73,8 @@ class AudiobookShelfServer extends _$AudiobookShelfServer {
|
|||
state = {...state, server};
|
||||
}
|
||||
|
||||
void removeServer(model.AudiobookShelfServer server,
|
||||
{
|
||||
void removeServer(
|
||||
model.AudiobookShelfServer server, {
|
||||
bool removeUsers = false,
|
||||
}) {
|
||||
state = state.where((s) => s != server).toSet();
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ part of 'server_provider.dart';
|
|||
// **************************************************************************
|
||||
|
||||
String _$audiobookShelfServerHash() =>
|
||||
r'f0d645bb42233c59886bc43fdc473897484ceca1';
|
||||
r'0084fb72c4c54323207928b95716cfd9ca496c11';
|
||||
|
||||
/// provides with a set of servers added by the user
|
||||
///
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue