briar issueshttps://code.briarproject.org/groups/briar/-/issues2022-12-20T12:20:00Zhttps://code.briarproject.org/briar/briar-desktop/-/issues/441Kotlin BackendException while compiling2022-12-20T12:20:00ZSebwinKotlin BackendException while compilingI recently get this error frequently while trying to build the app. Often after switching branches, happens both on Windows and Linux. Not sure what's the exact cause.
```
org.jetbrains.kotlin.backend.common.BackendException: Backend In...I recently get this error frequently while trying to build the app. Often after switching branches, happens both on Windows and Linux. Not sure what's the exact cause.
```
org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during IR lowering
File being compiled: ~/gitlab/briar/briar-desktop/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt
The root cause java.lang.AssertionError was thrown at: org.jetbrains.kotlin.ir.util.IrUtilsKt.copyValueParametersToStatic(IrUtils.kt:887)
at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException(CodegenUtil.kt:239)
at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException$default(CodegenUtil.kt:235)
at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invokeSequential(performByIrFile.kt:68)
at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(performByIrFile.kt:55)
at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(performByIrFile.kt:41)
at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:96)
at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:29)
at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:96)
at org.jetbrains.kotlin.backend.common.phaser.CompilerPhaseKt.invokeToplevel(CompilerPhase.kt:43)
at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.invokeLowerings(JvmIrCodegenFactory.kt:294)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.runLowerings(KotlinToJVMBytecodeCompiler.kt:339)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:126)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:58)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:158)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:53)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:99)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:47)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:475)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:125)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:373)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally$default(IncrementalCompilerRunner.kt:318)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:180)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:79)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:625)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:101)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1746)
at jdk.internal.reflect.GeneratedMethodAccessor110.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
```https://code.briarproject.org/briar/briar-desktop/-/issues/261Upload to Debian main2022-12-12T10:16:43ZNicoUpload to Debian mainIn order to be able to call `apt install briar-desktop`, we need to bring Briar Desktop into Debian's official repositories, specifically its `main` flavor and not `contrib` or `non-free`.
Being in Debian would mean that virtually all i...In order to be able to call `apt install briar-desktop`, we need to bring Briar Desktop into Debian's official repositories, specifically its `main` flavor and not `contrib` or `non-free`.
Being in Debian would mean that virtually all its descendants like Ubuntu and elementaryOS will also contain this package.
However, getting briar-desktop into Debian is potentially blocked by many issues. This is an epic issue to investigate and manage those issues:
* ~~Kotlin is not yet in Debian~~ Seems like [it's now available in `sid`](https://packages.debian.org/sid/kotlin) :tada:
* Briar most likely isn't allowed to ship its own _tor_ binary, especially with focus on descendants like Tails. See https://code.briarproject.org/briar/briar/-/issues/2095
* All packages must be build offline, therefore we can't download gradle dependencies while building
* Open question: do we have to create a new package for each Gradle dependency?
In case we want to do our own apt repository for the time being, keep in mind that there's a draft in https://code.briarproject.org/briar/briar-apt-repo/-/tree/main.
Sub-issues:
* https://code.briarproject.org/briar/briar-desktop/-/issues/50https://code.briarproject.org/briar/briar-desktop/-/issues/442Use bisection method for finding the best image compression2022-12-10T07:45:37ZJens KorteUse bisection method for finding the best image compressionAt https://code.briarproject.org/briar/briar-desktop/-/blob/main/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/attachment/media/ImageCompressorImpl.kt#L66 the best image size is found by
```
for (quality in 100 downTo 1 ...At https://code.briarproject.org/briar/briar-desktop/-/blob/main/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/attachment/media/ImageCompressorImpl.kt#L66 the best image size is found by
```
for (quality in 100 downTo 1 step 10) {
```
How about replacing the for loop with a loop using the [bisection method](https://en.wikipedia.org/wiki/Bisection_method).https://code.briarproject.org/briar/briar-desktop/-/issues/390Image compressor unable to compress file to 32kb2022-12-09T08:26:46ZSebastianImage compressor unable to compress file to 32kbI found an image for which our ImageCompressor implementation fails to compress it to the required file size:
https://unsplash.com/photos/EHcIO_3DbOg
This is the log:
```
Exception in thread "Thread-13" java.io.IOException
at o...I found an image for which our ImageCompressor implementation fails to compress it to the required file size:
https://unsplash.com/photos/EHcIO_3DbOg
This is the log:
```
Exception in thread "Thread-13" java.io.IOException
at org.briarproject.briar.desktop.attachment.media.ImageCompressorImpl.compressImage(ImageCompressorImpl.kt:86)
at org.briarproject.briar.desktop.conversation.ConversationViewModel$sendMessage$1.invoke(ConversationViewModel.kt:180)
at org.briarproject.briar.desktop.conversation.ConversationViewModel$sendMessage$1.invoke(ConversationViewModel.kt:175)
at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30)
```
[ImageCompressorImpl.kt:86](https://code.briarproject.org/briar/briar-desktop/-/blob/main/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/attachment/media/ImageCompressorImpl.kt#L86)
We have this there:
```kotlin
for (quality in 100 downTo 1 step 10) {
val jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next()
jpgWriter.output = ImageIO.createImageOutputStream(out)
val jpgWriteParam = jpgWriter.defaultWriteParam
jpgWriteParam.compressionMode = ImageWriteParam.MODE_EXPLICIT
jpgWriteParam.compressionQuality = quality / 100f
val outputImage = IIOImage(scaled, null, null)
jpgWriter.write(null, outputImage, jpgWriteParam)
jpgWriter.dispose()
if (out.size() <= MAX_IMAGE_SIZE) {
LOG.i { "Compressed image to ${out.size()} bytes, quality $quality" }
return ByteArrayInputStream(out.toByteArray())
}
out.reset()
}
throw IOException()
```
I have not yet debugged this, but I'm wondering what the lowest quality is that we actually try. We start with 100 but do we reach 1 or 10 as the last value? Edit: I just checked. We never reach 1 but the lowest value we try is 10. I guess we probably should change this to try quality 1 and in doubt even reduce image dimensions if even that does not suffice.
This is the full image:
![imran-hecimovic-EHcIO_3DbOg-unsplash](/uploads/800f92fcdac18eb25a9e43417961d99a/imran-hecimovic-EHcIO_3DbOg-unsplash.jpg)https://code.briarproject.org/briar/public-mesh-research/-/issues/17Initial Investigations: Relevant Projects2022-12-07T04:15:24ZpaulInitial Investigations: Relevant ProjectsA place to list other relevant projects in the public mesh space.A place to list other relevant projects in the public mesh space.Public mesh researchhttps://code.briarproject.org/briar/briar/-/issues/2404Animated GIF doesn't play2022-11-30T18:13:08ZTerence EdenAnimated GIF doesn't playI sent an animated .gif file via Bluetooth. It was received as a JPEG and, naturally, didn't play.
GIFs are fun! I'm not asking that the app integrates a GIF search engine. But it shouldn't transcode the media I send.
Briar 1.4.15 for ...I sent an animated .gif file via Bluetooth. It was received as a JPEG and, naturally, didn't play.
GIFs are fun! I'm not asking that the app integrates a GIF search engine. But it shouldn't transcode the media I send.
Briar 1.4.15 for Android.
(If this is the wrong forum for this report, please let me know.)https://code.briarproject.org/briar/briar/-/issues/1208Explain what the clock icon means2022-11-29T14:31:01ZPratiwirExplain what the clock icon meansI am getting a clock symbol for each new chat bubble. I switched to tor, the connection is working. 3 days of trial left. I go to the main contacts screen and select the top left three bars menu, at the bottom left both internet and wifi...I am getting a clock symbol for each new chat bubble. I switched to tor, the connection is working. 3 days of trial left. I go to the main contacts screen and select the top left three bars menu, at the bottom left both internet and wifi symbols are green.
Each contact displays how long ago I typed a message.
I'd like to see some way to get the server status if possible, ideally the response time could be translated to a color with a note of the last round trip time.
I don't know the server ip, in fact multiping on android seems to be working fine over tor.
Just don't know if the server is down or it is some other problem.https://code.briarproject.org/briar/website/-/issues/43Instructions for building from source should tell developers not to upgrade t...2022-11-28T11:01:35ZakwizgranInstructions for building from source should tell developers not to upgrade the Android Gradle plugin when promptedA new developer reported that they followed the prompt for upgrading the Android Gradle plugin and then the build failed due to checksum failures. The build instructions should warn new contributors to ignore this prompt.A new developer reported that they followed the prompt for upgrading the Android Gradle plugin and then the build failed due to checksum failures. The build instructions should warn new contributors to ignore this prompt.https://code.briarproject.org/briar/briar-desktop/-/issues/237Use central place to show error dialogs by means of some ErrorManager2022-11-27T13:22:07ZMikolai GütschowUse central place to show error dialogs by means of some ErrorManagerThat would avoid having an additional state and two parameters per dialog we want to show.
I think @seb already had a working implementation for #81.That would avoid having an additional state and two parameters per dialog we want to show.
I think @seb already had a working implementation for #81.https://code.briarproject.org/briar/briar/-/issues/2139Image attachments for forums and private groups2022-11-27T09:53:18ZMaxim Kopylovichmaxim380k@mail.ruImage attachments for forums and private groupsPlease add the possibility of submitting images in chats and forums.Please add the possibility of submitting images in chats and forums.https://code.briarproject.org/briar/briar/-/issues/2154Reblogged entry appears duplicated in the main blog feed2022-11-23T16:02:58ZIvanaReblogged entry appears duplicated in the main blog feed**Steps to reproduce:**
Write a blog post and publish it.
Reblog it.
**Expected results:**
The reblogged entry is listed on top of the main blog feed, just once
**Actual results:**
The reblogged entry appears on top of the list in t...**Steps to reproduce:**
Write a blog post and publish it.
Reblog it.
**Expected results:**
The reblogged entry is listed on top of the main blog feed, just once
**Actual results:**
The reblogged entry appears on top of the list in the main blog feed, but it is duplicated. See the screenshot. ![device-2021-08-19-115546](/uploads/3e5487cecf1a8d889ca9c68116616360/device-2021-08-19-115546.png)
If then a new blog post is written, or even if the user taps onto a blogpost to go in and read it, and then returns to the main blog feed screen, the problem rights itself, and the duplicate doesn' show any more, see the screenshot
![device-2021-08-19-115754](/uploads/16f306efec8f250513b869093bdcab32/device-2021-08-19-115754.png)
It would seem that as soon as the main blog feed screen gets refreshed, the problem rights itself.https://code.briarproject.org/briar/briar/-/issues/421Rich Text Editor for Writing Blog Posts2022-11-23T14:44:51ZTorsten GroteRich Text Editor for Writing Blog PostsThis ticket depends on #411.
Blog posts need some kind of styling like Markdown or HTML. Users should have a simple WYSIWYG editor to apply simple styles to their posts.
It's possible to render HTML in TextView (and there's a library t...This ticket depends on #411.
Blog posts need some kind of styling like Markdown or HTML. Users should have a simple WYSIWYG editor to apply simple styles to their posts.
It's possible to render HTML in TextView (and there's a library that extends the support). We could find e.g. a Markdown renderer for Android. When we render arbitrary HTML, we have to be very careful about how we increase the attack surface. We also find a way to handle links. You don't want people to publish blogs with specially prepared links that will deanonymize the readers of the blog once they click on them without special precautions like opening the link only via Orfox for example.
[HTMLTextView](https://github.com/SufficientlySecure/html-textview) could be a candidate for rendering a subset of HTML in TextViews.
For inspiration:
![other app](https://code.briarproject.org/akwizgran/briar/uploads/41699a337c47789ab1a51b929d37a7fa/Screenshot_20160523-092610.jpg)
![new_blog_new_post](/uploads/779490393046b65a97557363cc4651c2/new_blog_new_post.jpg)https://code.briarproject.org/briar/briar/-/issues/689Line breaks entered in blog posts aren't displayed2022-11-23T14:44:51ZakwizgranLine breaks entered in blog posts aren't displayedWhen writing a blog post, I can use the enter key to create line breaks that are shown in the composition window. But they aren't shown when the blog post appears in the feed (presumably because it's rendered as HTML).When writing a blog post, I can use the enter key to create line breaks that are shown in the composition window. But they aren't shown when the blog post appears in the feed (presumably because it's rendered as HTML).https://code.briarproject.org/briar/website/-/issues/29Expand FAQs2022-11-18T17:32:17ZCleopatraExpand FAQsSubtask of #28
```
- What is Briar?
- How does Briar work?
- Why is it called Briar?
- How is Briar different from other messaging apps?
- How do I install/update/uninstall Briar?
- What platforms can I use Briar on?
- Can I send files ...Subtask of #28
```
- What is Briar?
- How does Briar work?
- Why is it called Briar?
- How is Briar different from other messaging apps?
- How do I install/update/uninstall Briar?
- What platforms can I use Briar on?
- Can I send files and images?
- Can I do video calls?
- Why is Briar is always logged out every time I open the app?
- What is the difference between a forum, private group and blog?
- What does Briar use for end2end encryption
- How are messages delivered?
- Why is my connection to a private group so slow?
- What happens to abandoned accounts?
- Why does Briar drain more battery?
- What are some limitations of Briar?
- how can briar sync over the internet without a server? how do you know where to send the sync to? don't you need some kind of known address or middleman to sync?
```CleopatraCleopatrahttps://code.briarproject.org/briar/website/-/issues/28Add "Support" page2022-11-18T17:32:17ZCleopatraAdd "Support" pageLet's consider having a "Support" page
#### Proposed structure
- Links:
User manual
Known issues/limitations
Open issues on Gitlab
- FAQs:
Migrate from https://code.briarproject.org/briar/briar/-...Let's consider having a "Support" page
#### Proposed structure
- Links:
User manual
Known issues/limitations
Open issues on Gitlab
- FAQs:
Migrate from https://code.briarproject.org/briar/briar/-/wikis/FAQ
Expand FAQs
- Get in Touch:
https://chat.briarproject.org/
IRC
Email
- Glossary
- Report a bug
- Request a feature / Give feedbackCleopatraCleopatrahttps://code.briarproject.org/briar/briar/-/issues/1312Include user manual in app2022-11-18T17:32:16ZakwizgranInclude user manual in appA user asked for the manual to be included in the app. This was always the plan but it doesn't look like we had a ticket for it.
Related to #94, #315.A user asked for the manual to be included in the app. This was always the plan but it doesn't look like we had a ticket for it.
Related to #94, #315.CleopatraCleopatrahttps://code.briarproject.org/briar/website/-/issues/21Improve menu structure2022-11-18T17:32:16ZCleopatraImprove menu structure@akwizgran @grote
Referencing [a chat](https://chat.briarproject.org/briar/pl/yciiahqe8pyajqc57re917rz1y) on the UX channel:
> i think submenus would be fine (assuming we do them in css). we might want to do some user testing to make s...@akwizgran @grote
Referencing [a chat](https://chat.briarproject.org/briar/pl/yciiahqe8pyajqc57re917rz1y) on the UX channel:
> i think submenus would be fine (assuming we do them in css). we might want to do some user testing to make sure people with different amounts of technical skill can find what they're looking for
>
> about, documentation and download are pretty common top-level menu items for software projects, although i agree download may not be necessary for us as it's on the front page
>
> so perhaps:
>
> about
> news
> team
> contact
> documentation
> how it works
> user manual
> faq
> wiki
> community
> get involved
> source code
> style guide
------------------
I don't see the point of having submenus. We can show only the most important stuff by keeping the menu structure as simple as:
- About
- Download
- Documentation
- Support
- News
- Contribute
- DonateCleopatraCleopatrahttps://code.briarproject.org/briar/briar/-/issues/1013Private blog posts2022-11-18T17:24:07ZakwizgranPrivate blog postsA user asked for the ability to choose which contacts a blog post is shared with. For example, some posts might only be shared with family members.
The UX for this might involve showing a visibility option when writing a post, and showi...A user asked for the ability to choose which contacts a blog post is shared with. For example, some posts might only be shared with family members.
The UX for this might involve showing a visibility option when writing a post, and showing some kind of private post indicator in place of the reblog button for private posts.
This would require changes to the sync API, as currently a message can be shared with all contacts in a group or none, but not with a subset. However the wire protocol would be unaffected.https://code.briarproject.org/briar/briar/-/issues/920Transfer ownership of a private group2022-11-18T17:24:07ZakwizgranTransfer ownership of a private groupA tester asked for the ability to transfer the ownership of a private group to another member.
This might not be possible with the current structure, because not all members might be contacts of the new owner, or might not wish to revea...A tester asked for the ability to transfer the ownership of a private group to another member.
This might not be possible with the current structure, because not all members might be contacts of the new owner, or might not wish to reveal whether they were.https://code.briarproject.org/briar/briar/-/issues/996Feedback to the "Blog" function2022-11-18T17:24:07ZHenrie SchmidtFeedback to the "Blog" functionHey developers!
Thx for your great work! I really love Briar!
I tested the Blog function of Briar and want to give you some feedback (from my point of view).
Is it possible to group the blog entries in some way? E.g. username -> blog e...Hey developers!
Thx for your great work! I really love Briar!
I tested the Blog function of Briar and want to give you some feedback (from my point of view).
Is it possible to group the blog entries in some way? E.g. username -> blog entry -> comments? The current implementation, where I can see all entries of all my contacts in chronological order is in my opinion really confusing. Also the fact that each blog entry is repeated with each comment is too much.
I really would appreciate that I can see a list of my contacts, click on one contact and see a list of blog entries from this contact, click on a blog entry and can read the contents and the comments.
If you have a lot of contacts with lot of blog entries and lot of comments, the phone is constantly notifiying about new entries. I think this will be eventually really tedious.
Best regards
Jens