mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-28 20:13:28 +01:00 
			
		
		
		
	Replaced hardcoded English strings with locale-based variables based on the [easy_localization](https://pub.dev/packages/easy_localization) Flutter plugin.
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:easy_localization/easy_localization.dart';
 | |
| import 'package:flutter/foundation.dart';
 | |
| import 'package:sqflite/sqflite.dart';
 | |
| 
 | |
| const String logTable = 'logs';
 | |
| const String idColumn = '_id';
 | |
| const String levelColumn = 'level';
 | |
| const String messageColumn = 'message';
 | |
| const String timestampColumn = 'timestamp';
 | |
| const String dbPath = 'logs.db';
 | |
| 
 | |
| enum LogLevels { debug, info, warning, error }
 | |
| 
 | |
| class Log {
 | |
|   int? id;
 | |
|   late LogLevels level;
 | |
|   late String message;
 | |
|   DateTime timestamp = DateTime.now();
 | |
| 
 | |
|   Map<String, Object?> toMap() {
 | |
|     var map = <String, Object?>{
 | |
|       idColumn: id,
 | |
|       levelColumn: level.index,
 | |
|       messageColumn: message,
 | |
|       timestampColumn: timestamp.millisecondsSinceEpoch
 | |
|     };
 | |
|     return map;
 | |
|   }
 | |
| 
 | |
|   Log(this.message, this.level);
 | |
| 
 | |
|   Log.fromMap(Map<String, Object?> map) {
 | |
|     id = map[idColumn] as int;
 | |
|     level = LogLevels.values.elementAt(map[levelColumn] as int);
 | |
|     message = map[messageColumn] as String;
 | |
|     timestamp =
 | |
|         DateTime.fromMillisecondsSinceEpoch(map[timestampColumn] as int);
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   String toString() {
 | |
|     return '${timestamp.toString()}: ${level.name}: $message';
 | |
|   }
 | |
| }
 | |
| 
 | |
| class LogsProvider {
 | |
|   LogsProvider({bool runDefaultClear = true}) {
 | |
|     clear(before: DateTime.now().subtract(const Duration(days: 7)));
 | |
|   }
 | |
| 
 | |
|   Database? db;
 | |
| 
 | |
|   Future<Database> getDB() async {
 | |
|     db ??= await openDatabase(dbPath, version: 1,
 | |
|         onCreate: (Database db, int version) async {
 | |
|       await db.execute('''
 | |
| create table if not exists $logTable ( 
 | |
|   $idColumn integer primary key autoincrement, 
 | |
|   $levelColumn integer not null,
 | |
|   $messageColumn text not null,
 | |
|   $timestampColumn integer not null)
 | |
| ''');
 | |
|     });
 | |
|     return db!;
 | |
|   }
 | |
| 
 | |
|   Future<Log> add(String message, {LogLevels level = LogLevels.info}) async {
 | |
|     Log l = Log(message, level);
 | |
|     l.id = await (await getDB()).insert(logTable, l.toMap());
 | |
|     if (kDebugMode) {
 | |
|       print(l);
 | |
|     }
 | |
|     return l;
 | |
|   }
 | |
| 
 | |
|   Future<List<Log>> get({DateTime? before, DateTime? after}) async {
 | |
|     var where = getWhereDates(before: before, after: after);
 | |
|     return (await (await getDB())
 | |
|             .query(logTable, where: where.key, whereArgs: where.value))
 | |
|         .map((e) => Log.fromMap(e))
 | |
|         .toList();
 | |
|   }
 | |
| 
 | |
|   Future<int> clear({DateTime? before, DateTime? after}) async {
 | |
|     var where = getWhereDates(before: before, after: after);
 | |
|     var res = await (await getDB())
 | |
|         .delete(logTable, where: where.key, whereArgs: where.value);
 | |
|     if (res > 0) {
 | |
|       add(plural('clearedNLogsBeforeXAfterY', res,
 | |
|           namedArgs: {'before': before.toString(), 'after': after.toString()},
 | |
|           name: 'n'));
 | |
|     }
 | |
|     return res;
 | |
|   }
 | |
| }
 | |
| 
 | |
| MapEntry<String?, List<int>?> getWhereDates(
 | |
|     {DateTime? before, DateTime? after}) {
 | |
|   List<String> where = [];
 | |
|   List<int> whereArgs = [];
 | |
|   if (before != null) {
 | |
|     where.add('$timestampColumn < ?');
 | |
|     whereArgs.add(before.millisecondsSinceEpoch);
 | |
|   }
 | |
|   if (after != null) {
 | |
|     where.add('$timestampColumn > ?');
 | |
|     whereArgs.add(after.millisecondsSinceEpoch);
 | |
|   }
 | |
|   return whereArgs.isEmpty
 | |
|       ? const MapEntry(null, null)
 | |
|       : MapEntry(where.join(' and '), whereArgs);
 | |
| }
 |