added abilty to edit and delete collections
This commit is contained in:
@@ -6,10 +6,10 @@ import '../model/bookmark.dart';
|
||||
import '../model/collection.dart';
|
||||
|
||||
class Storage {
|
||||
static const String _collectionsKey = 'collections';
|
||||
static const String _bookmarksKey = 'bookmarks';
|
||||
static const String _statsKey = 'stats';
|
||||
static const String _collectionsKey = 'collections';
|
||||
static SharedPreferencesWithCache? _prefsWithCache;
|
||||
static const String _statsKey = 'stats';
|
||||
|
||||
static Future<void> initialize() async {
|
||||
_prefsWithCache = await SharedPreferencesWithCache.create(
|
||||
@@ -19,15 +19,6 @@ class Storage {
|
||||
);
|
||||
}
|
||||
|
||||
static SharedPreferencesWithCache get _prefs {
|
||||
if (_prefsWithCache == null) {
|
||||
throw StateError(
|
||||
'BookmarkStorage not initialized. Call initialize() first.',
|
||||
);
|
||||
}
|
||||
return _prefsWithCache!;
|
||||
}
|
||||
|
||||
static List<Collection> loadCollections() {
|
||||
final jsonString = _prefs.getString(_collectionsKey) ?? '[]';
|
||||
final jsonList = jsonDecode(jsonString) as List;
|
||||
@@ -36,12 +27,7 @@ class Storage {
|
||||
.toList();
|
||||
}
|
||||
|
||||
static Future<void> saveCollections(List<Collection> collections) async {
|
||||
final jsonList = collections.map((c) => c.toJson()).toList();
|
||||
await _prefs.setString(_collectionsKey, jsonEncode(jsonList));
|
||||
}
|
||||
|
||||
static List<Bookmark> loadAllBookmarks() {
|
||||
static List<Bookmark> loadBookmarks() {
|
||||
final jsonString = _prefs.getString(_bookmarksKey) ?? '[]';
|
||||
final jsonList = jsonDecode(jsonString) as List;
|
||||
return jsonList
|
||||
@@ -49,42 +35,29 @@ class Storage {
|
||||
.toList();
|
||||
}
|
||||
|
||||
static Future<void> saveAllBookmarks(List<Bookmark> bookmarks) async {
|
||||
static Future<void> saveCollections(List<Collection> collections) async {
|
||||
final jsonList = collections.map((c) => c.toJson()).toList();
|
||||
await _prefs.setString(_collectionsKey, jsonEncode(jsonList));
|
||||
}
|
||||
|
||||
static Future<void> saveBookmarks(List<Bookmark> bookmarks) async {
|
||||
final jsonList = bookmarks.map((b) => b.toJson()).toList();
|
||||
await _prefs.setString(_bookmarksKey, jsonEncode(jsonList));
|
||||
}
|
||||
|
||||
static List<Bookmark> loadBookmarksForCollection(int collectionId) {
|
||||
final allBookmarks = loadAllBookmarks();
|
||||
final allBookmarks = loadBookmarks();
|
||||
return allBookmarks.where((b) => b.collectionId == collectionId).toList();
|
||||
}
|
||||
|
||||
static Future<void> addBookmark(Bookmark bookmark) async {
|
||||
final bookmarks = loadAllBookmarks();
|
||||
final bookmarks = loadBookmarks();
|
||||
bookmarks.add(bookmark);
|
||||
await saveAllBookmarks(bookmarks);
|
||||
}
|
||||
|
||||
static Future<void> deleteBookmark(Bookmark bookmark) async {
|
||||
final bookmarks = loadAllBookmarks();
|
||||
bookmarks.remove(bookmark);
|
||||
await saveAllBookmarks(bookmarks);
|
||||
}
|
||||
|
||||
static Future<void> deleteBookmarkById(int bookmarkId) async {
|
||||
final bookmarks = loadAllBookmarks();
|
||||
bookmarks.removeWhere((b) => b.id == bookmarkId);
|
||||
await saveAllBookmarks(bookmarks);
|
||||
}
|
||||
|
||||
static Future<void> deleteBookmarksForCollection(int collectionId) async {
|
||||
final bookmarks = loadAllBookmarks();
|
||||
bookmarks.removeWhere((b) => b.collectionId == collectionId);
|
||||
await saveAllBookmarks(bookmarks);
|
||||
await saveBookmarks(bookmarks);
|
||||
}
|
||||
|
||||
static Future<void> addOrUpdateBookmark(Bookmark bookmark) async {
|
||||
final bookmarks = loadAllBookmarks();
|
||||
final bookmarks = loadBookmarks();
|
||||
final index = bookmarks.indexWhere((b) => b.id == bookmark.id);
|
||||
|
||||
if (index == -1) {
|
||||
@@ -92,7 +65,19 @@ class Storage {
|
||||
} else if (index >= 0) {
|
||||
bookmarks[index] = bookmark;
|
||||
}
|
||||
await saveAllBookmarks(bookmarks);
|
||||
await saveBookmarks(bookmarks);
|
||||
}
|
||||
|
||||
static Future<void> addOrUpdateCollection(Collection collection) async {
|
||||
final collections = loadCollections();
|
||||
final index = collections.indexWhere((b) => b.id == collection.id);
|
||||
|
||||
if (index == -1) {
|
||||
collections.add(collection);
|
||||
} else if (index >= 0) {
|
||||
collections[index] = collection;
|
||||
}
|
||||
await saveCollections(collections);
|
||||
}
|
||||
|
||||
static Future<void> updateBookmarkById(
|
||||
@@ -101,7 +86,7 @@ class Storage {
|
||||
String? description,
|
||||
String? link,
|
||||
}) async {
|
||||
final bookmarks = loadAllBookmarks();
|
||||
final bookmarks = loadBookmarks();
|
||||
final index = bookmarks.indexWhere((b) => b.id == bookmarkId);
|
||||
|
||||
if (index == -1) return;
|
||||
@@ -110,7 +95,34 @@ class Storage {
|
||||
if (description != null) bookmarks[index].description = description;
|
||||
if (link != null) bookmarks[index].link = link;
|
||||
|
||||
await saveAllBookmarks(bookmarks);
|
||||
await saveBookmarks(bookmarks);
|
||||
}
|
||||
|
||||
static Future<void> deleteBookmark(Bookmark bookmark) async {
|
||||
final bookmarks = loadBookmarks();
|
||||
bookmarks.remove(bookmark);
|
||||
await saveBookmarks(bookmarks);
|
||||
}
|
||||
|
||||
static Future<void> deleteBookmarkById(int bookmarkId) async {
|
||||
final bookmarks = loadBookmarks();
|
||||
bookmarks.removeWhere((b) => b.id == bookmarkId);
|
||||
await saveBookmarks(bookmarks);
|
||||
}
|
||||
|
||||
static Future<void> deleteBookmarksForCollection(int collectionId) async {
|
||||
final bookmarks = loadBookmarks();
|
||||
bookmarks.removeWhere((b) => b.collectionId == collectionId);
|
||||
await saveBookmarks(bookmarks);
|
||||
}
|
||||
|
||||
static Future<void> deleteCollection(Collection collection) async {
|
||||
final collections = loadCollections();
|
||||
final bookmarks = loadBookmarks();
|
||||
bookmarks.removeWhere((bookmark) => bookmark.collectionId == collection.id);
|
||||
collections.remove(collection);
|
||||
await saveBookmarks(bookmarks);
|
||||
await saveCollections(collections);
|
||||
}
|
||||
|
||||
static Map<String, int> getStats() {
|
||||
@@ -124,7 +136,7 @@ class Storage {
|
||||
|
||||
static Future<void> updateStats() async {
|
||||
final collections = loadCollections();
|
||||
final bookmarks = loadAllBookmarks();
|
||||
final bookmarks = loadBookmarks();
|
||||
|
||||
final stats = {
|
||||
'totalCollections': collections.length,
|
||||
@@ -134,4 +146,13 @@ class Storage {
|
||||
|
||||
await _prefs.setString(_statsKey, jsonEncode(stats));
|
||||
}
|
||||
|
||||
static SharedPreferencesWithCache get _prefs {
|
||||
if (_prefsWithCache == null) {
|
||||
throw StateError(
|
||||
'BookmarkStorage not initialized. Call initialize() first.',
|
||||
);
|
||||
}
|
||||
return _prefsWithCache!;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user