Remove more references to old platform

This commit is contained in:
Nutcake 2023-09-30 12:22:32 +02:00
parent 6e83ce32f8
commit cc1bcb7a72
19 changed files with 96 additions and 120 deletions

View file

@ -10,7 +10,7 @@ import 'package:flutter/material.dart';
import 'package:contacts_plus_plus/clients/api_client.dart';
import 'package:contacts_plus_plus/models/records/asset_upload_data.dart';
import 'package:contacts_plus_plus/models/records/neos_db_asset.dart';
import 'package:contacts_plus_plus/models/records/resonite_db_asset.dart';
import 'package:contacts_plus_plus/models/records/preprocess_status.dart';
import 'package:contacts_plus_plus/models/records/record.dart';
import 'package:http_parser/http_parser.dart';

View file

@ -2,16 +2,16 @@ import 'dart:async';
import 'package:contacts_plus_plus/apis/record_api.dart';
import 'package:contacts_plus_plus/clients/api_client.dart';
import 'package:contacts_plus_plus/models/inventory/neos_path.dart';
import 'package:contacts_plus_plus/models/inventory/resonite_directory.dart';
import 'package:contacts_plus_plus/models/records/record.dart';
import 'package:flutter/material.dart';
class InventoryClient extends ChangeNotifier {
final ApiClient apiClient;
Future<NeosDirectory>? _currentDirectory;
Future<ResoniteDirectory>? _currentDirectory;
Future<NeosDirectory>? get directoryFuture => _currentDirectory;
Future<ResoniteDirectory>? get directoryFuture => _currentDirectory;
InventoryClient({required this.apiClient});
@ -51,7 +51,7 @@ class InventoryClient extends ChangeNotifier {
}
Future<List<Record>> _getDirectory(Record record) async {
NeosDirectory? dir;
ResoniteDirectory? dir;
try {
dir = await _currentDirectory;
} catch (_) {}
@ -59,7 +59,7 @@ class InventoryClient extends ChangeNotifier {
if (dir == null || record.isRoot) {
records = await RecordApi.getUserRecordsAt(
apiClient,
path: NeosDirectory.rootName,
path: ResoniteDirectory.rootName,
);
} else {
if (record.recordType == RecordType.link) {
@ -79,12 +79,12 @@ class InventoryClient extends ChangeNotifier {
final rootRecord = Record.inventoryRoot();
final rootFuture = _getDirectory(rootRecord).then(
(records) {
final rootDir = NeosDirectory(
final rootDir = ResoniteDirectory(
record: rootRecord,
children: [],
);
rootDir.children.addAll(
records.map((e) => NeosDirectory.fromRecord(record: e, parent: rootDir)).toList(),
records.map((e) => ResoniteDirectory.fromRecord(record: e, parent: rootDir)).toList(),
);
return rootDir;
},
@ -103,8 +103,8 @@ class InventoryClient extends ChangeNotifier {
_currentDirectory = _getDirectory(dir.record).then(
(records) {
final children = records.map((record) => NeosDirectory.fromRecord(record: record, parent: dir)).toList();
final newDir = NeosDirectory(record: dir.record, children: children, parent: dir.parent);
final children = records.map((record) => ResoniteDirectory.fromRecord(record: record, parent: dir)).toList();
final newDir = ResoniteDirectory(record: dir.record, children: children, parent: dir.parent);
final parentIdx = dir.parent?.children.indexOf(dir) ?? -1;
if (parentIdx != -1) {
@ -142,7 +142,7 @@ class InventoryClient extends ChangeNotifier {
_currentDirectory = _getDirectory(record).then(
(records) {
childDir.children.clear();
childDir.children.addAll(records.map((record) => NeosDirectory.fromRecord(record: record, parent: childDir)));
childDir.children.addAll(records.map((record) => ResoniteDirectory.fromRecord(record: record, parent: childDir)));
return childDir;
},
).onError((error, stackTrace) {

View file

@ -238,7 +238,7 @@ class MessagingClient extends ChangeNotifier {
Future<void> _setupHub() async {
if (!_apiClient.isAuthenticated) {
_logger.info("Tried to connect to Neos Hub without authentication, this is probably fine for now.");
_logger.info("Tried to connect to Resonite Hub without authentication, this is probably fine for now.");
return;
}
_hubManager.setHeaders(_apiClient.authorizationHeader);
@ -247,6 +247,7 @@ class MessagingClient extends ChangeNotifier {
_hubManager.setHandler(EventTarget.receiveMessage, _onReceiveMessage);
_hubManager.setHandler(EventTarget.messagesRead, _onMessagesRead);
_hubManager.setHandler(EventTarget.receiveStatusUpdate, _onReceiveStatusUpdate);
_hubManager.setHandler(EventTarget.receiveSessionUpdate, _onReceiveSessionUpdate);
await _hubManager.start();
_hubManager.send(
@ -311,4 +312,6 @@ class MessagingClient extends ChangeNotifier {
}
notifyListeners();
}
void _onReceiveSessionUpdate(List args) {}
}

View file

@ -30,7 +30,7 @@ class HubManager {
void _onDisconnected(error) async {
_wsChannel = null;
_logger.warning("Neos Hub connection died with error '$error', reconnecting...");
_logger.warning("Hub connection died with error '$error', reconnecting...");
await start();
}
@ -41,7 +41,7 @@ class HubManager {
_isConnecting = true;
_wsChannel = await _tryConnect();
_isConnecting = false;
_logger.info("Connected to Neos Hub.");
_logger.info("Connected to Resonite Hub.");
_wsChannel!.done.then((error) => _onDisconnected(error));
_wsChannel!.listen(_handleEvent, onDone: () => _onDisconnected("Connection closed."), onError: _onDisconnected);
_wsChannel!.add(_negotiationPacket);
@ -124,7 +124,7 @@ class HubManager {
if (responseHandler != null) {
_responseHandlers[invocationId] = responseHandler;
}
if (_wsChannel == null) throw "Neos Hub is not connected";
if (_wsChannel == null) throw "Resonite Hub is not connected";
_wsChannel!.add(jsonEncode(data) + _eofChar);
}

View file

@ -1,64 +0,0 @@
import 'package:collection/collection.dart';
import 'package:contacts_plus_plus/stack.dart';
import 'package:contacts_plus_plus/models/records/record.dart';
class NeosPath {
static const _root = "Inventory";
final Stack<NeosDirectory> _pathStack = Stack<NeosDirectory>();
String get absolute {
if (_pathStack.isEmpty) return _root;
var path = _pathStack.entries.join("\\");
return "$_root\\$path";
}
NeosDirectory pop() => _pathStack.pop();
void push(NeosDirectory directory) => _pathStack.push(directory);
bool get isRoot => _pathStack.isEmpty;
/*
NeosDirectory get current => _pathStack.peek ?? NeosDirectory(name: _root);
void populateCurrent(String target, Iterable<Record> records) {
var currentDir = _pathStack.peek;
if (currentDir?.name != target) return;
currentDir?.records.addAll(records);
}
*/
}
class NeosDirectory {
static const rootName = "Inventory";
final Record record;
final NeosDirectory? parent;
final List<NeosDirectory> children;
NeosDirectory({required this.record, this.parent, required this.children});
factory NeosDirectory.fromRecord({required Record record, NeosDirectory? parent}) {
return NeosDirectory(record: record, parent: parent, children: []);
}
@override
String toString() {
return record.name;
}
bool get isRoot => record.isRoot;
String get absolutePath => "${parent?.absolutePath ?? ""}/${(record.name)}";
List<String> get absolutePathSegments => (parent?.absolutePathSegments ?? []) + [record.name];
bool containsRecord(Record record) => children.where((element) => element.record.id == record.id).isNotEmpty;
List<Record> get records => children.map((e) => e.record).toList();
bool get isLoaded => children.isNotEmpty;
NeosDirectory? findChildByRecord(Record record) => children.firstWhereOrNull((element) => element.record.id == record.id);
}

View file

@ -0,0 +1,36 @@
import 'package:collection/collection.dart';
import 'package:contacts_plus_plus/stack.dart';
import 'package:contacts_plus_plus/models/records/record.dart';
class ResoniteDirectory {
static const rootName = "Inventory";
final Record record;
final ResoniteDirectory? parent;
final List<ResoniteDirectory> children;
ResoniteDirectory({required this.record, this.parent, required this.children});
factory ResoniteDirectory.fromRecord({required Record record, ResoniteDirectory? parent}) {
return ResoniteDirectory(record: record, parent: parent, children: []);
}
@override
String toString() {
return record.name;
}
bool get isRoot => record.isRoot;
String get absolutePath => "${parent?.absolutePath ?? ""}/${(record.name)}";
List<String> get absolutePathSegments => (parent?.absolutePathSegments ?? []) + [record.name];
bool containsRecord(Record record) => children.where((element) => element.record.id == record.id).isNotEmpty;
List<Record> get records => children.map((e) => e.record).toList();
bool get isLoaded => children.isNotEmpty;
ResoniteDirectory? findChildByRecord(Record record) => children.firstWhereOrNull((element) => element.record.id == record.id);
}

View file

@ -1,5 +1,5 @@
import 'package:contacts_plus_plus/models/records/neos_db_asset.dart';
import 'package:contacts_plus_plus/models/records/resonite_db_asset.dart';
class AssetDiff extends ResoniteDBAsset{
final Diff state;

View file

@ -1,7 +1,7 @@
import 'dart:typed_data';
import 'package:contacts_plus_plus/models/records/neos_db_asset.dart';
import 'package:contacts_plus_plus/models/records/resonite_db_asset.dart';
import 'package:path/path.dart';
class AssetDigest {

View file

@ -2,7 +2,7 @@ import 'package:path/path.dart';
import 'package:uuid/uuid.dart';
class JsonTemplate {
static const String thumbUrl = "neosdb:///8ed80703e48c3d1556093927b67298f3d5e10315e9f782ec56fc49d6366f09b7.webp";
static const String thumbUrl = "resdb:///8ed80703e48c3d1556093927b67298f3d5e10315e9f782ec56fc49d6366f09b7.webp";
final Map data;
JsonTemplate({required this.data});
@ -2371,7 +2371,7 @@ class JsonTemplate {
},
"URL": {
"ID": const Uuid().v4(),
"Data": "@neosdb:///3738bf6fc560f7d08d872ce12b06f4d9337ac5da415b6de6008a49ca128658ec"
"Data": "@resdb:///3738bf6fc560f7d08d872ce12b06f4d9337ac5da415b6de6008a49ca128658ec"
},
"Readable": {
"ID": const Uuid().v4(),
@ -2444,7 +2444,7 @@ class JsonTemplate {
},
"URL": {
"ID": const Uuid().v4(),
"Data": "@neosdb:///c801b8d2522fb554678f17f4597158b1af3f9be3abd6ce35d5a3112a81e2bf39"
"Data": "@resdb:///c801b8d2522fb554678f17f4597158b1af3f9be3abd6ce35d5a3112a81e2bf39"
},
"Padding": {
"ID": const Uuid().v4(),
@ -2478,7 +2478,7 @@ class JsonTemplate {
},
"URL": {
"ID": const Uuid().v4(),
"Data": "@neosdb:///4cac521169034ddd416c6deffe2eb16234863761837df677a910697ec5babd25"
"Data": "@resdb:///4cac521169034ddd416c6deffe2eb16234863761837df677a910697ec5babd25"
},
"Padding": {
"ID": const Uuid().v4(),
@ -2512,7 +2512,7 @@ class JsonTemplate {
},
"URL": {
"ID": const Uuid().v4(),
"Data": "@neosdb:///23e7ad7cb0a5a4cf75e07c9e0848b1eb06bba15e8fa9b8cb0579fc823c532927"
"Data": "@resdb:///23e7ad7cb0a5a4cf75e07c9e0848b1eb06bba15e8fa9b8cb0579fc823c532927"
},
"Padding": {
"ID": const Uuid().v4(),
@ -2546,7 +2546,7 @@ class JsonTemplate {
},
"URL": {
"ID": const Uuid().v4(),
"Data": "@neosdb:///415dc6290378574135b64c808dc640c1df7531973290c4970c51fdeb849cb0c5"
"Data": "@resdb:///415dc6290378574135b64c808dc640c1df7531973290c4970c51fdeb849cb0c5"
},
"Padding": {
"ID": const Uuid().v4(),
@ -2580,7 +2580,7 @@ class JsonTemplate {
},
"URL": {
"ID": const Uuid().v4(),
"Data": "@neosdb:///bcda0bcc22bab28ea4fedae800bfbf9ec76d71cc3b9f851779a35b7e438a839d"
"Data": "@resdb:///bcda0bcc22bab28ea4fedae800bfbf9ec76d71cc3b9f851779a35b7e438a839d"
},
"Padding": {
"ID": const Uuid().v4(),
@ -2720,7 +2720,7 @@ class JsonTemplate {
},
"URL": {
"ID": const Uuid().v4(),
"Data": "@neosdb:///274f0d4ea4bce93abc224c9ae9f9a97a9a396b382c5338f71c738d1591dd5c35.webp"
"Data": "@resdb:///274f0d4ea4bce93abc224c9ae9f9a97a9a396b382c5338f71c738d1591dd5c35.webp"
},
"FilterMode": {
"ID": const Uuid().v4(),

View file

@ -1,7 +1,7 @@
import 'package:contacts_plus_plus/auxiliary.dart';
import 'package:contacts_plus_plus/models/message.dart';
import 'package:contacts_plus_plus/models/records/asset_digest.dart';
import 'package:contacts_plus_plus/models/records/neos_db_asset.dart';
import 'package:contacts_plus_plus/models/records/resonite_db_asset.dart';
import 'package:contacts_plus_plus/string_formatter.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@ -59,7 +59,7 @@ class Record {
isListed: false,
isForPatreons: false,
lastModificationTime: DateTimeX.epoch,
neosDBManifest: [],
resoniteDBManifest: [],
lastModifyingUserId: "",
lastModifyingMachineId: "",
creationTime: DateTimeX.epoch,
@ -100,7 +100,7 @@ class Record {
final int rating;
final int randomOrder;
final List<String> manifest;
final List<ResoniteDBAsset> neosDBManifest;
final List<ResoniteDBAsset> resoniteDBManifest;
final String url;
final bool isValidOwnerId;
final bool isValidRecordId;
@ -122,7 +122,7 @@ class Record {
required this.isListed,
required this.isForPatreons,
required this.lastModificationTime,
required this.neosDBManifest,
required this.resoniteDBManifest,
required this.lastModifyingUserId,
required this.lastModifyingMachineId,
required this.creationTime,
@ -160,7 +160,7 @@ class Record {
isPublic: false,
isForPatreons: false,
isListed: false,
neosDBManifest: digests.map((e) => e.asset).toList(),
resoniteDBManifest: digests.map((e) => e.asset).toList(),
globalVersion: 0,
localVersion: 1,
lastModifyingUserId: userId,
@ -173,7 +173,7 @@ class Record {
path: '',
description: '',
manifest: digests.map((e) => e.dbUri).toList(),
url: "neosrec:///$userId/${combinedRecordId.id}",
url: "resrec:///$userId/${combinedRecordId.id}",
isValidOwnerId: true,
isValidRecordId: true,
visits: 0,
@ -199,14 +199,14 @@ class Record {
isForPatreons: map["isForPatreons"] ?? false,
isListed: map["isListed"] ?? false,
lastModificationTime: DateTime.tryParse(map["lastModificationTime"]) ?? DateTimeX.epoch,
neosDBManifest: (map["neosDBManifest"] as List? ?? []).map((e) => ResoniteDBAsset.fromMap(e)).toList(),
resoniteDBManifest: (map["resoniteDBManifest"] as List? ?? []).map((e) => ResoniteDBAsset.fromMap(e)).toList(),
lastModifyingUserId: map["lastModifyingUserId"] ?? "",
lastModifyingMachineId: map["lastModifyingMachineId"] ?? "",
creationTime: DateTime.tryParse(map["lastModificationTime"]) ?? DateTimeX.epoch,
isSynced: map["isSynced"] ?? false,
fetchedOn: DateTime.tryParse(map["fetchedOn"] ?? "") ?? DateTimeX.epoch,
path: map["path"] ?? "",
manifest: (map["neosDBManifest"] as List? ?? []).map((e) => e.toString()).toList(),
manifest: (map["resoniteDBManifest"] as List? ?? []).map((e) => e.toString()).toList(),
url: map["url"] ?? "",
isValidOwnerId: map["isValidOwnerId"] == "true",
isValidRecordId: map["isValidRecordId"] == "true",
@ -220,7 +220,7 @@ class Record {
bool get isRoot => this == _rootRecord;
String get linkRecordId {
if (!assetUri.startsWith("neosrec")) {
if (!assetUri.startsWith("resrec")) {
throw "Record is not a link.";
}
@ -233,11 +233,11 @@ class Record {
}
String get linkOwnerId {
if (!assetUri.startsWith("neosrec")) {
if (!assetUri.startsWith("resrec")) {
throw "Record is not a link.";
}
String ownerId = assetUri.replaceFirst("neosrec:///", "");
String ownerId = assetUri.replaceFirst("resrec:///", "");
final lastSlashIdx = ownerId.lastIndexOf("/");
if (lastSlashIdx == -1) {
@ -265,7 +265,7 @@ class Record {
bool? isListed,
bool? isDeleted,
DateTime? lastModificationTime,
List<ResoniteDBAsset>? neosDBManifest,
List<ResoniteDBAsset>? resoniteDBManifest,
String? lastModifyingUserId,
String? lastModifyingMachineId,
DateTime? creationTime,
@ -296,7 +296,7 @@ class Record {
isForPatreons: isForPatreons ?? this.isForPatreons,
isListed: isListed ?? this.isListed,
lastModificationTime: lastModificationTime ?? this.lastModificationTime,
neosDBManifest: neosDBManifest ?? this.neosDBManifest,
resoniteDBManifest: resoniteDBManifest ?? this.resoniteDBManifest,
lastModifyingUserId: lastModifyingUserId ?? this.lastModifyingUserId,
lastModifyingMachineId: lastModifyingMachineId ?? this.lastModifyingMachineId,
creationTime: creationTime ?? this.creationTime,
@ -330,7 +330,7 @@ class Record {
"isForPatreons": isForPatreons,
"isListed": isListed,
"lastModificationTime": lastModificationTime.toUtc().toIso8601String(),
"neosDBManifest": neosDBManifest.map((e) => e.toMap()).toList(),
"resoniteDBManifest": resoniteDBManifest.map((e) => e.toMap()).toList(),
"lastModifyingUserId": lastModifyingUserId,
"lastModifyingMachineId": lastModifyingMachineId,
"creationTime": creationTime.toUtc().toIso8601String(),

View file

@ -6,7 +6,7 @@ class Session {
final String name;
final FormatNode formattedName;
final List<SessionUser> sessionUsers;
final String thumbnail;
final String thumbnailUrl;
final int maxUsers;
final bool hasEnded;
final bool isValid;
@ -22,7 +22,7 @@ class Session {
required this.id,
required this.name,
required this.sessionUsers,
required this.thumbnail,
required this.thumbnailUrl,
required this.maxUsers,
required this.hasEnded,
required this.isValid,
@ -40,7 +40,7 @@ class Session {
id: "",
name: "",
sessionUsers: const [],
thumbnail: "",
thumbnailUrl: "",
maxUsers: 0,
hasEnded: true,
isValid: false,
@ -60,7 +60,7 @@ class Session {
id: map["sessionId"],
name: map["name"],
sessionUsers: (map["sessionUsers"] as List? ?? []).map((entry) => SessionUser.fromMap(entry)).toList(),
thumbnail: map["thumbnailUrl"] ?? "",
thumbnailUrl: map["thumbnailUrl"] ?? "",
maxUsers: map["maxUsers"] ?? 0,
hasEnded: map["hasEnded"] ?? false,
isValid: map["isValid"] ?? true,
@ -78,7 +78,7 @@ class Session {
"sessionId": id,
"name": name,
"sessionUsers": shallow ? [] : sessionUsers.map((e) => e.toMap()).toList(),
"thumbnail": thumbnail,
"thumbnail": thumbnailUrl,
"maxUsers": maxUsers,
"hasEnded": hasEnded,
"isValid": isValid,

View file

@ -7,7 +7,7 @@ import 'package:flutter/foundation.dart';
class Friend implements Comparable {
static const _emptyId = "-1";
static const _neosBotId = "U-Resonite";
static const _resoniteBotId = "U-Resonite";
final String id;
final String username;
final String ownerId;
@ -29,7 +29,7 @@ class Friend implements Comparable {
username: map["contactUsername"],
ownerId: map["ownerId"] ?? map["id"],
// Neos bot status is always offline but should be displayed as online
userStatus: map["id"] == _neosBotId ? userStatus.copyWith(onlineStatus: OnlineStatus.online) : userStatus,
userStatus: map["id"] == _resoniteBotId ? userStatus.copyWith(onlineStatus: OnlineStatus.online) : userStatus,
userProfile: UserProfile.fromMap(map["profile"] ?? {}),
contactStatus: FriendStatus.fromString(map["contactStatus"]),
latestMessageTime: map["latestMessageTime"] == null

View file

@ -1,4 +1,3 @@
import 'package:contacts_plus_plus/config.dart';
import 'package:contacts_plus_plus/models/session.dart';
import 'package:contacts_plus_plus/models/users/online_status.dart';
@ -75,7 +74,7 @@ class UserStatus {
(e) => e.toMap(),
)
.toList(),
"neosVersion": appVersion,
"appVersion": appVersion,
"outputDevice": outputDevice,
"isMobile": isMobile,
"compatibilityHash": compatibilityHash,

View file

@ -4,7 +4,7 @@ import 'package:cached_network_image/cached_network_image.dart';
import 'package:collection/collection.dart';
import 'package:contacts_plus_plus/auxiliary.dart';
import 'package:contacts_plus_plus/clients/inventory_client.dart';
import 'package:contacts_plus_plus/models/inventory/neos_path.dart';
import 'package:contacts_plus_plus/models/inventory/resonite_directory.dart';
import 'package:contacts_plus_plus/models/records/record.dart';
import 'package:contacts_plus_plus/widgets/default_error_widget.dart';
import 'package:contacts_plus_plus/widgets/inventory/object_inventory_tile.dart';
@ -37,7 +37,7 @@ class _InventoryBrowserState extends State<InventoryBrowser> with AutomaticKeepA
Widget build(BuildContext context) {
super.build(context);
return Consumer<InventoryClient>(builder: (BuildContext context, InventoryClient iClient, Widget? child) {
return FutureBuilder<NeosDirectory>(
return FutureBuilder<ResoniteDirectory>(
future: iClient.directoryFuture,
builder: (context, snapshot) {
final currentDir = snapshot.data;
@ -57,8 +57,10 @@ class _InventoryBrowserState extends State<InventoryBrowser> with AutomaticKeepA
await iClient.reloadCurrentDirectory();
_refreshLimiter = Timer(_refreshLimit, () {});
} catch (e) {
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Refresh failed: $e")));
}
}
},
child: Builder(
builder: (context) {

View file

@ -44,7 +44,7 @@ class MessageSessionInvite extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center,
children: [
GenericAvatar(
imageUri: Aux.resdbToHttp(sessionInfo.thumbnail),
imageUri: Aux.resdbToHttp(sessionInfo.thumbnailUrl),
placeholderIcon: Icons.no_photography,
foregroundColor: foregroundColor,
),

View file

@ -14,7 +14,7 @@ class SessionPopup extends StatelessWidget {
@override
Widget build(BuildContext context) {
final ScrollController userListScrollController = ScrollController();
final thumbnailUri = Aux.resdbToHttp(session.thumbnail);
final thumbnailUri = Aux.resdbToHttp(session.thumbnailUrl);
return Dialog(
insetPadding: const EdgeInsets.all(32),
child: Container(
@ -145,7 +145,7 @@ class SessionTile extends StatelessWidget {
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
GenericAvatar(imageUri: Aux.resdbToHttp(session.thumbnail), placeholderIcon: Icons.no_photography),
GenericAvatar(imageUri: Aux.resdbToHttp(session.thumbnailUrl), placeholderIcon: Icons.no_photography),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0),
child: Column(

View file

@ -92,7 +92,7 @@ class _SessionListState extends State<SessionList> with AutomaticKeepAliveClient
child: Hero(
tag: session.id,
child: CachedNetworkImage(
imageUrl: Aux.resdbToHttp(session.thumbnail),
imageUrl: Aux.resdbToHttp(session.thumbnailUrl),
fit: BoxFit.cover,
errorWidget: (context, url, error) => const Center(
child: Icon(

View file

@ -61,7 +61,7 @@ class _SessionViewState extends State<SessionView> {
SizedBox(
height: 192,
child: CachedNetworkImage(
imageUrl: Aux.resdbToHttp(session.thumbnail),
imageUrl: Aux.resdbToHttp(session.thumbnailUrl),
imageBuilder: (context, image) {
return Material(
child: InkWell(