Skip to content

Commit b7613ec

Browse files
committed
fix: Articles now shown on startup, click tag wrks!
1 parent 70fca69 commit b7613ec

File tree

4 files changed

+26
-14
lines changed

4 files changed

+26
-14
lines changed

lib/core/api/linkding_api_client.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,17 @@ class LinkdingApiClient {
4141
int limit = 20,
4242
int offset = 0,
4343
}) async {
44+
// Linkding uses the `q` parameter with `#tagname` syntax for tag filtering.
45+
final parts = <String>[
46+
if (query != null && query.isNotEmpty) query,
47+
if (tag != null && tag.isNotEmpty) '#$tag',
48+
];
49+
final q = parts.join(' ').trim();
50+
4451
final response = await _dio.get(
4552
'api/bookmarks/',
4653
queryParameters: {
47-
if (query != null && query.isNotEmpty) 'q': query,
48-
if (tag != null && tag.isNotEmpty) 'tag': tag,
54+
if (q.isNotEmpty) 'q': q,
4955
if (isArchived != null) 'is_archived': isArchived ? 1 : 0,
5056
if (isRead != null) 'is_read': isRead ? 1 : 0,
5157
'limit': limit,

lib/features/queue/queue_notifier.dart

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,24 @@ class QueueNotifier extends _$QueueNotifier {
4444
}
4545

4646
void _fetchPage(int offset) async {
47-
final settings = ref.read(settingsNotifierProvider).valueOrNull;
48-
if (settings == null || !settings.isConfigured) return;
47+
// Await settings — on startup they may still be loading from storage.
48+
final settings = await ref.read(settingsNotifierProvider.future);
49+
if (!settings.isConfigured) return;
50+
final filterAtStart = _filter;
4951
try {
5052
final client = ref.read(apiClientProvider);
5153
final response = await client.getBookmarks(
52-
query: _filter.query.isNotEmpty ? _filter.query : null,
53-
tag: _filter.tag,
54+
query: filterAtStart.query.isNotEmpty ? filterAtStart.query : null,
55+
tag: filterAtStart.tag,
5456
isArchived: false,
5557
isRead: false,
5658
limit: _pageSize,
5759
offset: offset,
5860
);
5961

62+
// Discard stale response if the filter changed while awaiting.
63+
if (_filter != filterAtStart) return;
64+
6065
final isLast = offset + response.results.length >= response.count;
6166
if (isLast) {
6267
pagingController.appendLastPage(response.results);
@@ -67,10 +72,12 @@ class QueueNotifier extends _$QueueNotifier {
6772
);
6873
}
6974
} on DioException catch (e) {
75+
if (_filter != filterAtStart) return;
7076
pagingController.error = e.error is ApiException
7177
? e.error
7278
: UnknownException(e.message ?? 'Unknown error');
7379
} catch (e) {
80+
if (_filter != filterAtStart) return;
7481
pagingController.error = UnknownException(e.toString());
7582
}
7683
}

lib/features/queue/queue_screen.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,9 @@ class _QueueScreenState extends ConsumerState<QueueScreen> {
2727
super.didChangeDependencies();
2828
final routeTag =
2929
GoRouterState.of(context).uri.queryParameters['tag'];
30-
if (routeTag != null && routeTag != _selectedTag) {
31-
setState(() => _selectedTag = routeTag);
32-
WidgetsBinding.instance
33-
.addPostFrameCallback((_) => _applyFilter());
30+
if (routeTag != _selectedTag) {
31+
_selectedTag = routeTag;
32+
_applyFilter();
3433
}
3534
}
3635

pubspec.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -548,10 +548,10 @@ packages:
548548
dependency: transitive
549549
description:
550550
name: matcher
551-
sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6"
551+
sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
552552
url: "https://pub.dev"
553553
source: hosted
554-
version: "0.12.18"
554+
version: "0.12.19"
555555
material_color_utilities:
556556
dependency: transitive
557557
description:
@@ -913,10 +913,10 @@ packages:
913913
dependency: transitive
914914
description:
915915
name: test_api
916-
sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636"
916+
sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
917917
url: "https://pub.dev"
918918
source: hosted
919-
version: "0.7.9"
919+
version: "0.7.10"
920920
timing:
921921
dependency: transitive
922922
description:

0 commit comments

Comments
 (0)