From fc8aa42b4fae22998469b55e49751b9009485cca Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Mon, 9 Jun 2025 18:02:09 -0300 Subject: [PATCH] Support new format (preparing for future NIP) --- lib/models/app.dart | 2 +- lib/models/file_metadata.dart | 18 ++++++++++++++---- lib/models/file_metadata.g.dart | 13 ------------- lib/models/nostr_adapter.dart | 1 + lib/models/release.dart | 3 ++- lib/screens/app_detail_screen.dart | 1 - 6 files changed, 18 insertions(+), 20 deletions(-) diff --git a/lib/models/app.dart b/lib/models/app.dart index ff57c8a..47d3c6f 100644 --- a/lib/models/app.dart +++ b/lib/models/app.dart @@ -300,7 +300,7 @@ mixin AppAdapter on Adapter { releases = []; } } else { - // NEW FORMAT + // NEW FORMAT BRANCH final futures = appsNewFormat .map((app) => ref.releases.findAll( params: { diff --git a/lib/models/file_metadata.dart b/lib/models/file_metadata.dart index 60d23c2..6b89a70 100644 --- a/lib/models/file_metadata.dart +++ b/lib/models/file_metadata.dart @@ -9,7 +9,6 @@ part 'file_metadata.g.dart'; @DataAdapter([NostrAdapter, FileMetadataAdapter]) class FileMetadata extends base.FileMetadata with DataModelMixin { - final BelongsTo author; final BelongsTo release; final BelongsTo signer; @@ -17,8 +16,7 @@ class FileMetadata extends base.FileMetadata with DataModelMixin { Object? get id => event.id; FileMetadata.fromJson(super.map) - : author = belongsTo(map['author']), - release = belongsTo(map['release']), + : release = belongsTo(map['release']), signer = belongsTo(map['signer']), super.fromJson(); @@ -31,7 +29,19 @@ mixin FileMetadataAdapter on Adapter { final list = data is Iterable ? data : [data as Map]; for (final e in list) { final map = e as Map; - map['author'] = map['pubkey']; + final isNewFormat = map['kind'] == 3063; + if (isNewFormat) { + // Map to old 1063 + map['kind'] = 1063; + map['tags'].add([ + 'min_sdk_version', + base.BaseUtil.getTag(map['tags'], 'min_os_version') + ]); + map['tags'].add([ + 'target_sdk_version', + base.BaseUtil.getTag(map['tags'], 'target_os_version') + ]); + } } return super.deserialize(data); } diff --git a/lib/models/file_metadata.g.dart b/lib/models/file_metadata.g.dart index 0fc4648..8b1d7b0 100644 --- a/lib/models/file_metadata.g.dart +++ b/lib/models/file_metadata.g.dart @@ -10,12 +10,6 @@ part of 'file_metadata.dart'; mixin _$FileMetadataAdapter on Adapter { static final Map _kFileMetadataRelationshipMetas = { - 'author': RelationshipMeta( - name: 'author', - type: 'users', - kind: 'BelongsTo', - instance: (_) => (_ as FileMetadata).author, - ), 'release': RelationshipMeta( name: 'release', inverseName: 'artifacts', @@ -64,13 +58,6 @@ extension FileMetadataAdapterX on Adapter { extension FileMetadataRelationshipGraphNodeX on RelationshipGraphNode { - RelationshipGraphNode get author { - final meta = _$FileMetadataAdapter._kFileMetadataRelationshipMetas['author'] - as RelationshipMeta; - return meta.clone( - parent: this is RelationshipMeta ? this as RelationshipMeta : null); - } - RelationshipGraphNode get release { final meta = _$FileMetadataAdapter._kFileMetadataRelationshipMetas['release'] diff --git a/lib/models/nostr_adapter.dart b/lib/models/nostr_adapter.dart index 7b3a476..6439b70 100644 --- a/lib/models/nostr_adapter.dart +++ b/lib/models/nostr_adapter.dart @@ -178,6 +178,7 @@ mixin NostrAdapter> on Adapter { if (metadataIds.isNotEmpty) ref.fileMetadata.findAll( params: { + 'kinds': {1063, 3063}, 'ids': metadataIds, '#m': [kAndroidMimeType], 'ignoreReturn': true, diff --git a/lib/models/release.dart b/lib/models/release.dart index 8573044..b66abfc 100644 --- a/lib/models/release.dart +++ b/lib/models/release.dart @@ -42,7 +42,8 @@ mixin ReleaseAdapter on Adapter { for (final Map map in list) { final tags = map['tags']; - map['app'] = base.BaseUtil.getTag(tags, 'a'); + map['app'] = base.BaseUtil.getTag(tags, 'a') ?? + '32267:${map['pubkey']}:${base.BaseUtil.getTag(tags, 'i')}'; map['artifacts'] = base.BaseUtil.getTagSet(tags, 'e').toList(); } return super.deserialize(data); diff --git a/lib/screens/app_detail_screen.dart b/lib/screens/app_detail_screen.dart index cf32a09..c4c3ed0 100644 --- a/lib/screens/app_detail_screen.dart +++ b/lib/screens/app_detail_screen.dart @@ -31,7 +31,6 @@ class AppDetailScreen extends HookConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final scrollController = ScrollController(); - // TODO: Bug using remote=true in watchOne, use hook for now final snapshot = useFuture(useMemoized(() async { // Skip cache to actually hit the remote to refresh return await ref.apps