Added bookmark options to search and tag bookmarks
This commit is contained in:
@@ -175,7 +175,7 @@ final getTagsProvider =
|
||||
);
|
||||
|
||||
typedef GetTagsRef = AutoDisposeFutureProviderRef<ApiResponse<TagsResponse>>;
|
||||
String _$addBookmarkHash() => r'ace81358d08fd833b2aa06edddcb10f00728c30c';
|
||||
String _$addBookmarkHash() => r'510fe4dbdc6628a13be9d8c5c2581fd5ac94ca68';
|
||||
|
||||
/// See also [AddBookmark].
|
||||
@ProviderFor(AddBookmark)
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
import 'package:linkdy/screens/bookmarks/provider/common_functions.dart';
|
||||
import 'package:linkdy/screens/bookmarks/provider/favicon_loader.provider.dart';
|
||||
import 'package:linkdy/screens/bookmarks/model/bookmarks.model.dart';
|
||||
|
||||
import 'package:linkdy/models/data/set_bookmark_data.dart';
|
||||
import 'package:linkdy/utils/process_modal.dart';
|
||||
import 'package:linkdy/utils/snackbar.dart';
|
||||
import 'package:linkdy/i18n/strings.g.dart';
|
||||
import 'package:linkdy/models/data/bookmarks.dart';
|
||||
import 'package:linkdy/providers/api_client.provider.dart';
|
||||
import 'package:linkdy/constants/enums.dart';
|
||||
@@ -83,62 +79,45 @@ class Bookmarks extends _$Bookmarks {
|
||||
ref.notifyListeners();
|
||||
}
|
||||
|
||||
void setBookmarks(List<Bookmark> bookmarks) {
|
||||
state.bookmarks = bookmarks;
|
||||
ref.notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> refresh() async {
|
||||
await ref.read(bookmarksRequestProvider(state.limit).future);
|
||||
}
|
||||
|
||||
void deleteBookmark(Bookmark bookmark) async {
|
||||
final processModal = ProcessModal();
|
||||
processModal.open(t.bookmarks.bookmarkOptions.deletingBookmark);
|
||||
|
||||
final result = await ref.read(apiClientProvider)!.postDeleteBookmark(bookmark.id!);
|
||||
|
||||
processModal.close();
|
||||
if (result.successful == true) {
|
||||
final result = await BookmarkCommonFunctions.deleteBookmark(
|
||||
bookmark: bookmark,
|
||||
apiClient: ref.read(apiClientProvider)!,
|
||||
);
|
||||
if (result == true) {
|
||||
state.bookmarks = state.bookmarks.where((b) => b.id != bookmark.id).toList();
|
||||
ref.notifyListeners();
|
||||
showSnacbkar(label: t.bookmarks.bookmarkOptions.bookmarkDeleted, color: Colors.green);
|
||||
} else {
|
||||
showSnacbkar(label: t.bookmarks.bookmarkOptions.bookmarkNotDeleted, color: Colors.red);
|
||||
}
|
||||
}
|
||||
|
||||
void markAsReadUnread(Bookmark bookmark) async {
|
||||
final processModal = ProcessModal();
|
||||
processModal.open(
|
||||
bookmark.unread == true ? t.bookmarks.bookmarkOptions.markingAsRead : t.bookmarks.bookmarkOptions.markingAsUnead,
|
||||
final result = await BookmarkCommonFunctions.markAsReadUnread(
|
||||
bookmark: bookmark,
|
||||
apiClient: ref.read(apiClientProvider)!,
|
||||
);
|
||||
|
||||
final result = await ref.read(apiClientProvider)!.putUpdateBookmark(
|
||||
bookmark.id!,
|
||||
SetBookmarkData(
|
||||
url: bookmark.url!,
|
||||
description: bookmark.description ?? '',
|
||||
isArchived: bookmark.isArchived ?? false,
|
||||
shared: bookmark.shared ?? false,
|
||||
unread: bookmark.unread == true ? false : true,
|
||||
tagNames: bookmark.tagNames?.join(",") ?? '',
|
||||
title: bookmark.title ?? '',
|
||||
),
|
||||
);
|
||||
|
||||
processModal.close();
|
||||
if (result.successful == true) {
|
||||
state.bookmarks = state.bookmarks.map((b) => b.id == result.content!.id ? result.content! : b).toList();
|
||||
if (result != null) {
|
||||
state.bookmarks = state.bookmarks.map((b) => b.id == result.id ? result : b).toList();
|
||||
ref.notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void archiveUnarchive(Bookmark bookmark) async {
|
||||
final result = await BookmarkCommonFunctions.markAsReadUnread(
|
||||
bookmark: bookmark,
|
||||
apiClient: ref.read(apiClientProvider)!,
|
||||
);
|
||||
if (result != null) {
|
||||
state.bookmarks = state.bookmarks.map((b) => b.id == result.id ? result : b).toList();
|
||||
ref.notifyListeners();
|
||||
showSnacbkar(
|
||||
label: bookmark.unread == true
|
||||
? t.bookmarks.bookmarkOptions.markedAsReadSuccessfully
|
||||
: t.bookmarks.bookmarkOptions.markedAsUnreadSuccessfully,
|
||||
color: Colors.green,
|
||||
);
|
||||
} else {
|
||||
showSnacbkar(
|
||||
label: bookmark.unread == true
|
||||
? t.bookmarks.bookmarkOptions.bookmarkNotMarkedAsRead
|
||||
: t.bookmarks.bookmarkOptions.bookmarkNotMarkedAsUnread,
|
||||
color: Colors.red,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,7 +172,7 @@ final bookmarksRequestLoadMoreProvider =
|
||||
);
|
||||
|
||||
typedef BookmarksRequestLoadMoreRef = AutoDisposeFutureProviderRef<void>;
|
||||
String _$bookmarksHash() => r'63863329236a127fce0f7b75e2461a841c0cae55';
|
||||
String _$bookmarksHash() => r'82c31fa1cbab1ba1e5c77486e7dc7ce5a86e20a5';
|
||||
|
||||
/// See also [Bookmarks].
|
||||
@ProviderFor(Bookmarks)
|
||||
|
||||
114
lib/screens/bookmarks/provider/common_functions.dart
Normal file
114
lib/screens/bookmarks/provider/common_functions.dart
Normal file
@@ -0,0 +1,114 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:linkdy/i18n/strings.g.dart';
|
||||
import 'package:linkdy/models/data/bookmarks.dart';
|
||||
import 'package:linkdy/models/data/set_bookmark_data.dart';
|
||||
import 'package:linkdy/services/api_client.dart';
|
||||
import 'package:linkdy/utils/process_modal.dart';
|
||||
import 'package:linkdy/utils/snackbar.dart';
|
||||
|
||||
class BookmarkCommonFunctions {
|
||||
static Future<bool> deleteBookmark({
|
||||
required Bookmark bookmark,
|
||||
required ApiClientService apiClient,
|
||||
}) async {
|
||||
final processModal = ProcessModal();
|
||||
processModal.open(t.bookmarks.bookmarkOptions.deletingBookmark);
|
||||
|
||||
final result = await apiClient.postDeleteBookmark(bookmark.id!);
|
||||
|
||||
processModal.close();
|
||||
if (result.successful == true) {
|
||||
showSnacbkar(label: t.bookmarks.bookmarkOptions.bookmarkDeleted, color: Colors.green);
|
||||
} else {
|
||||
showSnacbkar(label: t.bookmarks.bookmarkOptions.bookmarkNotDeleted, color: Colors.red);
|
||||
}
|
||||
return result.successful;
|
||||
}
|
||||
|
||||
static Future<Bookmark?> markAsReadUnread({
|
||||
required Bookmark bookmark,
|
||||
required ApiClientService apiClient,
|
||||
}) async {
|
||||
final processModal = ProcessModal();
|
||||
processModal.open(
|
||||
bookmark.unread == true ? t.bookmarks.bookmarkOptions.markingAsRead : t.bookmarks.bookmarkOptions.markingAsUnead,
|
||||
);
|
||||
|
||||
final result = await apiClient.putUpdateBookmark(
|
||||
bookmark.id!,
|
||||
SetBookmarkData(
|
||||
url: bookmark.url!,
|
||||
description: bookmark.description ?? '',
|
||||
isArchived: bookmark.isArchived ?? false,
|
||||
shared: bookmark.shared ?? false,
|
||||
unread: bookmark.unread == true ? false : true,
|
||||
tagNames: bookmark.tagNames?.join(",") ?? '',
|
||||
title: bookmark.title ?? '',
|
||||
),
|
||||
);
|
||||
|
||||
processModal.close();
|
||||
if (result.successful == true) {
|
||||
showSnacbkar(
|
||||
label: bookmark.unread == true
|
||||
? t.bookmarks.bookmarkOptions.markedAsReadSuccessfully
|
||||
: t.bookmarks.bookmarkOptions.markedAsUnreadSuccessfully,
|
||||
color: Colors.green,
|
||||
);
|
||||
return result.content;
|
||||
} else {
|
||||
showSnacbkar(
|
||||
label: bookmark.unread == true
|
||||
? t.bookmarks.bookmarkOptions.bookmarkNotMarkedAsRead
|
||||
: t.bookmarks.bookmarkOptions.bookmarkNotMarkedAsUnread,
|
||||
color: Colors.red,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
static Future<Bookmark?> archiveUnarchive({
|
||||
required Bookmark bookmark,
|
||||
required ApiClientService apiClient,
|
||||
}) async {
|
||||
final processModal = ProcessModal();
|
||||
processModal.open(
|
||||
bookmark.unread == true
|
||||
? t.bookmarks.bookmarkOptions.archivingBookmark
|
||||
: t.bookmarks.bookmarkOptions.unarchivingBookmark,
|
||||
);
|
||||
|
||||
final result = await apiClient.putUpdateBookmark(
|
||||
bookmark.id!,
|
||||
SetBookmarkData(
|
||||
url: bookmark.url!,
|
||||
description: bookmark.description ?? '',
|
||||
unread: bookmark.unread ?? false,
|
||||
shared: bookmark.shared ?? false,
|
||||
isArchived: bookmark.isArchived == true ? false : true,
|
||||
tagNames: bookmark.tagNames?.join(",") ?? '',
|
||||
title: bookmark.title ?? '',
|
||||
),
|
||||
);
|
||||
|
||||
processModal.close();
|
||||
if (result.successful == true) {
|
||||
showSnacbkar(
|
||||
label: bookmark.isArchived == true
|
||||
? t.bookmarks.bookmarkOptions.bookmarkUnrchivedSuccessfully
|
||||
: t.bookmarks.bookmarkOptions.bookmarkArchivedSuccessfully,
|
||||
color: Colors.green,
|
||||
);
|
||||
return result.content;
|
||||
} else {
|
||||
showSnacbkar(
|
||||
label: bookmark.isArchived == true
|
||||
? t.bookmarks.bookmarkOptions.bookmarkNotUnrchived
|
||||
: t.bookmarks.bookmarkOptions.bookmarkNotArchived,
|
||||
color: Colors.red,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,6 +49,8 @@ class FaviconStore extends _$FaviconStore {
|
||||
}
|
||||
|
||||
void loadFavicons(List<Bookmark> bookmarks) async {
|
||||
if (state.loadingFavicons == true) return;
|
||||
|
||||
state.loadingFavicons = true;
|
||||
ref.notifyListeners();
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ part of 'favicon_loader.provider.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$faviconStoreHash() => r'87cd0d0c0df889ca3238b6c05389b8dd351d189c';
|
||||
String _$faviconStoreHash() => r'aeda388d2c7d220a43a29825a9850d8d7433d84f';
|
||||
|
||||
/// See also [FaviconStore].
|
||||
@ProviderFor(FaviconStore)
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
import 'package:linkdy/screens/bookmarks/provider/favicon_loader.provider.dart';
|
||||
import 'package:linkdy/screens/bookmarks/provider/bookmarks.provider.dart';
|
||||
import 'package:linkdy/screens/bookmarks/provider/common_functions.dart';
|
||||
import 'package:linkdy/screens/bookmarks/model/search_bookmarks.model.dart';
|
||||
|
||||
import 'package:linkdy/constants/enums.dart';
|
||||
import 'package:linkdy/models/data/bookmarks.dart';
|
||||
import 'package:linkdy/providers/api_client.provider.dart';
|
||||
|
||||
part 'search_bookmarks.provider.g.dart';
|
||||
@@ -19,6 +23,7 @@ FutureOr<void> fetchSearchBookmarks(FetchSearchBookmarksRef ref, int limit) asyn
|
||||
);
|
||||
|
||||
if (result.successful == true) {
|
||||
ref.read(faviconStoreProvider.notifier).loadFavicons(result.content!.results!);
|
||||
ref.read(searchBookmarksProvider).bookmarks = result.content!.results!;
|
||||
ref.read(searchBookmarksProvider).maxNumber = result.content!.count!;
|
||||
ref.read(searchBookmarksProvider).currentPage = 0;
|
||||
@@ -41,9 +46,9 @@ FutureOr<void> fetchSearchBookmarksLoadMore(FetchSearchBookmarksLoadMoreRef ref)
|
||||
limit: provider.limit,
|
||||
offset: newOffset,
|
||||
);
|
||||
await Future.delayed(Duration(seconds: 3));
|
||||
|
||||
if (result.successful == true) {
|
||||
ref.read(faviconStoreProvider.notifier).loadFavicons(result.content!.results!);
|
||||
provider.bookmarks = [...provider.bookmarks, ...result.content!.results!];
|
||||
provider.maxNumber = result.content!.count!;
|
||||
provider.currentPage = provider.currentPage + 1;
|
||||
@@ -92,4 +97,46 @@ class SearchBookmarks extends _$SearchBookmarks {
|
||||
void notifyListeners() {
|
||||
ref.notifyListeners();
|
||||
}
|
||||
|
||||
void deleteBookmark(Bookmark bookmark) async {
|
||||
final result = await BookmarkCommonFunctions.deleteBookmark(
|
||||
bookmark: bookmark,
|
||||
apiClient: ref.read(apiClientProvider)!,
|
||||
);
|
||||
if (result == true) {
|
||||
state.bookmarks = state.bookmarks.where((b) => b.id != bookmark.id).toList();
|
||||
ref.notifyListeners();
|
||||
ref
|
||||
.read(bookmarksProvider.notifier)
|
||||
.setBookmarks(ref.read(bookmarksProvider).bookmarks.where((b) => b.id != bookmark.id).toList());
|
||||
}
|
||||
}
|
||||
|
||||
void markAsReadUnread(Bookmark bookmark) async {
|
||||
final result = await BookmarkCommonFunctions.markAsReadUnread(
|
||||
bookmark: bookmark,
|
||||
apiClient: ref.read(apiClientProvider)!,
|
||||
);
|
||||
if (result != null) {
|
||||
state.bookmarks = state.bookmarks.map((b) => b.id == result.id ? result : b).toList();
|
||||
ref.notifyListeners();
|
||||
ref
|
||||
.read(bookmarksProvider.notifier)
|
||||
.setBookmarks(ref.read(bookmarksProvider).bookmarks.map((b) => b.id == result.id ? result : b).toList());
|
||||
}
|
||||
}
|
||||
|
||||
void archiveUnarchive(Bookmark bookmark) async {
|
||||
final result = await BookmarkCommonFunctions.markAsReadUnread(
|
||||
bookmark: bookmark,
|
||||
apiClient: ref.read(apiClientProvider)!,
|
||||
);
|
||||
if (result != null) {
|
||||
state.bookmarks = state.bookmarks.map((b) => b.id == result.id ? result : b).toList();
|
||||
ref.notifyListeners();
|
||||
ref
|
||||
.read(bookmarksProvider.notifier)
|
||||
.setBookmarks(ref.read(bookmarksProvider).bookmarks.map((b) => b.id == result.id ? result : b).toList());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ part of 'search_bookmarks.provider.dart';
|
||||
// **************************************************************************
|
||||
|
||||
String _$fetchSearchBookmarksHash() =>
|
||||
r'dea1740df4ad970bc1ffd90d85aa0d1d2cf94bf2';
|
||||
r'a854d28b2c2b6761cfd716bcbe081b54fbbf29ef';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
@@ -158,7 +158,7 @@ class _FetchSearchBookmarksProviderElement
|
||||
}
|
||||
|
||||
String _$fetchSearchBookmarksLoadMoreHash() =>
|
||||
r'4c085e4dc487554a209fa73170294b5b8e279c24';
|
||||
r'f07a6a89f5a87a0f26d3a8d2d49f1d98ce36a287';
|
||||
|
||||
/// See also [fetchSearchBookmarksLoadMore].
|
||||
@ProviderFor(fetchSearchBookmarksLoadMore)
|
||||
@@ -174,7 +174,7 @@ final fetchSearchBookmarksLoadMoreProvider =
|
||||
);
|
||||
|
||||
typedef FetchSearchBookmarksLoadMoreRef = AutoDisposeFutureProviderRef<void>;
|
||||
String _$searchBookmarksHash() => r'db9f8d8cc488e820791e22c594ad9046da73ec25';
|
||||
String _$searchBookmarksHash() => r'843fe597bceab3e3f512b5b4a40ddd1dbeb09f9d';
|
||||
|
||||
/// See also [SearchBookmarks].
|
||||
@ProviderFor(SearchBookmarks)
|
||||
|
||||
Reference in New Issue
Block a user