Cache messages, use cache if exists, load in background

This commit is contained in:
2024-06-15 15:56:50 +02:00
parent 9c366399df
commit 35ab9a26c0
16 changed files with 556 additions and 42 deletions

View File

@@ -1,17 +1,32 @@
import 'package:hive_flutter/hive_flutter.dart';
import 'package:simplecloudnotifier/models/subscription.dart';
import 'package:simplecloudnotifier/state/interfaces.dart';
class Channel {
part 'channel.g.dart';
@HiveType(typeId: 104)
class Channel extends HiveObject implements FieldDebuggable {
@HiveField(0)
final String channelID;
@HiveField(10)
final String ownerUserID;
@HiveField(11)
final String internalName;
@HiveField(12)
final String displayName;
@HiveField(13)
final String? descriptionName;
@HiveField(14)
final String? subscribeKey;
@HiveField(15)
final String timestampCreated;
@HiveField(16)
final String? timestampLastSent;
@HiveField(17)
final int messagesSent;
const Channel({
Channel({
required this.channelID,
required this.ownerUserID,
required this.internalName,
@@ -36,6 +51,25 @@ class Channel {
messagesSent: json['messages_sent'] as int,
);
}
@override
String toString() {
return 'Channel[${this.channelID}]';
}
List<(String, String)> debugFieldList() {
return [
('channelID', this.channelID),
('ownerUserID', this.ownerUserID),
('internalName', this.internalName),
('displayName', this.displayName),
('descriptionName', this.descriptionName ?? ''),
('subscribeKey', this.subscribeKey ?? ''),
('timestampCreated', this.timestampCreated),
('timestampLastSent', this.timestampLastSent ?? ''),
('messagesSent', '${this.messagesSent}'),
];
}
}
class ChannelWithSubscription {

View File

@@ -0,0 +1,65 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'channel.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class ChannelAdapter extends TypeAdapter<Channel> {
@override
final int typeId = 104;
@override
Channel read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return Channel(
channelID: fields[0] as String,
ownerUserID: fields[10] as String,
internalName: fields[11] as String,
displayName: fields[12] as String,
descriptionName: fields[13] as String?,
subscribeKey: fields[14] as String?,
timestampCreated: fields[15] as String,
timestampLastSent: fields[16] as String?,
messagesSent: fields[17] as int,
);
}
@override
void write(BinaryWriter writer, Channel obj) {
writer
..writeByte(9)
..writeByte(0)
..write(obj.channelID)
..writeByte(10)
..write(obj.ownerUserID)
..writeByte(11)
..write(obj.internalName)
..writeByte(12)
..write(obj.displayName)
..writeByte(13)
..write(obj.descriptionName)
..writeByte(14)
..write(obj.subscribeKey)
..writeByte(15)
..write(obj.timestampCreated)
..writeByte(16)
..write(obj.timestampLastSent)
..writeByte(17)
..write(obj.messagesSent);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is ChannelAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}

View File

@@ -1,19 +1,39 @@
class Message {
import 'package:hive_flutter/hive_flutter.dart';
import 'package:simplecloudnotifier/state/interfaces.dart';
part 'message.g.dart';
@HiveType(typeId: 105)
class Message extends HiveObject implements FieldDebuggable {
@HiveField(0)
final String messageID;
@HiveField(10)
final String senderUserID;
@HiveField(11)
final String channelInternalName;
@HiveField(12)
final String channelID;
@HiveField(13)
final String? senderName;
@HiveField(14)
final String senderIP;
@HiveField(15)
final String timestamp;
@HiveField(16)
final String title;
@HiveField(17)
final String? content;
@HiveField(18)
final int priority;
@HiveField(19)
final String? userMessageID;
@HiveField(20)
final String usedKeyID;
@HiveField(21)
final bool trimmed;
const Message({
Message({
required this.messageID,
required this.senderUserID,
required this.channelInternalName,
@@ -54,4 +74,27 @@ class Message {
return (npt, messages);
}
@override
String toString() {
return 'Message[${this.messageID}]';
}
List<(String, String)> debugFieldList() {
return [
('messageID', this.messageID),
('senderUserID', this.senderUserID),
('channelInternalName', this.channelInternalName),
('channelID', this.channelID),
('senderName', this.senderName ?? ''),
('senderIP', this.senderIP),
('timestamp', this.timestamp),
('title', this.title),
('content', this.content ?? ''),
('priority', '${this.priority}'),
('userMessageID', this.userMessageID ?? ''),
('usedKeyID', this.usedKeyID),
('trimmed', '${this.trimmed}'),
];
}
}

View File

@@ -0,0 +1,77 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'message.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class MessageAdapter extends TypeAdapter<Message> {
@override
final int typeId = 105;
@override
Message read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return Message(
messageID: fields[0] as String,
senderUserID: fields[10] as String,
channelInternalName: fields[11] as String,
channelID: fields[12] as String,
senderName: fields[13] as String?,
senderIP: fields[14] as String,
timestamp: fields[15] as String,
title: fields[16] as String,
content: fields[17] as String?,
priority: fields[18] as int,
userMessageID: fields[19] as String?,
usedKeyID: fields[20] as String,
trimmed: fields[21] as bool,
);
}
@override
void write(BinaryWriter writer, Message obj) {
writer
..writeByte(13)
..writeByte(0)
..write(obj.messageID)
..writeByte(10)
..write(obj.senderUserID)
..writeByte(11)
..write(obj.channelInternalName)
..writeByte(12)
..write(obj.channelID)
..writeByte(13)
..write(obj.senderName)
..writeByte(14)
..write(obj.senderIP)
..writeByte(15)
..write(obj.timestamp)
..writeByte(16)
..write(obj.title)
..writeByte(17)
..write(obj.content)
..writeByte(18)
..write(obj.priority)
..writeByte(19)
..write(obj.userMessageID)
..writeByte(20)
..write(obj.usedKeyID)
..writeByte(21)
..write(obj.trimmed);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is MessageAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}