fix: deep links when using the beta timeline

This commit is contained in:
bwees
2025-07-23 14:29:32 -05:00
parent f27bdf7523
commit 9ed3bbf12f
7 changed files with 211 additions and 35 deletions
@@ -59,6 +59,44 @@ class DriftMemoryRepository extends DriftDatabaseRepository {
return memoriesMap.values.toList();
}
Future<DriftMemory?> get(String memoryId) async {
final query = _db.select(_db.memoryEntity).join([
leftOuterJoin(
_db.memoryAssetEntity,
_db.memoryAssetEntity.memoryId.equalsExp(_db.memoryEntity.id),
),
leftOuterJoin(
_db.remoteAssetEntity,
_db.remoteAssetEntity.id.equalsExp(_db.memoryAssetEntity.assetId) &
_db.remoteAssetEntity.deletedAt.isNull() &
_db.remoteAssetEntity.visibility
.equalsValue(AssetVisibility.timeline),
),
])
..where(_db.memoryEntity.id.equals(memoryId))
..where(_db.memoryEntity.deletedAt.isNull())
..orderBy([
OrderingTerm.desc(_db.memoryEntity.memoryAt),
OrderingTerm.asc(_db.remoteAssetEntity.createdAt),
]);
final rows = await query.get();
if (rows.isEmpty) {
return null;
}
final memory = rows.first.readTable(_db.memoryEntity);
final assets = <RemoteAsset>[];
for (final row in rows) {
final asset = row.readTable(_db.remoteAssetEntity);
assets.add(asset.toDto());
}
return memory.toDto().copyWith(assets: assets);
}
Future<int> getCount() {
return _db.managers.memoryEntity.count();
}
@@ -68,6 +68,41 @@ class DriftRemoteAlbumRepository extends DriftDatabaseRepository {
.get();
}
Future<RemoteAlbum> get(String albumId) {
final assetCount = _db.remoteAlbumAssetEntity.assetId.count();
final query = _db.remoteAlbumEntity.select().join([
leftOuterJoin(
_db.remoteAlbumAssetEntity,
_db.remoteAlbumAssetEntity.albumId.equalsExp(_db.remoteAlbumEntity.id),
useColumns: false,
),
leftOuterJoin(
_db.remoteAssetEntity,
_db.remoteAssetEntity.id.equalsExp(_db.remoteAlbumAssetEntity.assetId),
useColumns: false,
),
leftOuterJoin(
_db.userEntity,
_db.userEntity.id.equalsExp(_db.remoteAlbumEntity.ownerId),
useColumns: false,
),
])
..where(_db.remoteAlbumEntity.id.equals(albumId))
..addColumns([assetCount])
..addColumns([_db.userEntity.name])
..groupBy([_db.remoteAlbumEntity.id]);
return query
.map(
(row) => row.readTable(_db.remoteAlbumEntity).toDto(
assetCount: row.read(assetCount) ?? 0,
ownerName: row.read(_db.userEntity.name)!,
),
)
.getSingle();
}
Future<void> create(
RemoteAlbum album,
List<String> assetIds,
@@ -31,6 +31,25 @@ class RemoteAssetRepository extends DriftDatabaseRepository {
return query.map((row) => row.toDto()).get();
}
Future<RemoteAsset?> get(String id) {
final query = _db.remoteAssetEntity.select().addColumns([
_db.localAssetEntity.id,
]).join([
leftOuterJoin(
_db.localAssetEntity,
_db.remoteAssetEntity.checksum.equalsExp(_db.localAssetEntity.checksum),
useColumns: false,
),
])
..where(_db.remoteAssetEntity.id.equals(id))
..limit(1);
return query.map((row) {
final asset = row.readTable(_db.remoteAssetEntity).toDto();
return asset.copyWith(localId: row.read(_db.localAssetEntity.id));
}).getSingleOrNull();
}
Stream<RemoteAsset?> watchAsset(String id) {
final query = _db.remoteAssetEntity.select().addColumns([
_db.localAssetEntity.id,