From 8f735d176ebf4d56caa310cedb2371ac5cdcf977 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 13 Jul 2023 13:01:30 -0300 Subject: [PATCH] Add transactional versions of BlogManager methods --- .../briar/api/blog/BlogManager.java | 17 ++++++++ .../briar/blog/BlogManagerImpl.java | 41 ++++++++++++------- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java index b7cc96f41..2af8eae6e 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java @@ -74,6 +74,13 @@ public interface BlogManager { @Nullable String comment, BlogPostHeader parentHeader) throws DbException; + /** + * Adds a comment to an existing blog post or reblogs it. + */ + void addLocalComment(Transaction txn, LocalAuthor author, + GroupId groupId, @Nullable String comment, + BlogPostHeader parentHeader) throws DbException; + /** * Returns the blog with the given ID. */ @@ -99,6 +106,11 @@ public interface BlogManager { */ Collection getBlogs() throws DbException; + /** + * Returns all blogs to which the user subscribes. + */ + Collection getBlogs(Transaction txn) throws DbException; + /** * Returns the group IDs of all blogs to which the user subscribes. */ @@ -136,6 +148,11 @@ public interface BlogManager { */ void setReadFlag(MessageId m, boolean read) throws DbException; + /** + * Marks a blog post as read or unread. + */ + void setReadFlag(Transaction txn, MessageId m, boolean read) throws DbException; + /** * Registers a hook to be called whenever a blog is removed. */ diff --git a/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java index 0280a727b..e230d21c8 100644 --- a/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java @@ -257,12 +257,19 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager, public void addLocalComment(LocalAuthor author, GroupId groupId, @Nullable String comment, BlogPostHeader parentHeader) throws DbException { + db.transaction(false, txn -> { + addLocalComment(txn, author, groupId, comment, parentHeader); + }); + } + @Override + public void addLocalComment(Transaction txn, LocalAuthor author, + GroupId groupId, @Nullable String comment, + BlogPostHeader parentHeader) throws DbException { MessageType type = parentHeader.getType(); if (type != POST && type != COMMENT) throw new IllegalArgumentException("Comment on unknown type!"); - Transaction txn = db.startTransaction(false); try { // Wrap post that we are commenting on MessageId parentOriginalId = @@ -291,13 +298,10 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager, message.getId(), meta); BlogPostAddedEvent event = new BlogPostAddedEvent(groupId, h, true); txn.attach(event); - db.commitTransaction(txn); } catch (FormatException e) { throw new DbException(e); } catch (GeneralSecurityException e) { throw new IllegalArgumentException("Invalid key of author", e); - } finally { - db.endTransaction(txn); } } @@ -430,18 +434,17 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager, @Override public Collection getBlogs() throws DbException { + return db.transactionWithResult(true, this::getBlogs); + } + + @Override + public Collection getBlogs(Transaction txn) throws DbException { try { List blogs = new ArrayList<>(); - Collection groups; - Transaction txn = db.startTransaction(true); - try { - groups = db.getGroups(txn, CLIENT_ID, MAJOR_VERSION); - for (Group g : groups) { - blogs.add(blogFactory.parseBlog(g)); - } - db.commitTransaction(txn); - } finally { - db.endTransaction(txn); + Collection groups = + db.getGroups(txn, CLIENT_ID, MAJOR_VERSION); + for (Group g : groups) { + blogs.add(blogFactory.parseBlog(g)); } return blogs; } catch (FormatException e) { @@ -556,10 +559,18 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager, @Override public void setReadFlag(MessageId m, boolean read) throws DbException { + db.transaction(true, txn -> { + setReadFlag(txn, m, read); + }); + } + + @Override + public void setReadFlag(Transaction txn, MessageId m, boolean read) + throws DbException { try { BdfDictionary meta = new BdfDictionary(); meta.put(KEY_READ, read); - clientHelper.mergeMessageMetadata(m, meta); + clientHelper.mergeMessageMetadata(txn, m, meta); } catch (FormatException e) { throw new RuntimeException(e); }