briar issueshttps://code.briarproject.org/groups/briar/-/issues2018-06-12T11:32:32Zhttps://code.briarproject.org/briar/briar/-/issues/255Client API improvements2018-06-12T11:32:32ZakwizgranClient API improvementsQuoting @grote:
> Last night I thought about the Client API as well and I tried to forget most of what I know about how things are implemented at the moment, so I can have a fresh view on how a developer writing a client without being f...Quoting @grote:
> Last night I thought about the Client API as well and I tried to forget most of what I know about how things are implemented at the moment, so I can have a fresh view on how a developer writing a client without being familiar with Briar's internals would see things.
> It is nice to being able to access the raw message, being able to put your own data structures in there. It is nice that you can encode and parse metadata. However, for many applications that might not be necessary and all the developer wants is a simple key value store. We have this already with the BdfDictionary which resembles JSON and which I like.
> So I was wondering, why we don't add a layer on top of what we have and allow the client developer to directly get a BdfDictionary (which I will call Payload) from the message. The same way, when composing the message, just let the developer provide the payload and the lower layers handle the rest.
> Here's some pseudo code to illustrate those thoughts:
```java
class MyClient extends BrambleClient {
@Override
public void receivedMessage(Message m) {
Payload payload = m.getPayload(); // this is currently called BdfDictionary
String myString = payload.getString("myString");
long myInt = payload.getIntegeger("myInt");
Object myObject = payload.getSerializable("mySerializableObject");
doSomething(myString, myInt);
}
public void sendMessage() {
Payload payload = new Payload();
payload.putString("myString", "foo");
payload.putInteger("myString", "foo");
payload.putSerializable("mySerializableObject", myObject);
Message m = messageFactory.createMessage(payload);
// if that's not possible, it can be db.addLocalMessage(group, ...)
Group group = getGroup(contact);
group.sendMessage(m);
}
public void doSomething(String s, int i) {
// payload queries for easy access to messages
List<Messages> msgs1 = db.getMessagesWithPayloadKey(group, "myString");
List<Messages> msgs2 = db.getMessagesWherePayload(group, "myString", String, s);
}
}
```
> Adding data to the payload is very similar to how intent extras or bundles work in the Android API, so many people are already familar with it.
> Also note that there's no mention of validatingMessage() because the client developer is only interesting in receiving a message, so there could be just another hook for that.
> If at all possible, I would like the client developer to write as little validation code as possible. Not having to check lengths and such things, but maybe only to see if the payload objects she expects are there.
> I think that payload queries (however they will look like) would also be a very nice addition and convenience methods for client developers, so they don't have to iterate through message lists themselves just to find the ones they are interested in.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/247Replace Guice/Roboguice with Dagger 22018-06-12T11:32:33ZErnir ErlingssonReplace Guice/Roboguice with Dagger 2After much deliberation we decided to replace Guice and Roboguice with Dagger 2 due to these benefits:
* Better performance
* No reflection
* Smaller library
* Compile errors instead of runtime errors.After much deliberation we decided to replace Guice and Roboguice with Dagger 2 due to these benefits:
* Better performance
* No reflection
* Smaller library
* Compile errors instead of runtime errors.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/246Set up unit testing for Android code2018-06-12T11:32:33ZakwizgranSet up unit testing for Android codeWe currently have unit tests for (parts of) briar-core and briar-desktop, but not for briar-android. Some of the UI logic is quite complex and should be tested. Choose an appropriate test framework and set up automated unit tests.We currently have unit tests for (parts of) briar-core and briar-desktop, but not for briar-android. Some of the UI logic is quite complex and should be tested. Choose an appropriate test framework and set up automated unit tests.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/222Metadata queries2018-08-02T11:01:32ZakwizgranMetadata queriesCreate a minimal query interface that allows clients to query messages and groups by their metadata.
This could be loosely modelled on [MongoDB's query interface](https://docs.mongodb.org/manual/core/read-operations-introduction/#quer...Create a minimal query interface that allows clients to query messages and groups by their metadata.
This could be loosely modelled on [MongoDB's query interface](https://docs.mongodb.org/manual/core/read-operations-introduction/#query-interface):
* Use the builder pattern to construct queries
* Optionally supply a criteria object: this is a Metadata object populated with keys and optionally values to match
* Optionally supply a projection object: this is a Metadata object populated with keys to retrieve
* Optionally count results instead of returning them
Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/203Remove Tor binaries from repo2018-06-12T11:32:34ZakwizgranRemove Tor binaries from repoThe Tor binaries (and Tor's GeoIP database) need to be updated regularly - this makes the repo enormous. Remove the binaries from the repo and find a convenient way of downloading and verifying them during the build process - possibly gr...The Tor binaries (and Tor's GeoIP database) need to be updated regularly - this makes the repo enormous. Remove the binaries from the repo and find a convenient way of downloading and verifying them during the build process - possibly gradle-witness?
We may want to remove the binaries from the repo's history too, but that will need to be co-ordinated among all developers to avoid git breakage.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/154Test Requirement of Foreground and Permanent Notification Icon2018-06-12T11:32:36ZTorsten GroteTest Requirement of Foreground and Permanent Notification IconShowing a permanent notification icon is discouraged and many people's notification bar is incredibly cluttered with notification icons already. I'd like to raise the question whether we really need to show the icon to signal the user th...Showing a permanent notification icon is discouraged and many people's notification bar is incredibly cluttered with notification icons already. I'd like to raise the question whether we really need to show the icon to signal the user that she is signed into Briar at the moment.
The notification icon is shown for the app to run in the foreground and for preventing it from getting killed. However, we should experiment to see whether running in the foreground is definitely necessary. (It's more likely to be necessary on devices with less memory, so that's the place to test.)Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/149Use control port to create Tor hidden service2018-06-12T11:32:37ZakwizgranUse control port to create Tor hidden serviceHidden services can now be created via the control port, with the controller storing the private key. This will enable us to store the private key in the encrypted database.Hidden services can now be created via the control port, with the controller storing the private key. This will enable us to store the private key in the encrypted database.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/595Clients should decide whether to share messages2018-06-12T11:32:20ZakwizgranClients should decide whether to share messagesThe validation manager currently sets all messages as shared after delivering them. Clients should specify which messages to share, for example by returning a boolean from the delivery hook or calling DatabaseComponent#setMessageShared()...The validation manager currently sets all messages as shared after delivering them. Clients should specify which messages to share, for example by returning a boolean from the delivery hook or calling DatabaseComponent#setMessageShared() from within the delivery hook.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/591Add New Message Types to BlogValidator2018-06-12T11:32:20ZTorsten GroteAdd New Message Types to BlogValidatorSub-Ticket of #494 and #437.Sub-Ticket of #494 and #437.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/575Fix SharerLeavesBeforeResponse Test2018-06-12T11:32:21ZTorsten GroteFix SharerLeavesBeforeResponse TestThis test was broken by a51d2f47af7674fef8c97aac631608daee675ae6This test was broken by a51d2f47af7674fef8c97aac631608daee675ae6Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/566Raise minimum Android version to 42018-06-12T11:32:21ZakwizgranRaise minimum Android version to 4* Raise minimum API version to 14
* Remove any code and resources that only apply to older versions
* Close as rejected any tickets that only apply to older versions
* Raise minimum API version to 14
* Remove any code and resources that only apply to older versions
* Close as rejected any tickets that only apply to older versions
Milestone Dhttps://code.briarproject.org/briar/briar/-/issues/517Simple UI for Managing RSS Feeds2018-06-12T11:32:23ZTorsten GroteSimple UI for Managing RSS FeedsImplement the design from #483.Implement the design from #483.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/497Implement backend for sharing blogs2018-06-12T11:32:24ZakwizgranImplement backend for sharing blogsSub-task of #406.Sub-task of #406.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/494Implement backend for reblogging and blog comments2018-04-16T16:24:37ZakwizgranImplement backend for reblogging and blog commentsSub-task of #437.
# Group Messages
The group descriptor is a BDF list with three elements: `name` (string), `author_name` (string) and `public_key` (raw). Posts are signed with the corresponding private key.
## 0: Post
A blog p...Sub-task of #437.
# Group Messages
The group descriptor is a BDF list with three elements: `name` (string), `author_name` (string) and `public_key` (raw). Posts are signed with the corresponding private key.
## 0: Post
A blog post.
* `type` (int) - Must be 0
* `content` (string) - The content of the blog post
* `signature` (raw) - A signature over a list with the following elements:
* `group_id` (raw) - Taken from the [message header](BSP#message-format)
* `timestamp` (int) - Taken from the [message header](BSP#message-format)
* `type` (int) - As described above
* `content` (string) - As described above
Dependencies: None
## 1: Comment
A comment on a blog post.
* `type` (int) - Must be 1
* `content` (string or null) - An optional comment added to the post
* `parent_original_id` (raw) - The ID of a post or comment in this group or another group
* `parent_id` (raw) - The ID of a post, comment, wrapped post or wrapped comment in this group, which had the ID `parent_original_id` in the group where it was originally posted
* `signature` (raw) - A signature over a list with the following elements:
* `group_id` (raw) - Taken from the [message header](BSP#message-format)
* `timestamp` (int) - Taken from the [message header](BSP#message-format)
* `type` (int) - As described above
* `content` (string or null) - As described above
* `parent_original_id` (raw) - As described above
* `parent_id` (raw) - As described above
Dependencies: `parent_id`
## 2: Wrapped Post
A post from another group that has been reposted to this group. Not shared with other subscribers unless it is a transitive dependency of a valid post or comment in this group.
* `type` (int) - Must be 2
* `post_group_descriptor` (raw) - The descriptor of the group where the post was originally posted
* `post_timestamp` (int) - Taken from the original post
* `post_content`(string) - Taken from the original post
* `post_signature` (raw) - Taken from the original post
Dependencies: None
## 3: Wrapped Comment
A comment from another group that has been reposted to this group. Not shared with other subscribers unless it is a transitive dependency of a valid post or comment in this group.
* `type` (int) - Must be 3
* `comment_group_descriptor` (raw) - The descriptor of the group where the comment was originally posted
* `comment_timestamp` (int) - Taken from the original comment
* `comment_content` (string or null) - Taken from the original comment
* `comment_parent_original_id` (raw) - Taken from the original comment
* `comment_parent_id` (raw) - Taken from the original comment
* `comment_signature` (raw) - Taken from the original comment
* `parent_id` (raw) - The ID of a post, comment, wrapped post or wrapped comment in this group, which had the ID `comment_parent_original_id` in the group where it was originally posted
Dependencies: `parent_id`
Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/487Proof-of-concept RSS feed import with ROME on Android2018-06-12T11:32:24ZakwizgranProof-of-concept RSS feed import with ROME on AndroidThe pull request to remove the java.beans dependency from ROME has been merged, but it doesn't affect rome-fetcher as that module is deprecated. Ensure that we can build and run the code we need for a basic RSS feed fetcher on Android.The pull request to remove the java.beans dependency from ROME has been merged, but it doesn't affect rome-fetcher as that module is deprecated. Ensure that we can build and run the code we need for a basic RSS feed fetcher on Android.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/486Convert RSS feed entries into Briar blog posts2018-06-12T11:32:24ZakwizgranConvert RSS feed entries into Briar blog postsSub-task of #135.
First iteration:
* Use whatever content is included in the feed, don't try to fetch the full text if it's not included
* Strip HTML tagsSub-task of #135.
First iteration:
* Use whatever content is included in the feed, don't try to fetch the full text if it's not included
* Strip HTML tagsMilestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/485Extract new entries from RSS feed2018-06-12T11:32:24ZakwizgranExtract new entries from RSS feedSub-task of #135.
For each registered feed, keep track of which entries have been seen. Pass any new entries down the pipeline to be converted and posted.Sub-task of #135.
For each registered feed, keep track of which entries have been seen. Pass any new entries down the pipeline to be converted and posted.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/484Implement background task for fetching RSS feeds2018-06-12T11:32:24ZakwizgranImplement background task for fetching RSS feedsSub-task of #135.
* Implemented in briar-core, possibly as a Service so it gets started when the app starts
* Exposes a FeedManager interface that the UI can use to register and unregister feeds
* In the first iteration, fetches fee...Sub-task of #135.
* Implemented in briar-core, possibly as a Service so it gets started when the app starts
* Exposes a FeedManager interface that the UI can use to register and unregister feeds
* In the first iteration, fetches feeds via HTTP
* In a future iteration, uses Tor's SOCKS proxyMilestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/453Update milestone dates2018-06-12T11:32:25ZakwizgranUpdate milestone datesAlso, look into whether we can assign dates to features/tickets.Also, look into whether we can assign dates to features/tickets.Milestone Dakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/452Hide Identities Initially2018-01-28T11:30:28ZTorsten GroteHide Identities InitiallyIt has been decided that we will not support multiple identities initially, so they should be hidden from the UI from now.It has been decided that we will not support multiple identities initially, so they should be hidden from the UI from now.Milestone DTorsten GroteTorsten Grote