GODT-1543: Using one buffered event for off and on connection

This commit is contained in:
Jakub
2022-05-17 11:59:14 +02:00
parent 16f9dc43cb
commit 5033e9718c
7 changed files with 30 additions and 22 deletions

View File

@ -192,8 +192,8 @@ func New( // nolint[funlen]
sentryReporter.SetClientFromManager(cm) sentryReporter.SetClientFromManager(cm)
cm.AddConnectionObserver(pmapi.NewConnectionObserver( cm.AddConnectionObserver(pmapi.NewConnectionObserver(
func() { listener.Emit(events.InternetOffEvent, "") }, func() { listener.Emit(events.InternetConnChangedEvent, events.InternetOff) },
func() { listener.Emit(events.InternetOnEvent, "") }, func() { listener.Emit(events.InternetConnChangedEvent, events.InternetOn) },
)) ))
jar, err := cookies.NewCookieJar(settingsObj) jar, err := cookies.NewCookieJar(settingsObj)

View File

@ -34,8 +34,9 @@ const (
AddressChangedLogoutEvent = "addressChangedLogout" AddressChangedLogoutEvent = "addressChangedLogout"
UserRefreshEvent = "userRefresh" UserRefreshEvent = "userRefresh"
RestartBridgeEvent = "restartBridge" RestartBridgeEvent = "restartBridge"
InternetOffEvent = "internetOff" InternetConnChangedEvent = "internetChanged"
InternetOnEvent = "internetOn" InternetOff = "internetOff"
InternetOn = "internetOn"
SecondInstanceEvent = "secondInstance" SecondInstanceEvent = "secondInstance"
OutgoingNoEncEvent = "outgoingNoEncryption" OutgoingNoEncEvent = "outgoingNoEncryption"
NoActiveKeyForRecipientEvent = "noActiveKeyForRecipient" NoActiveKeyForRecipientEvent = "noActiveKeyForRecipient"
@ -52,7 +53,7 @@ func SetupEvents(listener listener.Listener) {
listener.SetLimit(LogoutEvent, LogoutEventTimeout) listener.SetLimit(LogoutEvent, LogoutEventTimeout)
listener.SetBuffer(ErrorEvent) listener.SetBuffer(ErrorEvent)
listener.SetBuffer(CredentialsErrorEvent) listener.SetBuffer(CredentialsErrorEvent)
listener.SetBuffer(InternetOffEvent) listener.SetBuffer(InternetConnChangedEvent)
listener.SetBuffer(UpgradeApplicationEvent) listener.SetBuffer(UpgradeApplicationEvent)
listener.SetBuffer(TLSCertIssue) listener.SetBuffer(TLSCertIssue)
listener.SetBuffer(UserRefreshEvent) listener.SetBuffer(UserRefreshEvent)

View File

@ -244,8 +244,7 @@ func New( //nolint[funlen]
func (f *frontendCLI) watchEvents() { func (f *frontendCLI) watchEvents() {
errorCh := f.eventListener.ProvideChannel(events.ErrorEvent) errorCh := f.eventListener.ProvideChannel(events.ErrorEvent)
credentialsErrorCh := f.eventListener.ProvideChannel(events.CredentialsErrorEvent) credentialsErrorCh := f.eventListener.ProvideChannel(events.CredentialsErrorEvent)
internetOffCh := f.eventListener.ProvideChannel(events.InternetOffEvent) internetConnChangedCh := f.eventListener.ProvideChannel(events.InternetConnChangedEvent)
internetOnCh := f.eventListener.ProvideChannel(events.InternetOnEvent)
addressChangedCh := f.eventListener.ProvideChannel(events.AddressChangedEvent) addressChangedCh := f.eventListener.ProvideChannel(events.AddressChangedEvent)
addressChangedLogoutCh := f.eventListener.ProvideChannel(events.AddressChangedLogoutEvent) addressChangedLogoutCh := f.eventListener.ProvideChannel(events.AddressChangedLogoutEvent)
logoutCh := f.eventListener.ProvideChannel(events.LogoutEvent) logoutCh := f.eventListener.ProvideChannel(events.LogoutEvent)
@ -256,10 +255,13 @@ func (f *frontendCLI) watchEvents() {
f.Println("Bridge failed:", errorDetails) f.Println("Bridge failed:", errorDetails)
case <-credentialsErrorCh: case <-credentialsErrorCh:
f.notifyCredentialsError() f.notifyCredentialsError()
case <-internetOffCh: case stat := <-internetConnChangedCh:
f.notifyInternetOff() if stat == events.InternetOff {
case <-internetOnCh: f.notifyInternetOff()
f.notifyInternetOn() }
if stat == events.InternetOn {
f.notifyInternetOn()
}
case address := <-addressChangedCh: case address := <-addressChangedCh:
f.Printf("Address changed for %s. You may need to reconfigure your email client.", address) f.Printf("Address changed for %s. You may need to reconfigure your email client.", address)
case address := <-addressChangedLogoutCh: case address := <-addressChangedLogoutCh:

View File

@ -40,8 +40,7 @@ func (f *FrontendQt) watchEvents() {
errorCh := f.eventListener.ProvideChannel(events.ErrorEvent) errorCh := f.eventListener.ProvideChannel(events.ErrorEvent)
credentialsErrorCh := f.eventListener.ProvideChannel(events.CredentialsErrorEvent) credentialsErrorCh := f.eventListener.ProvideChannel(events.CredentialsErrorEvent)
noActiveKeyForRecipientCh := f.eventListener.ProvideChannel(events.NoActiveKeyForRecipientEvent) noActiveKeyForRecipientCh := f.eventListener.ProvideChannel(events.NoActiveKeyForRecipientEvent)
internetOffCh := f.eventListener.ProvideChannel(events.InternetOffEvent) internetConnChangedCh := f.eventListener.ProvideChannel(events.InternetConnChangedEvent)
internetOnCh := f.eventListener.ProvideChannel(events.InternetOnEvent)
secondInstanceCh := f.eventListener.ProvideChannel(events.SecondInstanceEvent) secondInstanceCh := f.eventListener.ProvideChannel(events.SecondInstanceEvent)
restartBridgeCh := f.eventListener.ProvideChannel(events.RestartBridgeEvent) restartBridgeCh := f.eventListener.ProvideChannel(events.RestartBridgeEvent)
addressChangedCh := f.eventListener.ProvideChannel(events.AddressChangedEvent) addressChangedCh := f.eventListener.ProvideChannel(events.AddressChangedEvent)
@ -73,10 +72,13 @@ func (f *FrontendQt) watchEvents() {
f.qml.NotifyHasNoKeychain() f.qml.NotifyHasNoKeychain()
case email := <-noActiveKeyForRecipientCh: case email := <-noActiveKeyForRecipientCh:
f.qml.NoActiveKeyForRecipient(email) f.qml.NoActiveKeyForRecipient(email)
case <-internetOffCh: case stat := <-internetConnChangedCh:
f.qml.InternetOff() if stat == events.InternetOff {
case <-internetOnCh: f.qml.InternetOff()
f.qml.InternetOn() }
if stat == events.InternetOn {
f.qml.InternetOn()
}
case <-secondInstanceCh: case <-secondInstanceCh:
f.qml.ShowMainWindow() f.qml.ShowMainWindow()
case <-restartBridgeCh: case <-restartBridgeCh:

View File

@ -102,14 +102,17 @@ func New(
func (u *Users) watchEvents() { func (u *Users) watchEvents() {
upgradeCh := u.events.ProvideChannel(events.UpgradeApplicationEvent) upgradeCh := u.events.ProvideChannel(events.UpgradeApplicationEvent)
internetOnCh := u.events.ProvideChannel(events.InternetOnEvent) internetConnChangedCh := u.events.ProvideChannel(events.InternetConnChangedEvent)
for { for {
select { select {
case <-upgradeCh: case <-upgradeCh:
isApplicationOutdated = true isApplicationOutdated = true
u.closeAllConnections() u.closeAllConnections()
case <-internetOnCh: case stat := <-internetConnChangedCh:
if stat != events.InternetOn {
continue
}
for _, user := range u.users { for _, user := range u.users {
if user.store == nil { if user.store == nil {
if err := user.loadStore(); err != nil { if err := user.loadStore(); err != nil {

View File

@ -244,7 +244,7 @@ func testNewUsersWithUsers(t *testing.T, m mocks) *Users {
func testNewUsers(t *testing.T, m mocks) *Users { //nolint[unparam] func testNewUsers(t *testing.T, m mocks) *Users { //nolint[unparam]
m.eventListener.EXPECT().ProvideChannel(events.UpgradeApplicationEvent) m.eventListener.EXPECT().ProvideChannel(events.UpgradeApplicationEvent)
m.eventListener.EXPECT().ProvideChannel(events.InternetOnEvent) m.eventListener.EXPECT().ProvideChannel(events.InternetConnChangedEvent)
users := New(m.locator, m.PanicHandler, m.eventListener, m.clientManager, m.credentialsStore, m.storeMaker) users := New(m.locator, m.PanicHandler, m.eventListener, m.clientManager, m.credentialsStore, m.storeMaker)

View File

@ -68,7 +68,7 @@ func newPMAPIController(listener listener.Listener) (PMAPIController, pmapi.Mana
func addConnectionObserver(cm pmapi.Manager, listener listener.Listener) { func addConnectionObserver(cm pmapi.Manager, listener listener.Listener) {
cm.AddConnectionObserver(pmapi.NewConnectionObserver( cm.AddConnectionObserver(pmapi.NewConnectionObserver(
func() { listener.Emit(events.InternetOffEvent, "") }, func() { listener.Emit(events.InternetConnChangedEvent, events.InternetOff) },
func() { listener.Emit(events.InternetOnEvent, "") }, func() { listener.Emit(events.InternetConnChangedEvent, events.InternetOn) },
)) ))
} }