A multi-plateform (Flutter) application for reading your emails, with your favorite devices, using the JMAP protocol!

Overview

Tmail Flutter mobile application

Gitter

LOGO

This project aims at providing a multi-plateform mobile email application, running the JMAP protocol and will also deliver additional features to the TMail back-end.

Here is how TMail looks like on a phone:

Screenshots Mobile

Here is how TMail looks like on a tablet:

Screenshot Tablet

FAQ

Why did you choose JMAP?

Read more... That is a good question! **IMAP** is THE ubiquitous protocol people use to read their emails, THE norm.

Yet IMAP had been designed in another age, which resulted in a chatty patchwork of extensions. IMAP lacks decent synchronisation primitives to address real-time challenges modern mobile fleet requires, it consumes a lot of bandwith, requires a lot of roundtrips which means high latency.

We are not alone to say this! Big players of the field started their own proprietary protocols to address IMAP flaws, and inter-operable standard was yet to be found...

This, is where JMAP comes to play! JMAP builds on decades of experience, and beautifully addresses these challenges using HTTP and JSON standards. Not only does it make applications easier to develop, we also strongly believes it results in an improved experience for the end user.

Can I use TMail with any JMAP server?

Yes, you can use the TMail application with any JMAP server and benefits from Tmail ergonomy and ease of use.

I don't understand your app... I need help using it! HELP MEEEEEE...

Read more... Don't worry, we are here!

We plan on writing a user documentation, helping you navigating around the application, and detailing the few configurations you have to perform.

If what you are looking for is not in the user guide then ask us directly in the issues first, we would be glad to help. But also glad to improve our documentation and maybe tweak slightly our UI (user interface).

What plateforms do you (plan to) target?

Read more... First, we target Android, IOS mobiles. We also take care of tablets and large rendering space early on in the development process.

Then, we plan on introducing a desktop application.

This versatility is enabled by the use of the Flutter framework.

What would your roadmap look like?

Read more... First, we plan to write a simple, multi-plateform JMAP email client. This includes reading your mails and mailboxes, managing them, sending emails, searching your emails. This will likely keep us busy by the end of 2021.

Then, we have plan for multiple features including:

  • Support for TMail encrypted mailbox (GPG)
  • Support for TMail shared mailboxes
  • Support for TMail filters
  • Interactions with some other software from Linagora including:
    • Sending attachments via LinShare file sharing platform.
    • Transfering some attachments you received to LinShare file sharing platform.
    • Discussing some emails you received via Twake chat.

Any chance to support JMAP extension for calendar, contacts?

No we do not plan to support such extensions, that are currently not standardized as RFCs, nor implemented on the TMail backend.

Your work is awesome! I would like to help you. What can I do?

Read more... Thanks for the enthousiasm!

There are many ways to help us, and amongst them:

  • Spread the word: Tell people you like TMail, on social medias, via blog posts etc...
  • Give us feedbacks... It's hard to make all good decisions from the first time. It is very likely we can benefit from your experience. Did you encountered annoying bugs? Do you think we can better arrange the layout? Do you think we are missing some features critical to you? Tell us in the issues.
  • I can code! I wanna help ;-). Wow thanks! Let's discuss your project together in the issues to get you on track!

Cool. I also want to write my own email application for JMAP. Can you help me?

You would be pleased to know we contributes a JMAP Dart client that you can reuse to write your own applications. Feels free to open pull requests and enrich it!

Comments
  • [Story] As an user, i want to choose a mailbox and see mail list inside

    [Story] As an user, i want to choose a mailbox and see mail list inside

    Summary

    Related EPIC

    Definition

    • Given that i am a Tmail user and i already had an account (John Doe).

    • Given that i log-in successfully to the Tmail app.

    • I can see the default view is Inbox mail list.

    • I click on Inbox title, the list of mailboxes screen will be opened.

    • I can select another mailbox and the list of mail inside that mailbox will be opened.

      • For "Draft" mailbox: The mail listing rule is as same as Inbox #9 except that on each email i can see a label "Draft"
      • For "Sent:The mail listing rule is as same as Inbox #9
      • For "Trash": The mail listing rule is as same as Inbox #9
      • For "Spam": The mail listing rule is as same as Inbox #9
      • For Created mailboxes : The mail listing rule is as same as Inbox #9
    • When an mailbox is opened, the folder's name will be displayed on top of screen. If that mailbox has a counter for unseen message, the number will be displayed next to Folder's name.

    • The email list should be refreshed real time: When an email is deleted or added, it will be reflected instantly on listing mail screen.

    Back to Summary

    UI Design

    Mockups

    Final design

    image.png

    Back to Summary

    Technical issues

    Back to Summary

    Misc

    Back to Summary

    opened by dieptran88 26
  • Read email content for each email in Thread

    Read email content for each email in Thread

    • [x] Implement get email content when click each email
    • [x] Mark unread email, flaggedemail in list email
    • [x] Display message content with text/plain format
    • [x] Display address To, Cc, Bcc header with Collapse/Expand mode
    • [x] Display message content with text/html format

    https://user-images.githubusercontent.com/80730648/129350690-956c58b5-d627-4d1d-b788-b4f79b1bcaea.mov

    Demo Display email content with html format

    https://user-images.githubusercontent.com/80730648/129889395-48c844db-24ab-4606-9a1d-ec72cf260f94.mov

    https://user-images.githubusercontent.com/80730648/130059536-d76a4f2d-39da-4bf6-8761-153531ffa535.mov

    opened by dab246 25
  • Empty  entries in email list view

    Empty entries in email list view

    Description

    https://user-images.githubusercontent.com/6928740/158096991-f1555845-82f3-45f2-aee8-d3650b2f2702.mp4

    Happens regulary to me. Switching mailboxes, setting filters, scrolling and I sometime gets this.

    bug Critical 
    opened by chibenwa 23
  • Attach files in iOS app, but can not open attachments in web-mail app

    Attach files in iOS app, but can not open attachments in web-mail app

    Desc:

    Attach files in iOS app, but can not open the attachments in web-mail app

    Reproduce:

    • open the app in iOS
    • compose a mail
    • attach some images
    • send to some userB
    • userB uses web-mail to open the received email
    • download attachments
    • Can not open

    Context:

    • Chrome
    • v0.2.1 in both platforms
    bug 0 Major 
    opened by hoangdat 21
  • Compose functionality is not working on web and iOS

    Compose functionality is not working on web and iOS

    Description

    The compose functionality does not seem to be working on both web and iOS clients. I tried on a Mac using Chrome, Firefox and Safari and then on an iPhone. This happens with the latest Docker image as of August 26th, 2022.

    There are a number of issues:

    • The Send button does nothing on both platforms. No errors are reported to the console.
    • The Rich text editor is broken and does not allow any text input, it looks like a file is missing:

    DevTools failed to load source map: Could not load content for https://jmap.example.org/assets/packages/html_editor_enhanced/assets/summernote-lite.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE

    • The recipient lists expects either a space or a comma to accept a recipient. If I enter a valid email address and do not press space, I get an error indicating that I need to specify at least one recipient.

    Reproduction Steps

    Try sending an email from a Mac or iOS using the latest Docker image.

    Context

    • Mac (Chrome, Firefox and Safari).
    • iPhone iOS
    bug 0 Critical 
    opened by mdecimus 20
  • [Story] As an user, I want to read the email content

    [Story] As an user, I want to read the email content

    Summary

    Related EPIC

    Definition

    • Given that i am a Tmail user and i already had an account (John Doe)
    • Given that i log-in successfully to the Tmail app
    • I can see the default view is Inbox mail list
    • I touch in one email on the mail list, the screen email content will be opened.
    • Email content screen includes 3 main parts: Header fields, the message body and attachments (if any)

    UC1 Read Header fields

    • Subject: Display full subject of the email
    • From : Email address of the message author: name - email
    • To: Email address lists of recipients. The first 3 emails will be displayed. The remaining number of email is shown as (+n).
    • Date: the date -time that i received this email
    • There is an arrow icon at the end of field "To" that when i click on, a collapsible section will be shown including fields:
      • The full list of email address of field "To". The format of email address is: Name . In case there is no name, it will show only email. The email address in the list will have tag "me" if it is my own email address.
      • Cc/BCC: The list of email addresses which are filled by the author when he composed this message. This is optional field.
      • When i touch a name in the list of To/CC/BCC, the full email address will be shown
    • For the mailbox "Sent": The header is as same as above except that the Bcc list of email addresses will be displayed if i input in this field when composing the email.

    UC2. Read Email body

    • I can read all content in plain-text if the email is sent in plain-text mode
    • If the email is composed with html options, i can see the email content with the correct formats: Font, FontSize, Bold, Italic, Underline, strikethrough, Text color,Bullets, Numbering, Text Background Color, Align text(Left, Center, Right), Line height, indent
    • If there is a table in email content, i also see that table on my email
    • If i there is an image included inline in the email body, i can see that image displayed in correct position. If the image format is not supported, there will be a place-holder image
    • If there is a link in the email body, when i click on that link, i am navigated to the device browser to open that link.
    • If the signature is included, i can see it at the last of the email body.

    UC3. Attached file

    • If there are attached files in the email, in the threadview, i can see the icon attachment on that email
    • I open that email and I can see the list of these attachments under the email body
    • Each attached file will contain information: File name, file size, file icon
    • If the attachment list is very long, i can scroll to the last item.

    Back to Summary

    UI Design

    Mockups

    Final design

    image image image

    Back to Summary

    Technical issues

    Back to Summary

    Misc

    Back to Summary

    opened by hoangdat 20
  • Implement Advanced Search for email

    Implement Advanced Search for email

    Story:

    #478

    Design:

    https://www.figma.com/file/rRVxJpCu1G22D0jqyvK7I9/TeamMail?node-id=2632%3A159883

    image

    Desc:

    • Interactor: SearchEmailInteractor
    • Repository: ThreadRepository

    DoD:

    • Can filter the emails which matched the criterias
    • UI as design: mobile/tablet/browser
    0 onboarding 
    opened by hoangdat 19
  • [Story] As a Tmail user, I want to use auto complete feature when compose/reply/forward an email

    [Story] As a Tmail user, I want to use auto complete feature when compose/reply/forward an email

    Summary

    Related EPIC

    • TODO: {link}

    Definition

    UC1. Automatically save new contact when sending email

    • Given that I am a Tmail user
    • I have logged-in successfully to Tmail mobile/tablet/web
    • I sent an email to an email address that I have not sent before
    • Then the email address will be saved automatically as my personal contact so that it can be used for auto-completion.

    UC2. As a user, I can see auto-completion from personal contacts when compose/reply/forward an email

    • Given that I am a Tmail user
    • I have logged-in successfully to Tmail mobile/tablet/web
    • When I click button create a new email or reply or forward an email, a new composer is opened.
    • On the field From, when I start typing some characters, the system will search from server with inputted text, then display a suggestion list of contacts that matched
    • I can select one contact from the list, the contact will be displayed as a recipient
    • The inputted text will be search in First name/Last name and email address of my personal contacts

    UC3. As a user, I can see auto-completion from device contact when compose/reply/forward email from mobile/Tablet

    • Given that I am a Tmail user
    • I have logged-in successfully to Tmail mobile/tablet/web
    • Given that I granted permission for Tmail to access device contacts
    • When I click button create a new email or reply or forward an email, a new composer is opened.
    • On the field From, when I start typing some characters, the system will search the keyword and suggest recipients from 2 sources : ◦ From my personal contacts from Tmail server. ◦ From the device contact: The suggested recipients are contacts that have name/email containing inputted keyword.
    • If a contact contains more than 1 email, all the emails are shown with a Name, and I can choose an email to share document.

    Back to Summary

    Screenshots

    None

    Back to Summary

    Misc

    None

    Back to Summary

    opened by dieptran88 17
  • [Story] Cache email

    [Story] Cache email

    Summary

    Related EPIC

    • TODO: {link}

    Definition

    Given I am a user of Tmail, I logged in the app before
    Then I open the application to check the email but no network connection
    I want to read last emails I received in the app
    
    Given I am a user of Tmail, I logged in the app before
    Then I want to refresh the mailbox to get all the changes of this mailbox
    I pull to refresh, mailbox is update with latest change
    Data in the cache should be synchronize 
    
    Given I am a user of Tmail, I logged in the app before
    Then I want to access the email as fast as possible
    Application use caching to improve that but I don't want the data of Tmail grow too much and impact to the storage size of mobile device
    

    Back to Summary

    Screenshots

    None

    Back to Summary

    Misc

    None

    Back to Summary

    opened by hoangdat 16
  • The future of authentication !

    The future of authentication !

    Interoperability

    TMail do support Basic authentication.

    This enables TMail to work with ANY JMAP server.

    TMail backend offers better option

    GIVEN the user never used the app
    THEN the user is prompted for the URL / login / password
    

    The first call is done with basic authentication to get the session (credential are so far kept in memory on the device side)

    If the session contains the com:linagora:params:long:lived:token then the client does a second call (authenticated with basic auth):

    [ "LongLiveToken/set",
       { "create": {
          "accountId":"erivgeruferf",
           "clientId": "My android device"
           }
        }, "#0"
    ]`
    

    Will return :

    [ "LongLiveToken/set",
       { "created": {
           "id": "whatever",
           "token": "xxxyyyzzz"
           }
        }, "#0"
    ]
    

    TMail mobile then stores this long lived token. Given that token, TMail will not need user input upon connection.

    This long lived token can be used to generate short lived JWT token that can be used for auth.

    Example:

    GET /token?type=shortLived&deviceId=xxxx
    
    Authorization: bearer xxxyyyzzz
    (note: here only the long lived token and basic auth can be used as a bearer )
    (note: basic auth support enpowers secure web access, as in a browser storing long lived tokens is a bad practice...
        allowing basic auth here would allow web clients to create short lived tokens straight after the auth form
        of course, the use of basic auth here is of no use to the mobile team... When using basic auth, device id is ignored 
        and can be missing)
    

    Will return:

    { 
       "token": "aaaaabbbbccccc",
       "expiresOn": "2020-08-17T11:39:40.906+07:00"
    }
    

    (if the device id matches, fails otherwise) - (also please note that this token will need to be frequently renewed ;-) frequent renewal enforce security.)

    And follow up requests can be done with:

    Authorization: Bearer aaaaabbbbccccc
    (note: here long lived token usage is REJECTED)
    

    Note that one:

    • Might list long lived token
    • Value of a long lived token is return by created, and not accessible to JMAP clients after. This ensures one do not use the
    • Long lived tokens can be deleted to revoke access of a given device

    Eg:

    [ "LongLiveToken/get",
       { 
          "accountId":"erivgeruferf"
        }, "#0"
    ]`
    

    Will return :

    
    [ "LongLiveToken/get",
       {
          "accountId":"erivgeruferf"
          "list": [
           {
           "id": "1",
           "clientId": "My android device"
           },
           {
           "id": "2",
           "clientId": "My IOS device"
           }
        }, "#0"
    ]`
    

    To revoke access to my IOS device:

    [ "LongLiveToken/set",
       { 
          "accountId":"erivgeruferf",
          "destroy": ["2"]
        }, "#0"
    ]`
    

    And again, if the account do not support this extension, we NEED to support basic authentication.

    Work to do

    • [ ] Implement the long lived token flow (backend and frontend) upon login
    • [ ] Ensure we are interoperable with non-tmail servers. DOD: I can use FastMail with the TMail application.
    • [ ] If com:linagora:long:lived:token then I have an Devices section that displays the long lived tokens and allow revoking the access.
    opened by chibenwa 16
  • [Read mail] Select mail to mark as read from outlook, check mail from Tmail is still marked as unread

    [Read mail] Select mail to mark as read from outlook, check mail from Tmail is still marked as unread

    Current behaviour: I selected unread mails from Outlook to mark them as read. Then I got back to Tmail to view those mails, they were still under status of unread.

    Expected: The status of mail has to be the same from every mail clients.

    bug Critical 
    opened by haftus98 15
  • [IDENTITY] Position of Identity in reply/forward

    [IDENTITY] Position of Identity in reply/forward

    Description

    Signature is added at the bottom.

    Expected result

    Signature should be appended at the top, just below the input, just before the quoted message.

    Current behavior

    https://user-images.githubusercontent.com/6928740/210315332-9cc031a9-8845-4f04-9150-04c4481bf69e.mp4

    Acceptance criteria

    On reply, forward, signature is added just after the input.

    Context

    v0.5.2, Firefox 108.0, tmail.linagpra.com

    Medium UX 
    opened by chibenwa 0
  • [IDENTITY] Can't edit HTML template

    [IDENTITY] Can't edit HTML template

    Description

    On v0.5.2 I cannot edit the HTML version of a signature.

    Current behavior

    Only plan text editor. Clicking HTML template does nothing.

    -> BUG can't edit HTML, clicking the button does nothing -> UX plain text + HTML is confusing

    https://user-images.githubusercontent.com/6928740/210314961-85a0c291-385b-44ac-9d86-ac1d13676895.mp4

    Expected result

    Able to edit the HTML version of the signature, with HTML composer. Remove "plain text support" as this is confusing for users.

    Acceptance criteria

    -> REMOVE Identity plain text -> Use HTML conposer for identity message

    Context

    Firefox 108.0

    v0.5.2

    tmail.linagora.com

    bug Major UX 
    opened by chibenwa 0
  • [BUG] [FCM] Unsupported operation: Platform._operatingSystem

    [BUG] [FCM] Unsupported operation: Platform._operatingSystem

    Description

    FCM was configured but fails to launch on tmail.linagora.com because of a failure to determine the underlying plateform.

    Tested on both Chromium (108.0.5359.124 snap) and Firefox (108.0)

    Expected result

    FCM should be correctly initialized

    Current behavior

    Chromium:

     MailboxDashBoardController::_getAppVersion(): 0.5.2
     [ERROR] Unsupported operation: Platform._operatingSystem
        at Object.wrapException (https://tmail.linagora.com/main.dart.js:8770:17)
        at Object._Platform__operatingSystem (https://tmail.linagora.com/main.dart.js:17385:15)
        at Object._Platform_operatingSystem (https://tmail.linagora.com/main.dart.js:17442:16)
        at https://tmail.linagora.com/main.dart.js:319297:90
        at holder.<computed> [as $get$Platform__operatingSystem] (https://tmail.linagora.com/main.dart.js:129:21)
        at https://tmail.linagora.com/main.dart.js:319311:9
        at holder.<computed> [as $get$Platform_isAndroid] (https://tmail.linagora.com/main.dart.js:129:21)
        at https://tmail.linagora.com/main.dart.js:294235:31
        at _wrapJsFunctionForAsync_closure.$protected (https://tmail.linagora.com/main.dart.js:11541:15)
        at _wrapJsFunctionForAsync_closure.call$2 (https://tmail.linagora.com/main.dart.js:103097:12)
    main.dart.js:73072 FcmReceiver::onFcmToken():exception: FirebaseError: Installations: Missing App configuration value: "projectId" (installations/missing-app-config-values).
    main.dart.js:73072 [ERROR] Instance of 'NotLoadedFCMTokenException'
        at Object.wrapException (https://tmail.linagora.com/main.dart.js:8770:17)
        at https://tmail.linagora.com/main.dart.js:294507:23
        at _wrapJsFunctionForAsync_closure.$protected (https://tmail.linagora.com/main.dart.js:11541:15)
        at _wrapJsFunctionForAsync_closure.call$2 (https://tmail.linagora.com/main.dart.js:103097:12)
        at _awaitOnObject_closure0.call$2 (https://tmail.linagora.com/main.dart.js:103091:25)
        at Object._rootRunBinary (https://tmail.linagora.com/main.dart.js:12173:18)
        at StaticClosure.<anonymous> (https://tmail.linagora.com/main.dart.js:307821:16)
        at _CustomZone.runBinary$3$3 (https://tmail.linagora.com/main.dart.js:105605:39)
        at _FutureListener.handleError$1 (https://tmail.linagora.com/main.dart.js:103795:21)
        at _Future__propagateToListeners_handleError.call$0 (https://tmail.linagora.com/main.dart.js:104118:49)
    

    Firefox:

    [ERROR] BaseController::injectFCMBindings(): exception: Instance of 'NotSupportFCMException'
     [ERROR] wrapException@https://tmail.linagora.com/main.dart.js:8770:17
    _Platform__operatingSystem@https://tmail.linagora.com/main.dart.js:17385:15
    _Platform_operatingSystem@https://tmail.linagora.com/main.dart.js:17442:16
    @https://tmail.linagora.com/main.dart.js:319297:90
    lazyFinal/holder[getterName]@https://tmail.linagora.com/main.dart.js:129:21
    @https://tmail.linagora.com/main.dart.js:319311:9
    lazyFinal/holder[getterName]@https://tmail.linagora.com/main.dart.js:129:21
    _checkLocalNotificationPermission$0/$async$_checkLocalNotificationPermission$0<@https://tmail.linagora.com/main.dart.js:294235:31
    _wrapJsFunctionForAsync/$protected</<@https://tmail.linagora.com/main.dart.js:11541:17
    call$2@https://tmail.linagora.com/main.dart.js:103097:12
    _asyncStartSync@https://tmail.linagora.com/main.dart.js:11505:20
    _checkLocalNotificationPermission$0@https://tmail.linagora.com/main.dart.js:294271:16
    setUp$0/$async$setUp$0<@https://tmail.linagora.com/main.dart.js:294129:27
    _wrapJsFunctionForAsync/$protected</<@https://tmail.linagora.com/main.dart.js:11541:17
    call$2@https://tmail.linagora.com/main.dart.js:103097:12
    call$1@https://tmail.linagora.com/main.dart.js:103085:32
    _rootRunUnary@https://tmail.linagora.com/main.dart.js:12159:18
    @https://tmail.linagora.com/main.dart.js:307818:16
    runUnary$2$2@https://tmail.linagora.com/main.dart.js:105600:39
    call$0@https://tmail.linagora.com/main.dart.js:104100:51
    _Future__propagateToListeners@https://tmail.linagora.com/main.dart.js:11855:93
    _completeWithValue$1@https://tmail.linagora.com/main.dart.js:103959:9
    complete$1@https://tmail.linagora.com/main.dart.js:103072:14
    _asyncReturn@https://tmail.linagora.com/main.dart.js:11513:17
    _initLocalNotification$0/$async$_initLocalNotification$0<@https://tmail.linagora.com/main.dart.js:294209:24
    _wrapJsFunctionForAsync/$protected</<@https://tmail.linagora.com/main.dart.js:11541:17
    call$2@https://tmail.linagora.com/main.dart.js:103097:12
    call$1@https://tmail.linagora.com/main.dart.js:103085:32
    _rootRunUnary@https://tmail.linagora.com/main.dart.js:12159:18
    @https://tmail.linagora.com/main.dart.js:307818:16
    runUnary$2$2@https://tmail.linagora.com/main.dart.js:105600:39
    call$0@https://tmail.linagora.com/main.dart.js:104100:51
    _Future__propagateToListeners@https://tmail.linagora.com/main.dart.js:11855:93
    _completeWithValue$1@https://tmail.linagora.com/main.dart.js:103959:9
    call$0@https://tmail.linagora.com/main.dart.js:104036:18
    _rootRun@https://tmail.linagora.com/main.dart.js:12149:16
    @https://tmail.linagora.com/main.dart.js:307815:16
    run$1$1@https://tmail.linagora.com/main.dart.js:105595:39
    runGuarded$1@https://tmail.linagora.com/main.dart.js:105531:14
    call$0@https://tmail.linagora.com/main.dart.js:105716:25
    _microtaskLoop@https://tmail.linagora.com/main.dart.js:11916:24
    _startMicrotaskLoop@https://tmail.linagora.com/main.dart.js:11922:11
    call$1@https://tmail.linagora.com/main.dart.js:102980:9
    invokeClosure@https://tmail.linagora.com/main.dart.js:8973:26
    convertDartClosureToJS/$function</<@https://tmail.linagora.com/main.dart.js:8992:18
    FrameRequestCallback*_requestAnimationFrame$1@https://tmail.linagora.com/main.dart.js:113742:23
    requestAnimationFrame$1@https://tmail.linagora.com/main.dart.js:113739:19
    call$0@https://tmail.linagora.com/main.dart.js:90361:26
    scheduleFrame$0@https://tmail.linagora.com/main.dart.js:91462:10
    scheduleFrame$0@https://tmail.linagora.com/main.dart.js:174150:51
    scheduleFrameCallback$2$rescheduling@https://tmail.linagora.com/main.dart.js:174090:13
    _ticker$_tick$1@https://tmail.linagora.com/main.dart.js:174419:59
    Closure_cspForwardCall/</<@https://tmail.linagora.com/main.dart.js:9083:45
    _invokeFrameCallback$3@https://tmail.linagora.com/main.dart.js:174266:18
    call$2@https://tmail.linagora.com/main.dart.js:174344:12
    forEach$1@https://tmail.linagora.com/main.dart.js:102303:16
    forEach$1$ax@https://tmail.linagora.com/main.dart.js:76995:44
    handleBeginFrame$1@https://tmail.linagora.com/main.dart.js:174217:11
    _handleBeginFrame$1@https://tmail.linagora.com/main.dart.js:174187:12
    Closure_cspForwardCall/</<@https://tmail.linagora.com/main.dart.js:9083:45
    invoke1@https://tmail.linagora.com/main.dart.js:3193:18
    call$1@https://tmail.linagora.com/main.dart.js:90377:11
    _rootRunUnary@https://tmail.linagora.com/main.dart.js:12163:16
    @https://tmail.linagora.com/main.dart.js:307818:16
    runUnary$2$2@https://tmail.linagora.com/main.dart.js:105600:39
    runUnaryGuarded$1$2@https://tmail.linagora.com/main.dart.js:105541:14
    call$1@https://tmail.linagora.com/main.dart.js:105722:25
    invokeClosure@https://tmail.linagora.com/main.dart.js:8973:26
    convertDartClosureToJS/$function</<@https://tmail.linagora.com/main.dart.js:8992:18
    FrameRequestCallback*_requestAnimationFrame$1@https://tmail.linagora.com/main.dart.js:113742:23
    requestAnimationFrame$1@https://tmail.linagora.com/main.dart.js:113739:19
    call$0@https://tmail.linagora.com/main.dart.js:90361:26
    scheduleFrame$0@https://tmail.linagora.com/main.dart.js:91462:10
    scheduleFrame$0@https://tmail.linagora.com/main.dart.js:174150:51
    scheduleFrameCallback$2$rescheduling@https://tmail.linagora.com/main.dart.js:174090:13
    _ticker$_tick$1@https://tmail.linagora.com/main.dart.js:174419:59
    Closure_cspForwardCall/</<@https://tmail.linagora.com/main.dart.js:9083:45
    _invokeFrameCallback$3@https://tmail.linagora.com/main.dart.js:174266:18
    call$2@https://tmail.linagora.com/main.dart.js:174344:12
    forEach$1@https://tmail.linagora.com/main.dart.js:102303:16
    forEach$1$ax@https://tmail.linagora.com/main.dart.js:76995:44
    handleBeginFrame$1@https://tmail.linagora.com/main.dart.js:174217:11
    _handleBeginFrame$1@https://tmail.linagora.com/main.dart.js:174187:12
    Closure_cspForwardCall/</<@https://tmail.linagora.com/main.dart.js:9083:45
    invoke1@https://tmail.linagora.com/main.dart.js:3193:18
    call$1@https://tmail.linagora.com/main.dart.js:90377:11
    _rootRunUnary@https://tmail.linagora.com/main.dart.js:12163:16
    @https://tmail.linagora.com/main.dart.js:307818:16
    runUnary$2$2@https://tmail.linagora.com/main.dart.js:105600:39
    runUnaryGuarded$1$2@https://tmail.linagora.com/main.dart.js:105541:14
    call$1@https://tmail.linagora.com/main.dart.js:105722:25
    invokeClosure@https://tmail.linagora.com/main.dart.js:8973:26
    convertDartClosureToJS/$function</<@https://tmail.linagora.com/main.dart.js:8992:18
    FrameRequestCallback*_requestAnimationFrame$1@https://tmail.linagora.com/main.dart.js:113742:23
    requestAnimationFrame$1@https://tmail.linagora.com/main.dart.js:113739:19
    call$0@https://tmail.linagora.com/main.dart.js:90361:26
    scheduleFrame$0@https://tmail.linagora.com/main.dart.js:91462:10
    scheduleFrame$0@https://tmail.linagora.com/main.dart.js:174150:51
    scheduleFrameCallback$2$rescheduling@https://tmail.linagora.com/main.dart.js:174090:13
    

    Reproduction Steps

    Run 0.5.2 on web with FCM configured.

    Acceptance criteria

    FCM correctly initializes for WEB

    Context

    Tested on both Chromium (108.0.5359.124 snap) and Firefox (108.0)

    bug Major 
    opened by chibenwa 2
  • [Login] Login leads to random mail

    [Login] Login leads to random mail

    Description Login using oidc leads to random mail

    Video

    https://user-images.githubusercontent.com/97084773/210032615-da5daacf-ad34-424e-ad3d-09036c281194.mp4

    Environment Prepod, v0.5.1, xiaomi note9

    bug Major 
    opened by haftus98 3
Owner
LINAGORA
💻 🌎 Our mission is to invent and develop ethical and open-source Good Tech - Join Us! ✌️
LINAGORA
Order your favorite burger using this application.

Burger App ?? ?? A Flutter project that can be handy for burger joints. It allows customer to view available burger options and place order Inspired B

Sobhakhar Poudel 14 Nov 17, 2022
A weather application that show the current weather for your location and forecast for 6 days, and favorite city and other locations

Weather Application App concept created with Flutter using Dart programming language ad it's a demanded task in my internship at Algoriza About An app

Mohamed Mohamedy 4 Nov 13, 2022
A digital BookShelf for your reading progress.

BookSearch a flutter medium series What is this? An open source app which revolves all around books: “Collecting books as you read them, virtually”. I

Norbert Kozsir 512 Dec 29, 2022
Automates CP 2077's "Breach Protocol" hacking minigame

Cyberpwned Cyberpunk 2077 Hacking Minigame Resolver - Play Store: https://play.google.com/store/apps/details?id=com.nicolassiplis.cyberpwned Requireme

Nicolás Siplis 141 Dec 22, 2022
WalletConnect is an open source protocol for connecting decentralised applications to mobile wallets with QR code scanning or deep linking.

WalletConnect is an open source protocol for connecting decentralised applications to mobile wallets with QR code scanning or deep linking. A user can

Tomas Verhelst 87 Dec 28, 2022
A simple app to keep track the time you Learn, Playing, Reading, ... in every week. This is also my attempt to teach myself Flutter & Dart

Progressor 0.0.1 Sometime you want to set a target for you weekly, for example: "Reading Book for 8 hours every week". This app helps you to do that.

Son Nguyen Hoang 4 Oct 12, 2022
Noor is a mobile app designed to help in providing a comfortable reading experience for Muslims, by referencing the book "Hisnul Muslim", and some other references.

Noor App | تطبيق نُور Overview Noor is an islamic mobile app, consists of four main pages: home, favorite, alsabha, and settings. The data is structur

Mais Alheraki 78 Dec 22, 2022
An app to help you to add frame to your favorite screenshots from Nintendo Switch.

SwitchDecor An app to help you adding frame to your favorite screenshots from Nintendo Switch. This project is written in Flutter, supporting both iOS

JuniperPhoton 40 Aug 7, 2022
Android app that converts an URL to markdown, and lets you share it to your favorite notes app.

markdownr Android app that converts an URL to markdown, and lets you share it to your favorite notes app. I've written this app to save articles I fou

Andrea Ghensi 41 Dec 10, 2022
Flutter ShopApp, you can see products and their prices, categories and their products, search for a product, add to favorite, add to cart, sign in and sign up.

shop_app_2 A new Flutter application. Getting Started This project is a starting point for a Flutter application. A few resources to get you started i

Muhammed Rezk Rajab 10 Aug 7, 2022
Restaurant With Api and favorite

res A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this is y

Abdul Azis Al Ayubbi 1 Nov 22, 2021
Your grades across all your devices.

Gradely 2 A Grade Calculator App, that syncs all your Grades across all your devices, built with Flutter and with the amazing backend Appwrite. Screen

Elias Schneider 16 Dec 8, 2022
Easily scan your documents on the go with Paper. Scan those documents at ease with real-time document detection, multi paged pdfs, optimized and cleaner clicks from an easy to navigate UX

Easily scan your documents on the go with Paper. Scan those documents at ease with real-time document detection, multi paged pdfs, optimized and cleaner clicks from an easy to navigate UX

Harsh Joshi 38 Dec 16, 2022
Easy to use open source Hub 🕸️ to control your smart devices from one app.

CyBear Jinni Hub Welcome! This repository is in charge of controlling smart devices and is part of the CyBear Jinni Smart Home system. The software is

CyBear Jinni 26 Nov 23, 2022
Easy to use open source Hub 🕸️ to control your smart devices from one app.

CyBear Jinni Hub Welcome! This repository is in charge of controlling smart devices and is part of the CyBear Jinni Smart Home system. The software is

CyBear Jinni 13 Jul 22, 2021
Transform your smart devices to intelligent communicators.

Donna According to a survey of 601 people, 57.9 % of participants experienced communication difficulties, with 23.5 % reporting severe difficulties. O

Betaoverflow 9 Dec 19, 2022
Multi-platform project built with Flutter and Golang that will help you save what is most important - time.

Articles Time Saver. Save what's most valuable - Time Contribute · Discord · Documentation What is ArTiver? It is an idea that came to my mind, when I

Wiktor Zając 21 Dec 27, 2022
A M.U.D (multi user dungeon) with a back end API built with nestjs and a front end UI built with Flutter.

Nest M.U.D - Getting Started Getting Started How to Play API Design A M.U.D (multi user dungeon) with a back end API built with nestjs and a front end

Ben 4 Aug 3, 2022
🐧 Multi-purpose Booking APP

?? Multi-purpose Booking APP

Vong Nyuk Soon 8 Nov 8, 2022