From 4c93b1881d79ea1d62f70ded8141fd3ae2719221 Mon Sep 17 00:00:00 2001 From: UnicornsOnLSD Date: Sun, 11 Apr 2021 00:41:20 +0100 Subject: [PATCH] Readd FinampLogRecord and FinampLevel adapters (#19) --- lib/main.dart | 4 +- lib/models/FinampModels.dart | 8 ++++ lib/models/FinampModels.g.dart | 80 ++++++++++++++++++++++++++++++++++ pubspec.yaml | 2 +- 4 files changed, 92 insertions(+), 2 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 7b521c850..cbfe55efb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -92,6 +92,8 @@ Future setupHive() async { Hive.registerAdapter(ResponseProfileAdapter()); Hive.registerAdapter(SubtitleProfileAdapter()); Hive.registerAdapter(FinampSettingsAdapter()); + Hive.registerAdapter(FinampLogRecordAdapter()); + Hive.registerAdapter(FinampLevelAdapter()); await Future.wait([ Hive.openBox("DownloadedParents"), Hive.openBox("DownloadedItems"), @@ -107,7 +109,7 @@ Future setupHive() async { finampSettingsBox.put("FinampSettings", FinampSettings()); // Initial releases of the app used Hive to store logs. This removes the logs box from the disk if it exists. - // TODO: Remove this in a few months (added 2021-04-09) + // TODO: Remove this (and the hive adapters for FinampLogRecord and FinampLevel) in a few months (added 2021-04-09) if (await Hive.boxExists("FinampLogs")) { await Hive.openBox("FinampLogs"); await Hive.box("FinampLogs").deleteFromDisk(); diff --git a/lib/models/FinampModels.dart b/lib/models/FinampModels.dart index c20ba7351..951be2b6f 100644 --- a/lib/models/FinampModels.dart +++ b/lib/models/FinampModels.dart @@ -36,6 +36,7 @@ class FinampSettings { /// Once audio_service 0.18.0 releases, this won't be needed anymore. /// Serialisation is only needed so that we can pass these objects through isolates. @JsonSerializable(explicitToJson: true) +@HiveType(typeId: 29) class FinampLogRecord { FinampLogRecord({ this.level, @@ -44,13 +45,17 @@ class FinampLogRecord { this.time, }); + @HiveField(0) final FinampLevel level; + @HiveField(1) final String message; /// Logger where this record is stored. + @HiveField(2) final String loggerName; /// Time when this record was created. + @HiveField(3) final DateTime time; static FinampLogRecord fromLogRecord(LogRecord logRecord) => FinampLogRecord( @@ -66,11 +71,14 @@ class FinampLogRecord { } @JsonSerializable(explicitToJson: true) +@HiveType(typeId: 30) class FinampLevel implements Comparable { + @HiveField(0) final String name; /// Unique value for this level. Used to order levels, so filtering can /// exclude messages whose level is under certain value. + @HiveField(1) final int value; const FinampLevel(this.name, this.value); diff --git a/lib/models/FinampModels.g.dart b/lib/models/FinampModels.g.dart index 6c328056c..4dbcd5f06 100644 --- a/lib/models/FinampModels.g.dart +++ b/lib/models/FinampModels.g.dart @@ -80,6 +80,86 @@ class FinampSettingsAdapter extends TypeAdapter { typeId == other.typeId; } +class FinampLogRecordAdapter extends TypeAdapter { + @override + final int typeId = 29; + + @override + FinampLogRecord read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return FinampLogRecord( + level: fields[0] as FinampLevel, + message: fields[1] as String, + loggerName: fields[2] as String, + time: fields[3] as DateTime, + ); + } + + @override + void write(BinaryWriter writer, FinampLogRecord obj) { + writer + ..writeByte(4) + ..writeByte(0) + ..write(obj.level) + ..writeByte(1) + ..write(obj.message) + ..writeByte(2) + ..write(obj.loggerName) + ..writeByte(3) + ..write(obj.time); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is FinampLogRecordAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} + +class FinampLevelAdapter extends TypeAdapter { + @override + final int typeId = 30; + + @override + FinampLevel read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return FinampLevel( + fields[0] as String, + fields[1] as int, + ); + } + + @override + void write(BinaryWriter writer, FinampLevel obj) { + writer + ..writeByte(2) + ..writeByte(0) + ..write(obj.name) + ..writeByte(1) + ..write(obj.value); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is FinampLevelAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} + // ************************************************************************** // JsonSerializableGenerator // ************************************************************************** diff --git a/pubspec.yaml b/pubspec.yaml index 40a1cbe0d..31798cc37 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.2.0 +version: 0.2.1 environment: sdk: ">=2.10.0 <3.0.0"