GODT-2042: fix setup guide not always showing on first login.

This commit is contained in:
Xavier Michelon
2022-12-02 11:17:28 +01:00
parent e87db5b2ab
commit 4003e0a2ab
20 changed files with 1039 additions and 1033 deletions

View File

@ -75,6 +75,11 @@ func (bridge *Bridge) GetUserIDs() []string {
return bridge.vault.GetUserIDs() return bridge.vault.GetUserIDs()
} }
// HasUser returns true iff the given user is known (authorized or not).
func (bridge *Bridge) HasUser(userID string) bool {
return bridge.vault.HasUser(userID)
}
// GetUserInfo returns info about the given user. // GetUserInfo returns info about the given user.
func (bridge *Bridge) GetUserInfo(userID string) (UserInfo, error) { func (bridge *Bridge) GetUserInfo(userID string) (UserInfo, error) {
return safe.RLockRetErr(func() (UserInfo, error) { return safe.RLockRetErr(func() (UserInfo, error) {

View File

@ -126,12 +126,8 @@ void QMLBackend::connectGrpcEvents()
connect(client, &GRPCClient::login2PasswordRequested, this, &QMLBackend::login2PasswordRequested); connect(client, &GRPCClient::login2PasswordRequested, this, &QMLBackend::login2PasswordRequested);
connect(client, &GRPCClient::login2PasswordError, this, &QMLBackend::login2PasswordError); connect(client, &GRPCClient::login2PasswordError, this, &QMLBackend::login2PasswordError);
connect(client, &GRPCClient::login2PasswordErrorAbort, this, &QMLBackend::login2PasswordErrorAbort); connect(client, &GRPCClient::login2PasswordErrorAbort, this, &QMLBackend::login2PasswordErrorAbort);
connect(client, &GRPCClient::loginFinished, this, [&](QString const &userID) { connect(client, &GRPCClient::loginFinished, this, &QMLBackend::onLoginFinished);
this->retrieveUserList(); connect(client, &GRPCClient::loginAlreadyLoggedIn, this, &QMLBackend::onLoginAlreadyLoggedIn);
qint32 const index = users_->rowOfUserID(userID); emit loginFinished(index); });
connect(client, &GRPCClient::loginAlreadyLoggedIn, this, [&](QString const &userID) {
this->retrieveUserList();
qint32 const index = users_->rowOfUserID(userID); emit loginAlreadyLoggedIn(index); });
// update events // update events
connect(client, &GRPCClient::updateManualError, this, &QMLBackend::updateManualError); connect(client, &GRPCClient::updateManualError, this, &QMLBackend::updateManualError);
@ -429,6 +425,28 @@ void QMLBackend::setMailServerSettings(int imapPort, int smtpPort, bool useSSLFo
} }
//****************************************************************************************************************************************************
/// \param[in] userID the userID.
/// \param[in] wasSignedOut Was the user signed-out.
//****************************************************************************************************************************************************
void QMLBackend::onLoginFinished(QString const &userID, bool wasSignedOut)
{
this->retrieveUserList();
qint32 const index = users_->rowOfUserID(userID);
emit loginFinished(index, wasSignedOut);
}
//****************************************************************************************************************************************************
/// \param[in] userID the userID.
//****************************************************************************************************************************************************
void QMLBackend::onLoginAlreadyLoggedIn(QString const &userID)
{
this->retrieveUserList();
qint32 const index = users_->rowOfUserID(userID);
emit loginAlreadyLoggedIn(index);
}
//**************************************************************************************************************************************************** //****************************************************************************************************************************************************
/// \param[in] useSSLForIMAP The value for the 'Use SSL for IMAP' property /// \param[in] useSSLForIMAP The value for the 'Use SSL for IMAP' property
/// \param[in] useSSLForSMTP The value for the 'Use SSL for SMTP' property /// \param[in] useSSLForSMTP The value for the 'Use SSL for SMTP' property

View File

@ -179,6 +179,8 @@ public slots: // slot for signals received from QML -> To be forwarded to Bridge
public slots: // slot for signals received from gRPC that need transformation instead of simple forwarding public slots: // slot for signals received from gRPC that need transformation instead of simple forwarding
void onMailServerSettingsChanged(int imapPort, int smtpPort, bool useSSLForIMAP, bool useSSLForSMTP); ///< Slot for the ConnectionModeChanged gRPC event. void onMailServerSettingsChanged(int imapPort, int smtpPort, bool useSSLForIMAP, bool useSSLForSMTP); ///< Slot for the ConnectionModeChanged gRPC event.
void onGenericError(bridgepp::ErrorInfo const& info); ///< Slot for generic errors received from the gRPC service. void onGenericError(bridgepp::ErrorInfo const& info); ///< Slot for generic errors received from the gRPC service.
void onLoginFinished(QString const &userID, bool wasSignedOut); ///< Slot for LoginFinished gRPC event.
void onLoginAlreadyLoggedIn(QString const &userID); ///< Slot for the LoginAlreadyLoggedIn gRPC event.
signals: // Signals received from the Go backend, to be forwarded to QML signals: // Signals received from the Go backend, to be forwarded to QML
void toggleAutostartFinished(); void toggleAutostartFinished();
@ -195,7 +197,7 @@ signals: // Signals received from the Go backend, to be forwarded to QML
void login2PasswordRequested(); void login2PasswordRequested();
void login2PasswordError(QString const& errorMsg); void login2PasswordError(QString const& errorMsg);
void login2PasswordErrorAbort(QString const& errorMsg); void login2PasswordErrorAbort(QString const& errorMsg);
void loginFinished(int index); void loginFinished(int index, bool wasSignedOut);
void loginAlreadyLoggedIn(int index); void loginAlreadyLoggedIn(int index);
void updateManualReady(QString const& version); void updateManualReady(QString const& version);
void updateManualRestartNeeded(); void updateManualRestartNeeded();

View File

@ -100,7 +100,6 @@ void UserList::reset(QList<SPUser> const &users)
//**************************************************************************************************************************************************** //****************************************************************************************************************************************************
void UserList::appendUser(SPUser const &user) void UserList::appendUser(SPUser const &user)
{ {
user->setSetupGuideSeen(false);
int const size = users_.size(); int const size = users_.size();
this->beginInsertRows(QModelIndex(), size, size); this->beginInsertRows(QModelIndex(), size, size);
users_.append(user); users_.append(user);

View File

@ -86,7 +86,11 @@ ApplicationWindow {
root.showAndRise() root.showAndRise()
} }
function onLoginFinished(index) { function onLoginFinished(index, wasSignedOut) {
var user = Backend.users.get(index)
if (user && !wasSignedOut) {
root.showSetup(user, user.addresses[0])
}
console.debug("Login finished", index) console.debug("Login finished", index)
} }
} }

View File

@ -239,7 +239,6 @@ SPUser randomUser()
user->setAvatarText(firstName.left(1) + lastName.left(1)); user->setAvatarText(firstName.left(1) + lastName.left(1));
user->setState(UserState::Connected); user->setState(UserState::Connected);
user->setSplitMode(false); user->setSplitMode(false);
user->setSetupGuideSeen(true);
qint64 const totalBytes = (500 + randN(2501)) * 1000000; qint64 const totalBytes = (500 + randN(2501)) * 1000000;
user->setUsedBytes(float(bridgepp::randN(totalBytes + 1)) * 1.05f); // we maybe slightly over quota user->setUsedBytes(float(bridgepp::randN(totalBytes + 1)) * 1.05f); // we maybe slightly over quota
user->setTotalBytes(float(totalBytes)); user->setTotalBytes(float(totalBytes));

View File

@ -277,12 +277,14 @@ SPStreamEvent newLoginTwoPasswordsRequestedEvent()
//**************************************************************************************************************************************************** //****************************************************************************************************************************************************
/// \param[in] userID The userID. /// \param[in] userID The userID.
/// \param[in] wasSignedOut Was the user signed-out.
/// \return The event. /// \return The event.
//**************************************************************************************************************************************************** //****************************************************************************************************************************************************
SPStreamEvent newLoginFinishedEvent(QString const &userID) SPStreamEvent newLoginFinishedEvent(QString const &userID, bool wasSignedOut)
{ {
auto event = new ::grpc::LoginFinishedEvent; auto event = new ::grpc::LoginFinishedEvent;
event->set_userid(userID.toStdString()); event->set_userid(userID.toStdString());
event->set_wassignedout(wasSignedOut);
auto loginEvent = new grpc::LoginEvent; auto loginEvent = new grpc::LoginEvent;
loginEvent->set_allocated_finished(event); loginEvent->set_allocated_finished(event);
return wrapLoginEvent(loginEvent); return wrapLoginEvent(loginEvent);

View File

@ -1204,9 +1204,12 @@ void GRPCClient::processLoginEvent(LoginEvent const &event)
emit login2PasswordRequested(); emit login2PasswordRequested();
break; break;
case LoginEvent::kFinished: case LoginEvent::kFinished:
{
this->logTrace("Login event received: Finished."); this->logTrace("Login event received: Finished.");
emit loginFinished(QString::fromStdString(event.finished().userid())); LoginFinishedEvent const &finished = event.finished();
emit loginFinished(QString::fromStdString(finished.userid()), finished.wassignedout());
break; break;
}
case LoginEvent::kAlreadyLoggedIn: case LoginEvent::kAlreadyLoggedIn:
this->logTrace("Login event received: AlreadyLoggedIn."); this->logTrace("Login event received: AlreadyLoggedIn.");
emit loginAlreadyLoggedIn(QString::fromStdString(event.finished().userid())); emit loginAlreadyLoggedIn(QString::fromStdString(event.finished().userid()));

View File

@ -149,7 +149,7 @@ signals:
void login2PasswordRequested(); void login2PasswordRequested();
void login2PasswordError(QString const &errMsg); void login2PasswordError(QString const &errMsg);
void login2PasswordErrorAbort(QString const &errMsg); void login2PasswordErrorAbort(QString const &errMsg);
void loginFinished(QString const &userID); void loginFinished(QString const &userID, bool wasSignedOut);
void loginAlreadyLoggedIn(QString const &userID); void loginAlreadyLoggedIn(QString const &userID);
public: // Update related calls public: // Update related calls

View File

@ -257,7 +257,6 @@ SPUser userFromGRPC(grpc::User const &grpcUser)
user->setAvatarText(QString::fromStdString(grpcUser.avatartext())); user->setAvatarText(QString::fromStdString(grpcUser.avatartext()));
user->setState(userStateFromGRPC(grpcUser.state())); user->setState(userStateFromGRPC(grpcUser.state()));
user->setSplitMode(grpcUser.splitmode()); user->setSplitMode(grpcUser.splitmode());
user->setSetupGuideSeen(grpcUser.setupguideseen());
user->setUsedBytes(float(grpcUser.usedbytes())); user->setUsedBytes(float(grpcUser.usedbytes()));
user->setTotalBytes(float(grpcUser.totalbytes())); user->setTotalBytes(float(grpcUser.totalbytes()));
@ -280,7 +279,6 @@ void userToGRPC(User const &user, grpc::User &outGRPCUser)
outGRPCUser.set_avatartext(user.avatarText().toStdString()); outGRPCUser.set_avatartext(user.avatarText().toStdString());
outGRPCUser.set_state(userStateToGRPC(user.state())); outGRPCUser.set_state(userStateToGRPC(user.state()));
outGRPCUser.set_splitmode(user.splitMode()); outGRPCUser.set_splitmode(user.splitMode());
outGRPCUser.set_setupguideseen(user.setupGuideSeen());
outGRPCUser.set_usedbytes(qint64(user.usedBytes())); outGRPCUser.set_usedbytes(qint64(user.usedBytes()));
outGRPCUser.set_totalbytes(qint64(user.totalBytes())); outGRPCUser.set_totalbytes(qint64(user.totalBytes()));
} }

View File

@ -119,7 +119,6 @@ PROTOBUF_CONSTEXPR User::User(
, /*decltype(_impl_.password_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} , /*decltype(_impl_.password_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
, /*decltype(_impl_.state_)*/0 , /*decltype(_impl_.state_)*/0
, /*decltype(_impl_.splitmode_)*/false , /*decltype(_impl_.splitmode_)*/false
, /*decltype(_impl_.setupguideseen_)*/false
, /*decltype(_impl_.usedbytes_)*/int64_t{0} , /*decltype(_impl_.usedbytes_)*/int64_t{0}
, /*decltype(_impl_.totalbytes_)*/int64_t{0} , /*decltype(_impl_.totalbytes_)*/int64_t{0}
, /*decltype(_impl_._cached_size_)*/{}} {} , /*decltype(_impl_._cached_size_)*/{}} {}
@ -348,6 +347,7 @@ PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORIT
PROTOBUF_CONSTEXPR LoginFinishedEvent::LoginFinishedEvent( PROTOBUF_CONSTEXPR LoginFinishedEvent::LoginFinishedEvent(
::_pbi::ConstantInitialized): _impl_{ ::_pbi::ConstantInitialized): _impl_{
/*decltype(_impl_.userid_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} /*decltype(_impl_.userid_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
, /*decltype(_impl_.wassignedout_)*/false
, /*decltype(_impl_._cached_size_)*/{}} {} , /*decltype(_impl_._cached_size_)*/{}} {}
struct LoginFinishedEventDefaultTypeInternal { struct LoginFinishedEventDefaultTypeInternal {
PROTOBUF_CONSTEXPR LoginFinishedEventDefaultTypeInternal() PROTOBUF_CONSTEXPR LoginFinishedEventDefaultTypeInternal()
@ -815,7 +815,6 @@ const uint32_t TableStruct_bridge_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(p
PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.avatartext_), PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.avatartext_),
PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.state_), PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.state_),
PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.splitmode_), PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.splitmode_),
PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.setupguideseen_),
PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.usedbytes_), PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.usedbytes_),
PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.totalbytes_), PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.totalbytes_),
PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.password_), PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.password_),
@ -963,6 +962,7 @@ const uint32_t TableStruct_bridge_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(p
~0u, // no _weak_field_map_ ~0u, // no _weak_field_map_
~0u, // no _inlined_string_donated_ ~0u, // no _inlined_string_donated_
PROTOBUF_FIELD_OFFSET(::grpc::LoginFinishedEvent, _impl_.userid_), PROTOBUF_FIELD_OFFSET(::grpc::LoginFinishedEvent, _impl_.userid_),
PROTOBUF_FIELD_OFFSET(::grpc::LoginFinishedEvent, _impl_.wassignedout_),
~0u, // no _has_bits_ ~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::grpc::UpdateEvent, _internal_metadata_), PROTOBUF_FIELD_OFFSET(::grpc::UpdateEvent, _internal_metadata_),
~0u, // no _extensions_ ~0u, // no _extensions_
@ -1202,24 +1202,24 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode
{ 36, -1, -1, sizeof(::grpc::ImapSmtpSettings)}, { 36, -1, -1, sizeof(::grpc::ImapSmtpSettings)},
{ 46, -1, -1, sizeof(::grpc::AvailableKeychainsResponse)}, { 46, -1, -1, sizeof(::grpc::AvailableKeychainsResponse)},
{ 53, -1, -1, sizeof(::grpc::User)}, { 53, -1, -1, sizeof(::grpc::User)},
{ 69, -1, -1, sizeof(::grpc::UserSplitModeRequest)}, { 68, -1, -1, sizeof(::grpc::UserSplitModeRequest)},
{ 77, -1, -1, sizeof(::grpc::UserListResponse)}, { 76, -1, -1, sizeof(::grpc::UserListResponse)},
{ 84, -1, -1, sizeof(::grpc::ConfigureAppleMailRequest)}, { 83, -1, -1, sizeof(::grpc::ConfigureAppleMailRequest)},
{ 92, -1, -1, sizeof(::grpc::EventStreamRequest)}, { 91, -1, -1, sizeof(::grpc::EventStreamRequest)},
{ 99, -1, -1, sizeof(::grpc::StreamEvent)}, { 98, -1, -1, sizeof(::grpc::StreamEvent)},
{ 115, -1, -1, sizeof(::grpc::AppEvent)}, { 114, -1, -1, sizeof(::grpc::AppEvent)},
{ 129, -1, -1, sizeof(::grpc::InternetStatusEvent)}, { 128, -1, -1, sizeof(::grpc::InternetStatusEvent)},
{ 136, -1, -1, sizeof(::grpc::ToggleAutostartFinishedEvent)}, { 135, -1, -1, sizeof(::grpc::ToggleAutostartFinishedEvent)},
{ 142, -1, -1, sizeof(::grpc::ResetFinishedEvent)}, { 141, -1, -1, sizeof(::grpc::ResetFinishedEvent)},
{ 148, -1, -1, sizeof(::grpc::ReportBugFinishedEvent)}, { 147, -1, -1, sizeof(::grpc::ReportBugFinishedEvent)},
{ 154, -1, -1, sizeof(::grpc::ReportBugSuccessEvent)}, { 153, -1, -1, sizeof(::grpc::ReportBugSuccessEvent)},
{ 160, -1, -1, sizeof(::grpc::ReportBugErrorEvent)}, { 159, -1, -1, sizeof(::grpc::ReportBugErrorEvent)},
{ 166, -1, -1, sizeof(::grpc::ShowMainWindowEvent)}, { 165, -1, -1, sizeof(::grpc::ShowMainWindowEvent)},
{ 172, -1, -1, sizeof(::grpc::LoginEvent)}, { 171, -1, -1, sizeof(::grpc::LoginEvent)},
{ 184, -1, -1, sizeof(::grpc::LoginErrorEvent)}, { 183, -1, -1, sizeof(::grpc::LoginErrorEvent)},
{ 192, -1, -1, sizeof(::grpc::LoginTfaRequestedEvent)}, { 191, -1, -1, sizeof(::grpc::LoginTfaRequestedEvent)},
{ 199, -1, -1, sizeof(::grpc::LoginTwoPasswordsRequestedEvent)}, { 198, -1, -1, sizeof(::grpc::LoginTwoPasswordsRequestedEvent)},
{ 205, -1, -1, sizeof(::grpc::LoginFinishedEvent)}, { 204, -1, -1, sizeof(::grpc::LoginFinishedEvent)},
{ 212, -1, -1, sizeof(::grpc::UpdateEvent)}, { 212, -1, -1, sizeof(::grpc::UpdateEvent)},
{ 227, -1, -1, sizeof(::grpc::UpdateErrorEvent)}, { 227, -1, -1, sizeof(::grpc::UpdateErrorEvent)},
{ 234, -1, -1, sizeof(::grpc::UpdateManualReadyEvent)}, { 234, -1, -1, sizeof(::grpc::UpdateManualReadyEvent)},
@ -1326,239 +1326,239 @@ const char descriptor_table_protodef_bridge_2eproto[] PROTOBUF_SECTION_VARIABLE(
"mapSmtpSettings\022\020\n\010imapPort\030\001 \001(\005\022\020\n\010smt" "mapSmtpSettings\022\020\n\010imapPort\030\001 \001(\005\022\020\n\010smt"
"pPort\030\002 \001(\005\022\025\n\ruseSSLForImap\030\003 \001(\010\022\025\n\rus" "pPort\030\002 \001(\005\022\025\n\ruseSSLForImap\030\003 \001(\010\022\025\n\rus"
"eSSLForSmtp\030\004 \001(\010\"/\n\032AvailableKeychainsR" "eSSLForSmtp\030\004 \001(\010\"/\n\032AvailableKeychainsR"
"esponse\022\021\n\tkeychains\030\001 \003(\t\"\317\001\n\004User\022\n\n\002i" "esponse\022\021\n\tkeychains\030\001 \003(\t\"\267\001\n\004User\022\n\n\002i"
"d\030\001 \001(\t\022\020\n\010username\030\002 \001(\t\022\022\n\navatarText\030" "d\030\001 \001(\t\022\020\n\010username\030\002 \001(\t\022\022\n\navatarText\030"
"\003 \001(\t\022\036\n\005state\030\004 \001(\0162\017.grpc.UserState\022\021\n" "\003 \001(\t\022\036\n\005state\030\004 \001(\0162\017.grpc.UserState\022\021\n"
"\tsplitMode\030\005 \001(\010\022\026\n\016setupGuideSeen\030\006 \001(\010" "\tsplitMode\030\005 \001(\010\022\021\n\tusedBytes\030\006 \001(\003\022\022\n\nt"
"\022\021\n\tusedBytes\030\007 \001(\003\022\022\n\ntotalBytes\030\010 \001(\003\022" "otalBytes\030\007 \001(\003\022\020\n\010password\030\010 \001(\014\022\021\n\tadd"
"\020\n\010password\030\t \001(\014\022\021\n\taddresses\030\n \003(\t\"6\n\024" "resses\030\t \003(\t\"6\n\024UserSplitModeRequest\022\016\n\006"
"UserSplitModeRequest\022\016\n\006userID\030\001 \001(\t\022\016\n\006" "userID\030\001 \001(\t\022\016\n\006active\030\002 \001(\010\"-\n\020UserList"
"active\030\002 \001(\010\"-\n\020UserListResponse\022\031\n\005user" "Response\022\031\n\005users\030\001 \003(\0132\n.grpc.User\"<\n\031C"
"s\030\001 \003(\0132\n.grpc.User\"<\n\031ConfigureAppleMai" "onfigureAppleMailRequest\022\016\n\006userID\030\001 \001(\t"
"lRequest\022\016\n\006userID\030\001 \001(\t\022\017\n\007address\030\002 \001(" "\022\017\n\007address\030\002 \001(\t\",\n\022EventStreamRequest\022"
"\t\",\n\022EventStreamRequest\022\026\n\016ClientPlatfor" "\026\n\016ClientPlatform\030\001 \001(\t\"\375\002\n\013StreamEvent\022"
"m\030\001 \001(\t\"\375\002\n\013StreamEvent\022\035\n\003app\030\001 \001(\0132\016.g" "\035\n\003app\030\001 \001(\0132\016.grpc.AppEventH\000\022!\n\005login\030"
"rpc.AppEventH\000\022!\n\005login\030\002 \001(\0132\020.grpc.Log" "\002 \001(\0132\020.grpc.LoginEventH\000\022#\n\006update\030\003 \001("
"inEventH\000\022#\n\006update\030\003 \001(\0132\021.grpc.UpdateE" "\0132\021.grpc.UpdateEventH\000\022%\n\005cache\030\004 \001(\0132\024."
"ventH\000\022%\n\005cache\030\004 \001(\0132\024.grpc.DiskCacheEv" "grpc.DiskCacheEventH\000\022;\n\022mailServerSetti"
"entH\000\022;\n\022mailServerSettings\030\005 \001(\0132\035.grpc" "ngs\030\005 \001(\0132\035.grpc.MailServerSettingsEvent"
".MailServerSettingsEventH\000\022\'\n\010keychain\030\006" "H\000\022\'\n\010keychain\030\006 \001(\0132\023.grpc.KeychainEven"
" \001(\0132\023.grpc.KeychainEventH\000\022\037\n\004mail\030\007 \001(" "tH\000\022\037\n\004mail\030\007 \001(\0132\017.grpc.MailEventH\000\022\037\n\004"
"\0132\017.grpc.MailEventH\000\022\037\n\004user\030\010 \001(\0132\017.grp" "user\030\010 \001(\0132\017.grpc.UserEventH\000\022/\n\014generic"
"c.UserEventH\000\022/\n\014genericError\030\t \001(\0132\027.gr" "Error\030\t \001(\0132\027.grpc.GenericErrorEventH\000B\007"
"pc.GenericErrorEventH\000B\007\n\005event\"\240\003\n\010AppE" "\n\005event\"\240\003\n\010AppEvent\0223\n\016internetStatus\030\001"
"vent\0223\n\016internetStatus\030\001 \001(\0132\031.grpc.Inte" " \001(\0132\031.grpc.InternetStatusEventH\000\022E\n\027tog"
"rnetStatusEventH\000\022E\n\027toggleAutostartFini" "gleAutostartFinished\030\002 \001(\0132\".grpc.Toggle"
"shed\030\002 \001(\0132\".grpc.ToggleAutostartFinishe" "AutostartFinishedEventH\000\0221\n\rresetFinishe"
"dEventH\000\0221\n\rresetFinished\030\003 \001(\0132\030.grpc.R" "d\030\003 \001(\0132\030.grpc.ResetFinishedEventH\000\0229\n\021r"
"esetFinishedEventH\000\0229\n\021reportBugFinished" "eportBugFinished\030\004 \001(\0132\034.grpc.ReportBugF"
"\030\004 \001(\0132\034.grpc.ReportBugFinishedEventH\000\0227" "inishedEventH\000\0227\n\020reportBugSuccess\030\005 \001(\013"
"\n\020reportBugSuccess\030\005 \001(\0132\033.grpc.ReportBu" "2\033.grpc.ReportBugSuccessEventH\000\0223\n\016repor"
"gSuccessEventH\000\0223\n\016reportBugError\030\006 \001(\0132" "tBugError\030\006 \001(\0132\031.grpc.ReportBugErrorEve"
"\031.grpc.ReportBugErrorEventH\000\0223\n\016showMain" "ntH\000\0223\n\016showMainWindow\030\007 \001(\0132\031.grpc.Show"
"Window\030\007 \001(\0132\031.grpc.ShowMainWindowEventH" "MainWindowEventH\000B\007\n\005event\"(\n\023InternetSt"
"\000B\007\n\005event\"(\n\023InternetStatusEvent\022\021\n\tcon" "atusEvent\022\021\n\tconnected\030\001 \001(\010\"\036\n\034ToggleAu"
"nected\030\001 \001(\010\"\036\n\034ToggleAutostartFinishedE" "tostartFinishedEvent\"\024\n\022ResetFinishedEve"
"vent\"\024\n\022ResetFinishedEvent\"\030\n\026ReportBugF" "nt\"\030\n\026ReportBugFinishedEvent\"\027\n\025ReportBu"
"inishedEvent\"\027\n\025ReportBugSuccessEvent\"\025\n" "gSuccessEvent\"\025\n\023ReportBugErrorEvent\"\025\n\023"
"\023ReportBugErrorEvent\"\025\n\023ShowMainWindowEv" "ShowMainWindowEvent\"\235\002\n\nLoginEvent\022&\n\005er"
"ent\"\235\002\n\nLoginEvent\022&\n\005error\030\001 \001(\0132\025.grpc" "ror\030\001 \001(\0132\025.grpc.LoginErrorEventH\000\0224\n\014tf"
".LoginErrorEventH\000\0224\n\014tfaRequested\030\002 \001(\013" "aRequested\030\002 \001(\0132\034.grpc.LoginTfaRequeste"
"2\034.grpc.LoginTfaRequestedEventH\000\022E\n\024twoP" "dEventH\000\022E\n\024twoPasswordRequested\030\003 \001(\0132%"
"asswordRequested\030\003 \001(\0132%.grpc.LoginTwoPa" ".grpc.LoginTwoPasswordsRequestedEventH\000\022"
"sswordsRequestedEventH\000\022,\n\010finished\030\004 \001(" ",\n\010finished\030\004 \001(\0132\030.grpc.LoginFinishedEv"
"\0132\030.grpc.LoginFinishedEventH\000\0223\n\017already" "entH\000\0223\n\017alreadyLoggedIn\030\005 \001(\0132\030.grpc.Lo"
"LoggedIn\030\005 \001(\0132\030.grpc.LoginFinishedEvent" "ginFinishedEventH\000B\007\n\005event\"F\n\017LoginErro"
"H\000B\007\n\005event\"F\n\017LoginErrorEvent\022\"\n\004type\030\001" "rEvent\022\"\n\004type\030\001 \001(\0162\024.grpc.LoginErrorTy"
" \001(\0162\024.grpc.LoginErrorType\022\017\n\007message\030\002 " "pe\022\017\n\007message\030\002 \001(\t\"*\n\026LoginTfaRequested"
"\001(\t\"*\n\026LoginTfaRequestedEvent\022\020\n\010usernam" "Event\022\020\n\010username\030\001 \001(\t\"!\n\037LoginTwoPassw"
"e\030\001 \001(\t\"!\n\037LoginTwoPasswordsRequestedEve" "ordsRequestedEvent\":\n\022LoginFinishedEvent"
"nt\"$\n\022LoginFinishedEvent\022\016\n\006userID\030\001 \001(\t" "\022\016\n\006userID\030\001 \001(\t\022\024\n\014wasSignedOut\030\002 \001(\010\"\304"
"\"\304\003\n\013UpdateEvent\022\'\n\005error\030\001 \001(\0132\026.grpc.U" "\003\n\013UpdateEvent\022\'\n\005error\030\001 \001(\0132\026.grpc.Upd"
"pdateErrorEventH\000\0223\n\013manualReady\030\002 \001(\0132\034" "ateErrorEventH\000\0223\n\013manualReady\030\002 \001(\0132\034.g"
".grpc.UpdateManualReadyEventH\000\022C\n\023manual" "rpc.UpdateManualReadyEventH\000\022C\n\023manualRe"
"RestartNeeded\030\003 \001(\0132$.grpc.UpdateManualR" "startNeeded\030\003 \001(\0132$.grpc.UpdateManualRes"
"estartNeededEventH\000\022\'\n\005force\030\004 \001(\0132\026.grp" "tartNeededEventH\000\022\'\n\005force\030\004 \001(\0132\026.grpc."
"c.UpdateForceEventH\000\022>\n\023silentRestartNee" "UpdateForceEventH\000\022>\n\023silentRestartNeede"
"ded\030\005 \001(\0132\037.grpc.UpdateSilentRestartNeed" "d\030\005 \001(\0132\037.grpc.UpdateSilentRestartNeeded"
"edH\000\0226\n\017isLatestVersion\030\006 \001(\0132\033.grpc.Upd" "H\000\0226\n\017isLatestVersion\030\006 \001(\0132\033.grpc.Updat"
"ateIsLatestVersionH\000\0222\n\rcheckFinished\030\007 " "eIsLatestVersionH\000\0222\n\rcheckFinished\030\007 \001("
"\001(\0132\031.grpc.UpdateCheckFinishedH\000\0224\n\016vers" "\0132\031.grpc.UpdateCheckFinishedH\000\0224\n\016versio"
"ionChanged\030\010 \001(\0132\032.grpc.UpdateVersionCha" "nChanged\030\010 \001(\0132\032.grpc.UpdateVersionChang"
"ngedH\000B\007\n\005event\"7\n\020UpdateErrorEvent\022#\n\004t" "edH\000B\007\n\005event\"7\n\020UpdateErrorEvent\022#\n\004typ"
"ype\030\001 \001(\0162\025.grpc.UpdateErrorType\")\n\026Upda" "e\030\001 \001(\0162\025.grpc.UpdateErrorType\")\n\026Update"
"teManualReadyEvent\022\017\n\007version\030\001 \001(\t\" \n\036U" "ManualReadyEvent\022\017\n\007version\030\001 \001(\t\" \n\036Upd"
"pdateManualRestartNeededEvent\"#\n\020UpdateF" "ateManualRestartNeededEvent\"#\n\020UpdateFor"
"orceEvent\022\017\n\007version\030\001 \001(\t\"\033\n\031UpdateSile" "ceEvent\022\017\n\007version\030\001 \001(\t\"\033\n\031UpdateSilent"
"ntRestartNeeded\"\027\n\025UpdateIsLatestVersion" "RestartNeeded\"\027\n\025UpdateIsLatestVersion\"\025"
"\"\025\n\023UpdateCheckFinished\"\026\n\024UpdateVersion" "\n\023UpdateCheckFinished\"\026\n\024UpdateVersionCh"
"Changed\"\303\001\n\016DiskCacheEvent\022*\n\005error\030\001 \001(" "anged\"\303\001\n\016DiskCacheEvent\022*\n\005error\030\001 \001(\0132"
"\0132\031.grpc.DiskCacheErrorEventH\000\0226\n\013pathCh" "\031.grpc.DiskCacheErrorEventH\000\0226\n\013pathChan"
"anged\030\002 \001(\0132\037.grpc.DiskCachePathChangedE" "ged\030\002 \001(\0132\037.grpc.DiskCachePathChangedEve"
"ventH\000\022D\n\022pathChangeFinished\030\003 \001(\0132&.grp" "ntH\000\022D\n\022pathChangeFinished\030\003 \001(\0132&.grpc."
"c.DiskCachePathChangeFinishedEventH\000B\007\n\005" "DiskCachePathChangeFinishedEventH\000B\007\n\005ev"
"event\"=\n\023DiskCacheErrorEvent\022&\n\004type\030\001 \001" "ent\"=\n\023DiskCacheErrorEvent\022&\n\004type\030\001 \001(\016"
"(\0162\030.grpc.DiskCacheErrorType\")\n\031DiskCach" "2\030.grpc.DiskCacheErrorType\")\n\031DiskCacheP"
"ePathChangedEvent\022\014\n\004path\030\001 \001(\t\"\"\n DiskC" "athChangedEvent\022\014\n\004path\030\001 \001(\t\"\"\n DiskCac"
"achePathChangeFinishedEvent\"\373\001\n\027MailServ" "hePathChangeFinishedEvent\"\373\001\n\027MailServer"
"erSettingsEvent\0223\n\005error\030\001 \001(\0132\".grpc.Ma" "SettingsEvent\0223\n\005error\030\001 \001(\0132\".grpc.Mail"
"ilServerSettingsErrorEventH\000\022I\n\031mailServ" "ServerSettingsErrorEventH\000\022I\n\031mailServer"
"erSettingsChanged\030\002 \001(\0132$.grpc.MailServe" "SettingsChanged\030\002 \001(\0132$.grpc.MailServerS"
"rSettingsChangedEventH\000\022W\n changeMailSer" "ettingsChangedEventH\000\022W\n changeMailServe"
"verSettingsFinished\030\003 \001(\0132+.grpc.ChangeM" "rSettingsFinished\030\003 \001(\0132+.grpc.ChangeMai"
"ailServerSettingsFinishedEventH\000B\007\n\005even" "lServerSettingsFinishedEventH\000B\007\n\005event\""
"t\"O\n\034MailServerSettingsErrorEvent\022/\n\004typ" "O\n\034MailServerSettingsErrorEvent\022/\n\004type\030"
"e\030\001 \001(\0162!.grpc.MailServerSettingsErrorTy" "\001 \001(\0162!.grpc.MailServerSettingsErrorType"
"pe\"J\n\036MailServerSettingsChangedEvent\022(\n\010" "\"J\n\036MailServerSettingsChangedEvent\022(\n\010se"
"settings\030\001 \001(\0132\026.grpc.ImapSmtpSettings\"\'" "ttings\030\001 \001(\0132\026.grpc.ImapSmtpSettings\"\'\n%"
"\n%ChangeMailServerSettingsFinishedEvent\"" "ChangeMailServerSettingsFinishedEvent\"\307\001"
"\307\001\n\rKeychainEvent\022C\n\026changeKeychainFinis" "\n\rKeychainEvent\022C\n\026changeKeychainFinishe"
"hed\030\001 \001(\0132!.grpc.ChangeKeychainFinishedE" "d\030\001 \001(\0132!.grpc.ChangeKeychainFinishedEve"
"ventH\000\0221\n\rhasNoKeychain\030\002 \001(\0132\030.grpc.Has" "ntH\000\0221\n\rhasNoKeychain\030\002 \001(\0132\030.grpc.HasNo"
"NoKeychainEventH\000\0225\n\017rebuildKeychain\030\003 \001" "KeychainEventH\000\0225\n\017rebuildKeychain\030\003 \001(\013"
"(\0132\032.grpc.RebuildKeychainEventH\000B\007\n\005even" "2\032.grpc.RebuildKeychainEventH\000B\007\n\005event\""
"t\"\035\n\033ChangeKeychainFinishedEvent\"\024\n\022HasN" "\035\n\033ChangeKeychainFinishedEvent\"\024\n\022HasNoK"
"oKeychainEvent\"\026\n\024RebuildKeychainEvent\"\207" "eychainEvent\"\026\n\024RebuildKeychainEvent\"\207\002\n"
"\002\n\tMailEvent\022J\n\034noActiveKeyForRecipientE" "\tMailEvent\022J\n\034noActiveKeyForRecipientEve"
"vent\030\001 \001(\0132\".grpc.NoActiveKeyForRecipien" "nt\030\001 \001(\0132\".grpc.NoActiveKeyForRecipientE"
"tEventH\000\0223\n\016addressChanged\030\002 \001(\0132\031.grpc." "ventH\000\0223\n\016addressChanged\030\002 \001(\0132\031.grpc.Ad"
"AddressChangedEventH\000\022\?\n\024addressChangedL" "dressChangedEventH\000\022\?\n\024addressChangedLog"
"ogout\030\003 \001(\0132\037.grpc.AddressChangedLogoutE" "out\030\003 \001(\0132\037.grpc.AddressChangedLogoutEve"
"ventH\000\022/\n\014apiCertIssue\030\006 \001(\0132\027.grpc.ApiC" "ntH\000\022/\n\014apiCertIssue\030\006 \001(\0132\027.grpc.ApiCer"
"ertIssueEventH\000B\007\n\005event\"-\n\034NoActiveKeyF" "tIssueEventH\000B\007\n\005event\"-\n\034NoActiveKeyFor"
"orRecipientEvent\022\r\n\005email\030\001 \001(\t\"&\n\023Addre" "RecipientEvent\022\r\n\005email\030\001 \001(\t\"&\n\023Address"
"ssChangedEvent\022\017\n\007address\030\001 \001(\t\",\n\031Addre" "ChangedEvent\022\017\n\007address\030\001 \001(\t\",\n\031Address"
"ssChangedLogoutEvent\022\017\n\007address\030\001 \001(\t\"\023\n" "ChangedLogoutEvent\022\017\n\007address\030\001 \001(\t\"\023\n\021A"
"\021ApiCertIssueEvent\"\303\001\n\tUserEvent\022E\n\027togg" "piCertIssueEvent\"\303\001\n\tUserEvent\022E\n\027toggle"
"leSplitModeFinished\030\001 \001(\0132\".grpc.ToggleS" "SplitModeFinished\030\001 \001(\0132\".grpc.ToggleSpl"
"plitModeFinishedEventH\000\0227\n\020userDisconnec" "itModeFinishedEventH\000\0227\n\020userDisconnecte"
"ted\030\002 \001(\0132\033.grpc.UserDisconnectedEventH\000" "d\030\002 \001(\0132\033.grpc.UserDisconnectedEventH\000\022-"
"\022-\n\013userChanged\030\003 \001(\0132\026.grpc.UserChanged" "\n\013userChanged\030\003 \001(\0132\026.grpc.UserChangedEv"
"EventH\000B\007\n\005event\".\n\034ToggleSplitModeFinis" "entH\000B\007\n\005event\".\n\034ToggleSplitModeFinishe"
"hedEvent\022\016\n\006userID\030\001 \001(\t\")\n\025UserDisconne" "dEvent\022\016\n\006userID\030\001 \001(\t\")\n\025UserDisconnect"
"ctedEvent\022\020\n\010username\030\001 \001(\t\"\"\n\020UserChang" "edEvent\022\020\n\010username\030\001 \001(\t\"\"\n\020UserChanged"
"edEvent\022\016\n\006userID\030\001 \001(\t\"2\n\021GenericErrorE" "Event\022\016\n\006userID\030\001 \001(\t\"2\n\021GenericErrorEve"
"vent\022\035\n\004code\030\001 \001(\0162\017.grpc.ErrorCode*q\n\010L" "nt\022\035\n\004code\030\001 \001(\0162\017.grpc.ErrorCode*q\n\010Log"
"ogLevel\022\r\n\tLOG_PANIC\020\000\022\r\n\tLOG_FATAL\020\001\022\r\n" "Level\022\r\n\tLOG_PANIC\020\000\022\r\n\tLOG_FATAL\020\001\022\r\n\tL"
"\tLOG_ERROR\020\002\022\014\n\010LOG_WARN\020\003\022\014\n\010LOG_INFO\020\004" "OG_ERROR\020\002\022\014\n\010LOG_WARN\020\003\022\014\n\010LOG_INFO\020\004\022\r"
"\022\r\n\tLOG_DEBUG\020\005\022\r\n\tLOG_TRACE\020\006*6\n\tUserSt" "\n\tLOG_DEBUG\020\005\022\r\n\tLOG_TRACE\020\006*6\n\tUserStat"
"ate\022\016\n\nSIGNED_OUT\020\000\022\n\n\006LOCKED\020\001\022\r\n\tCONNE" "e\022\016\n\nSIGNED_OUT\020\000\022\n\n\006LOCKED\020\001\022\r\n\tCONNECT"
"CTED\020\002*\242\001\n\016LoginErrorType\022\033\n\027USERNAME_PA" "ED\020\002*\242\001\n\016LoginErrorType\022\033\n\027USERNAME_PASS"
"SSWORD_ERROR\020\000\022\r\n\tFREE_USER\020\001\022\024\n\020CONNECT" "WORD_ERROR\020\000\022\r\n\tFREE_USER\020\001\022\024\n\020CONNECTIO"
"ION_ERROR\020\002\022\r\n\tTFA_ERROR\020\003\022\r\n\tTFA_ABORT\020" "N_ERROR\020\002\022\r\n\tTFA_ERROR\020\003\022\r\n\tTFA_ABORT\020\004\022"
"\004\022\027\n\023TWO_PASSWORDS_ERROR\020\005\022\027\n\023TWO_PASSWO" "\027\n\023TWO_PASSWORDS_ERROR\020\005\022\027\n\023TWO_PASSWORD"
"RDS_ABORT\020\006*[\n\017UpdateErrorType\022\027\n\023UPDATE" "S_ABORT\020\006*[\n\017UpdateErrorType\022\027\n\023UPDATE_M"
"_MANUAL_ERROR\020\000\022\026\n\022UPDATE_FORCE_ERROR\020\001\022" "ANUAL_ERROR\020\000\022\026\n\022UPDATE_FORCE_ERROR\020\001\022\027\n"
"\027\n\023UPDATE_SILENT_ERROR\020\002*k\n\022DiskCacheErr" "\023UPDATE_SILENT_ERROR\020\002*k\n\022DiskCacheError"
"orType\022 \n\034DISK_CACHE_UNAVAILABLE_ERROR\020\000" "Type\022 \n\034DISK_CACHE_UNAVAILABLE_ERROR\020\000\022\036"
"\022\036\n\032CANT_MOVE_DISK_CACHE_ERROR\020\001\022\023\n\017DISK" "\n\032CANT_MOVE_DISK_CACHE_ERROR\020\001\022\023\n\017DISK_F"
"_FULL_ERROR\020\002*\335\001\n\033MailServerSettingsErro" "ULL_ERROR\020\002*\335\001\n\033MailServerSettingsErrorT"
"rType\022\033\n\027IMAP_PORT_STARTUP_ERROR\020\000\022\033\n\027SM" "ype\022\033\n\027IMAP_PORT_STARTUP_ERROR\020\000\022\033\n\027SMTP"
"TP_PORT_STARTUP_ERROR\020\001\022\032\n\026IMAP_PORT_CHA" "_PORT_STARTUP_ERROR\020\001\022\032\n\026IMAP_PORT_CHANG"
"NGE_ERROR\020\002\022\032\n\026SMTP_PORT_CHANGE_ERROR\020\003\022" "E_ERROR\020\002\022\032\n\026SMTP_PORT_CHANGE_ERROR\020\003\022%\n"
"%\n!IMAP_CONNECTION_MODE_CHANGE_ERROR\020\004\022%" "!IMAP_CONNECTION_MODE_CHANGE_ERROR\020\004\022%\n!"
"\n!SMTP_CONNECTION_MODE_CHANGE_ERROR\020\005*S\n" "SMTP_CONNECTION_MODE_CHANGE_ERROR\020\005*S\n\tE"
"\tErrorCode\022\021\n\rUNKNOWN_ERROR\020\000\022\031\n\025TLS_CER" "rrorCode\022\021\n\rUNKNOWN_ERROR\020\000\022\031\n\025TLS_CERT_"
"T_EXPORT_ERROR\020\001\022\030\n\024TLS_KEY_EXPORT_ERROR" "EXPORT_ERROR\020\001\022\030\n\024TLS_KEY_EXPORT_ERROR\020\002"
"\020\0022\250\036\n\006Bridge\022I\n\013CheckTokens\022\034.google.pr" "2\250\036\n\006Bridge\022I\n\013CheckTokens\022\034.google.prot"
"otobuf.StringValue\032\034.google.protobuf.Str" "obuf.StringValue\032\034.google.protobuf.Strin"
"ingValue\022\?\n\013AddLogEntry\022\030.grpc.AddLogEnt" "gValue\022\?\n\013AddLogEntry\022\030.grpc.AddLogEntry"
"ryRequest\032\026.google.protobuf.Empty\022:\n\010Gui" "Request\032\026.google.protobuf.Empty\022:\n\010GuiRe"
"Ready\022\026.google.protobuf.Empty\032\026.google.p" "ady\022\026.google.protobuf.Empty\032\026.google.pro"
"rotobuf.Empty\0226\n\004Quit\022\026.google.protobuf." "tobuf.Empty\0226\n\004Quit\022\026.google.protobuf.Em"
"Empty\032\026.google.protobuf.Empty\0229\n\007Restart" "pty\032\026.google.protobuf.Empty\0229\n\007Restart\022\026"
"\022\026.google.protobuf.Empty\032\026.google.protob" ".google.protobuf.Empty\032\026.google.protobuf"
"uf.Empty\022C\n\rShowOnStartup\022\026.google.proto" ".Empty\022C\n\rShowOnStartup\022\026.google.protobu"
"buf.Empty\032\032.google.protobuf.BoolValue\022F\n" "f.Empty\032\032.google.protobuf.BoolValue\022F\n\020S"
"\020ShowSplashScreen\022\026.google.protobuf.Empt" "howSplashScreen\022\026.google.protobuf.Empty\032"
"y\032\032.google.protobuf.BoolValue\022E\n\017IsFirst" "\032.google.protobuf.BoolValue\022E\n\017IsFirstGu"
"GuiStart\022\026.google.protobuf.Empty\032\032.googl" "iStart\022\026.google.protobuf.Empty\032\032.google."
"e.protobuf.BoolValue\022F\n\020SetIsAutostartOn" "protobuf.BoolValue\022F\n\020SetIsAutostartOn\022\032"
"\022\032.google.protobuf.BoolValue\032\026.google.pr" ".google.protobuf.BoolValue\032\026.google.prot"
"otobuf.Empty\022C\n\rIsAutostartOn\022\026.google.p" "obuf.Empty\022C\n\rIsAutostartOn\022\026.google.pro"
"rotobuf.Empty\032\032.google.protobuf.BoolValu" "tobuf.Empty\032\032.google.protobuf.BoolValue\022"
"e\022F\n\020SetIsBetaEnabled\022\032.google.protobuf." "F\n\020SetIsBetaEnabled\022\032.google.protobuf.Bo"
"BoolValue\032\026.google.protobuf.Empty\022C\n\rIsB" "olValue\032\026.google.protobuf.Empty\022C\n\rIsBet"
"etaEnabled\022\026.google.protobuf.Empty\032\032.goo" "aEnabled\022\026.google.protobuf.Empty\032\032.googl"
"gle.protobuf.BoolValue\022I\n\023SetIsAllMailVi" "e.protobuf.BoolValue\022I\n\023SetIsAllMailVisi"
"sible\022\032.google.protobuf.BoolValue\032\026.goog" "ble\022\032.google.protobuf.BoolValue\032\026.google"
"le.protobuf.Empty\022F\n\020IsAllMailVisible\022\026." ".protobuf.Empty\022F\n\020IsAllMailVisible\022\026.go"
"google.protobuf.Empty\032\032.google.protobuf." "ogle.protobuf.Empty\032\032.google.protobuf.Bo"
"BoolValue\022<\n\004GoOs\022\026.google.protobuf.Empt" "olValue\022<\n\004GoOs\022\026.google.protobuf.Empty\032"
"y\032\034.google.protobuf.StringValue\022>\n\014Trigg" "\034.google.protobuf.StringValue\022>\n\014Trigger"
"erReset\022\026.google.protobuf.Empty\032\026.google" "Reset\022\026.google.protobuf.Empty\032\026.google.p"
".protobuf.Empty\022\?\n\007Version\022\026.google.prot" "rotobuf.Empty\022\?\n\007Version\022\026.google.protob"
"obuf.Empty\032\034.google.protobuf.StringValue" "uf.Empty\032\034.google.protobuf.StringValue\022@"
"\022@\n\010LogsPath\022\026.google.protobuf.Empty\032\034.g" "\n\010LogsPath\022\026.google.protobuf.Empty\032\034.goo"
"oogle.protobuf.StringValue\022C\n\013LicensePat" "gle.protobuf.StringValue\022C\n\013LicensePath\022"
"h\022\026.google.protobuf.Empty\032\034.google.proto"
"buf.StringValue\022L\n\024ReleaseNotesPageLink\022"
"\026.google.protobuf.Empty\032\034.google.protobu" "\026.google.protobuf.Empty\032\034.google.protobu"
"f.StringValue\022N\n\026DependencyLicensesLink\022" "f.StringValue\022L\n\024ReleaseNotesPageLink\022\026."
"\026.google.protobuf.Empty\032\034.google.protobu" "google.protobuf.Empty\032\034.google.protobuf."
"f.StringValue\022G\n\017LandingPageLink\022\026.googl" "StringValue\022N\n\026DependencyLicensesLink\022\026."
"e.protobuf.Empty\032\034.google.protobuf.Strin" "google.protobuf.Empty\032\034.google.protobuf."
"gValue\022J\n\022SetColorSchemeName\022\034.google.pr" "StringValue\022G\n\017LandingPageLink\022\026.google."
"otobuf.StringValue\032\026.google.protobuf.Emp" "protobuf.Empty\032\034.google.protobuf.StringV"
"ty\022G\n\017ColorSchemeName\022\026.google.protobuf." "alue\022J\n\022SetColorSchemeName\022\034.google.prot"
"Empty\032\034.google.protobuf.StringValue\022J\n\022C" "obuf.StringValue\032\026.google.protobuf.Empty"
"urrentEmailClient\022\026.google.protobuf.Empt" "\022G\n\017ColorSchemeName\022\026.google.protobuf.Em"
"y\032\034.google.protobuf.StringValue\022;\n\tRepor" "pty\032\034.google.protobuf.StringValue\022J\n\022Cur"
"tBug\022\026.grpc.ReportBugRequest\032\026.google.pr" "rentEmailClient\022\026.google.protobuf.Empty\032"
"otobuf.Empty\022M\n\025ExportTLSCertificates\022\034." "\034.google.protobuf.StringValue\022;\n\tReportB"
"google.protobuf.StringValue\032\026.google.pro" "ug\022\026.grpc.ReportBugRequest\032\026.google.prot"
"tobuf.Empty\022E\n\rForceLauncher\022\034.google.pr" "obuf.Empty\022M\n\025ExportTLSCertificates\022\034.go"
"otobuf.StringValue\032\026.google.protobuf.Emp" "ogle.protobuf.StringValue\032\026.google.proto"
"ty\022I\n\021SetMainExecutable\022\034.google.protobu" "buf.Empty\022E\n\rForceLauncher\022\034.google.prot"
"f.StringValue\032\026.google.protobuf.Empty\0223\n" "obuf.StringValue\032\026.google.protobuf.Empty"
"\005Login\022\022.grpc.LoginRequest\032\026.google.prot" "\022I\n\021SetMainExecutable\022\034.google.protobuf."
"obuf.Empty\0226\n\010Login2FA\022\022.grpc.LoginReque" "StringValue\032\026.google.protobuf.Empty\0223\n\005L"
"st\032\026.google.protobuf.Empty\022=\n\017Login2Pass" "ogin\022\022.grpc.LoginRequest\032\026.google.protob"
"words\022\022.grpc.LoginRequest\032\026.google.proto" "uf.Empty\0226\n\010Login2FA\022\022.grpc.LoginRequest"
"buf.Empty\022=\n\nLoginAbort\022\027.grpc.LoginAbor" "\032\026.google.protobuf.Empty\022=\n\017Login2Passwo"
"tRequest\032\026.google.protobuf.Empty\022=\n\013Chec" "rds\022\022.grpc.LoginRequest\032\026.google.protobu"
"kUpdate\022\026.google.protobuf.Empty\032\026.google" "f.Empty\022=\n\nLoginAbort\022\027.grpc.LoginAbortR"
".protobuf.Empty\022\?\n\rInstallUpdate\022\026.googl" "equest\032\026.google.protobuf.Empty\022=\n\013CheckU"
"e.protobuf.Empty\032\026.google.protobuf.Empty" "pdate\022\026.google.protobuf.Empty\032\026.google.p"
"\022L\n\026SetIsAutomaticUpdateOn\022\032.google.prot" "rotobuf.Empty\022\?\n\rInstallUpdate\022\026.google."
"obuf.BoolValue\032\026.google.protobuf.Empty\022I" "protobuf.Empty\032\026.google.protobuf.Empty\022L"
"\n\023IsAutomaticUpdateOn\022\026.google.protobuf." "\n\026SetIsAutomaticUpdateOn\022\032.google.protob"
"Empty\032\032.google.protobuf.BoolValue\022E\n\rDis" "uf.BoolValue\032\026.google.protobuf.Empty\022I\n\023"
"kCachePath\022\026.google.protobuf.Empty\032\034.goo" "IsAutomaticUpdateOn\022\026.google.protobuf.Em"
"gle.protobuf.StringValue\022H\n\020SetDiskCache" "pty\032\032.google.protobuf.BoolValue\022E\n\rDiskC"
"Path\022\034.google.protobuf.StringValue\032\026.goo" "achePath\022\026.google.protobuf.Empty\032\034.googl"
"gle.protobuf.Empty\022E\n\017SetIsDoHEnabled\022\032." "e.protobuf.StringValue\022H\n\020SetDiskCachePa"
"google.protobuf.BoolValue\032\026.google.proto" "th\022\034.google.protobuf.StringValue\032\026.googl"
"buf.Empty\022B\n\014IsDoHEnabled\022\026.google.proto" "e.protobuf.Empty\022E\n\017SetIsDoHEnabled\022\032.go"
"buf.Empty\032\032.google.protobuf.BoolValue\022D\n" "ogle.protobuf.BoolValue\032\026.google.protobu"
"\022MailServerSettings\022\026.google.protobuf.Em" "f.Empty\022B\n\014IsDoHEnabled\022\026.google.protobu"
"pty\032\026.grpc.ImapSmtpSettings\022G\n\025SetMailSe" "f.Empty\032\032.google.protobuf.BoolValue\022D\n\022M"
"rverSettings\022\026.grpc.ImapSmtpSettings\032\026.g" "ailServerSettings\022\026.google.protobuf.Empt"
"oogle.protobuf.Empty\022@\n\010Hostname\022\026.googl" "y\032\026.grpc.ImapSmtpSettings\022G\n\025SetMailServ"
"e.protobuf.Empty\032\034.google.protobuf.Strin" "erSettings\022\026.grpc.ImapSmtpSettings\032\026.goo"
"gValue\022E\n\nIsPortFree\022\033.google.protobuf.I" "gle.protobuf.Empty\022@\n\010Hostname\022\026.google."
"nt32Value\032\032.google.protobuf.BoolValue\022N\n" "protobuf.Empty\032\034.google.protobuf.StringV"
"\022AvailableKeychains\022\026.google.protobuf.Em" "alue\022E\n\nIsPortFree\022\033.google.protobuf.Int"
"pty\032 .grpc.AvailableKeychainsResponse\022J\n" "32Value\032\032.google.protobuf.BoolValue\022N\n\022A"
"\022SetCurrentKeychain\022\034.google.protobuf.St" "vailableKeychains\022\026.google.protobuf.Empt"
"ringValue\032\026.google.protobuf.Empty\022G\n\017Cur" "y\032 .grpc.AvailableKeychainsResponse\022J\n\022S"
"rentKeychain\022\026.google.protobuf.Empty\032\034.g" "etCurrentKeychain\022\034.google.protobuf.Stri"
"oogle.protobuf.StringValue\022=\n\013GetUserLis" "ngValue\032\026.google.protobuf.Empty\022G\n\017Curre"
"t\022\026.google.protobuf.Empty\032\026.grpc.UserLis" "ntKeychain\022\026.google.protobuf.Empty\032\034.goo"
"tResponse\0223\n\007GetUser\022\034.google.protobuf.S" "gle.protobuf.StringValue\022=\n\013GetUserList\022"
"tringValue\032\n.grpc.User\022F\n\020SetUserSplitMo" "\026.google.protobuf.Empty\032\026.grpc.UserListR"
"de\022\032.grpc.UserSplitModeRequest\032\026.google." "esponse\0223\n\007GetUser\022\034.google.protobuf.Str"
"protobuf.Empty\022B\n\nLogoutUser\022\034.google.pr" "ingValue\032\n.grpc.User\022F\n\020SetUserSplitMode"
"otobuf.StringValue\032\026.google.protobuf.Emp" "\022\032.grpc.UserSplitModeRequest\032\026.google.pr"
"ty\022B\n\nRemoveUser\022\034.google.protobuf.Strin" "otobuf.Empty\022B\n\nLogoutUser\022\034.google.prot"
"gValue\032\026.google.protobuf.Empty\022Q\n\026Config" "obuf.StringValue\032\026.google.protobuf.Empty"
"ureUserAppleMail\022\037.grpc.ConfigureAppleMa" "\022B\n\nRemoveUser\022\034.google.protobuf.StringV"
"ilRequest\032\026.google.protobuf.Empty\022\?\n\016Run" "alue\032\026.google.protobuf.Empty\022Q\n\026Configur"
"EventStream\022\030.grpc.EventStreamRequest\032\021." "eUserAppleMail\022\037.grpc.ConfigureAppleMail"
"grpc.StreamEvent0\001\022A\n\017StopEventStream\022\026." "Request\032\026.google.protobuf.Empty\022\?\n\016RunEv"
"google.protobuf.Empty\032\026.google.protobuf." "entStream\022\030.grpc.EventStreamRequest\032\021.gr"
"EmptyB6Z4github.com/ProtonMail/proton-br" "pc.StreamEvent0\001\022A\n\017StopEventStream\022\026.go"
"idge/v3/internal/grpcb\006proto3" "ogle.protobuf.Empty\032\026.google.protobuf.Em"
"ptyB6Z4github.com/ProtonMail/proton-brid"
"ge/v3/internal/grpcb\006proto3"
; ;
static const ::_pbi::DescriptorTable* const descriptor_table_bridge_2eproto_deps[2] = { static const ::_pbi::DescriptorTable* const descriptor_table_bridge_2eproto_deps[2] = {
&::descriptor_table_google_2fprotobuf_2fempty_2eproto, &::descriptor_table_google_2fprotobuf_2fempty_2eproto,
@ -1566,7 +1566,7 @@ static const ::_pbi::DescriptorTable* const descriptor_table_bridge_2eproto_deps
}; };
static ::_pbi::once_flag descriptor_table_bridge_2eproto_once; static ::_pbi::once_flag descriptor_table_bridge_2eproto_once;
const ::_pbi::DescriptorTable descriptor_table_bridge_2eproto = { const ::_pbi::DescriptorTable descriptor_table_bridge_2eproto = {
false, false, 9829, descriptor_table_protodef_bridge_2eproto, false, false, 9827, descriptor_table_protodef_bridge_2eproto,
"bridge.proto", "bridge.proto",
&descriptor_table_bridge_2eproto_once, descriptor_table_bridge_2eproto_deps, 2, 56, &descriptor_table_bridge_2eproto_once, descriptor_table_bridge_2eproto_deps, 2, 56,
schemas, file_default_instances, TableStruct_bridge_2eproto::offsets, schemas, file_default_instances, TableStruct_bridge_2eproto::offsets,
@ -3333,7 +3333,6 @@ User::User(const User& from)
, decltype(_impl_.password_){} , decltype(_impl_.password_){}
, decltype(_impl_.state_){} , decltype(_impl_.state_){}
, decltype(_impl_.splitmode_){} , decltype(_impl_.splitmode_){}
, decltype(_impl_.setupguideseen_){}
, decltype(_impl_.usedbytes_){} , decltype(_impl_.usedbytes_){}
, decltype(_impl_.totalbytes_){} , decltype(_impl_.totalbytes_){}
, /*decltype(_impl_._cached_size_)*/{}}; , /*decltype(_impl_._cached_size_)*/{}};
@ -3389,7 +3388,6 @@ inline void User::SharedCtor(
, decltype(_impl_.password_){} , decltype(_impl_.password_){}
, decltype(_impl_.state_){0} , decltype(_impl_.state_){0}
, decltype(_impl_.splitmode_){false} , decltype(_impl_.splitmode_){false}
, decltype(_impl_.setupguideseen_){false}
, decltype(_impl_.usedbytes_){int64_t{0}} , decltype(_impl_.usedbytes_){int64_t{0}}
, decltype(_impl_.totalbytes_){int64_t{0}} , decltype(_impl_.totalbytes_){int64_t{0}}
, /*decltype(_impl_._cached_size_)*/{} , /*decltype(_impl_._cached_size_)*/{}
@ -3504,42 +3502,34 @@ const char* User::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
} else } else
goto handle_unusual; goto handle_unusual;
continue; continue;
// bool setupGuideSeen = 6; // int64 usedBytes = 6;
case 6: case 6:
if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 48)) { if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 48)) {
_impl_.setupguideseen_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
CHK_(ptr);
} else
goto handle_unusual;
continue;
// int64 usedBytes = 7;
case 7:
if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 56)) {
_impl_.usedbytes_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); _impl_.usedbytes_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
CHK_(ptr); CHK_(ptr);
} else } else
goto handle_unusual; goto handle_unusual;
continue; continue;
// int64 totalBytes = 8; // int64 totalBytes = 7;
case 8: case 7:
if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 64)) { if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 56)) {
_impl_.totalbytes_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); _impl_.totalbytes_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
CHK_(ptr); CHK_(ptr);
} else } else
goto handle_unusual; goto handle_unusual;
continue; continue;
// bytes password = 9; // bytes password = 8;
case 9: case 8:
if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 74)) { if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 66)) {
auto str = _internal_mutable_password(); auto str = _internal_mutable_password();
ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
CHK_(ptr); CHK_(ptr);
} else } else
goto handle_unusual; goto handle_unusual;
continue; continue;
// repeated string addresses = 10; // repeated string addresses = 9;
case 10: case 9:
if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 82)) { if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 74)) {
ptr -= 1; ptr -= 1;
do { do {
ptr += 1; ptr += 1;
@ -3548,7 +3538,7 @@ const char* User::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
CHK_(ptr); CHK_(ptr);
CHK_(::_pbi::VerifyUTF8(str, "grpc.User.addresses")); CHK_(::_pbi::VerifyUTF8(str, "grpc.User.addresses"));
if (!ctx->DataAvailable(ptr)) break; if (!ctx->DataAvailable(ptr)) break;
} while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<82>(ptr)); } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<74>(ptr));
} else } else
goto handle_unusual; goto handle_unusual;
continue; continue;
@ -3624,38 +3614,32 @@ uint8_t* User::_InternalSerialize(
target = ::_pbi::WireFormatLite::WriteBoolToArray(5, this->_internal_splitmode(), target); target = ::_pbi::WireFormatLite::WriteBoolToArray(5, this->_internal_splitmode(), target);
} }
// bool setupGuideSeen = 6; // int64 usedBytes = 6;
if (this->_internal_setupguideseen() != 0) {
target = stream->EnsureSpace(target);
target = ::_pbi::WireFormatLite::WriteBoolToArray(6, this->_internal_setupguideseen(), target);
}
// int64 usedBytes = 7;
if (this->_internal_usedbytes() != 0) { if (this->_internal_usedbytes() != 0) {
target = stream->EnsureSpace(target); target = stream->EnsureSpace(target);
target = ::_pbi::WireFormatLite::WriteInt64ToArray(7, this->_internal_usedbytes(), target); target = ::_pbi::WireFormatLite::WriteInt64ToArray(6, this->_internal_usedbytes(), target);
} }
// int64 totalBytes = 8; // int64 totalBytes = 7;
if (this->_internal_totalbytes() != 0) { if (this->_internal_totalbytes() != 0) {
target = stream->EnsureSpace(target); target = stream->EnsureSpace(target);
target = ::_pbi::WireFormatLite::WriteInt64ToArray(8, this->_internal_totalbytes(), target); target = ::_pbi::WireFormatLite::WriteInt64ToArray(7, this->_internal_totalbytes(), target);
} }
// bytes password = 9; // bytes password = 8;
if (!this->_internal_password().empty()) { if (!this->_internal_password().empty()) {
target = stream->WriteBytesMaybeAliased( target = stream->WriteBytesMaybeAliased(
9, this->_internal_password(), target); 8, this->_internal_password(), target);
} }
// repeated string addresses = 10; // repeated string addresses = 9;
for (int i = 0, n = this->_internal_addresses_size(); i < n; i++) { for (int i = 0, n = this->_internal_addresses_size(); i < n; i++) {
const auto& s = this->_internal_addresses(i); const auto& s = this->_internal_addresses(i);
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
s.data(), static_cast<int>(s.length()), s.data(), static_cast<int>(s.length()),
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
"grpc.User.addresses"); "grpc.User.addresses");
target = stream->WriteString(10, s, target); target = stream->WriteString(9, s, target);
} }
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@ -3674,7 +3658,7 @@ size_t User::ByteSizeLong() const {
// Prevent compiler warnings about cached_has_bits being unused // Prevent compiler warnings about cached_has_bits being unused
(void) cached_has_bits; (void) cached_has_bits;
// repeated string addresses = 10; // repeated string addresses = 9;
total_size += 1 * total_size += 1 *
::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(_impl_.addresses_.size()); ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(_impl_.addresses_.size());
for (int i = 0, n = _impl_.addresses_.size(); i < n; i++) { for (int i = 0, n = _impl_.addresses_.size(); i < n; i++) {
@ -3703,7 +3687,7 @@ size_t User::ByteSizeLong() const {
this->_internal_avatartext()); this->_internal_avatartext());
} }
// bytes password = 9; // bytes password = 8;
if (!this->_internal_password().empty()) { if (!this->_internal_password().empty()) {
total_size += 1 + total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize( ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
@ -3721,17 +3705,12 @@ size_t User::ByteSizeLong() const {
total_size += 1 + 1; total_size += 1 + 1;
} }
// bool setupGuideSeen = 6; // int64 usedBytes = 6;
if (this->_internal_setupguideseen() != 0) {
total_size += 1 + 1;
}
// int64 usedBytes = 7;
if (this->_internal_usedbytes() != 0) { if (this->_internal_usedbytes() != 0) {
total_size += ::_pbi::WireFormatLite::Int64SizePlusOne(this->_internal_usedbytes()); total_size += ::_pbi::WireFormatLite::Int64SizePlusOne(this->_internal_usedbytes());
} }
// int64 totalBytes = 8; // int64 totalBytes = 7;
if (this->_internal_totalbytes() != 0) { if (this->_internal_totalbytes() != 0) {
total_size += ::_pbi::WireFormatLite::Int64SizePlusOne(this->_internal_totalbytes()); total_size += ::_pbi::WireFormatLite::Int64SizePlusOne(this->_internal_totalbytes());
} }
@ -3773,9 +3752,6 @@ void User::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_
if (from._internal_splitmode() != 0) { if (from._internal_splitmode() != 0) {
_this->_internal_set_splitmode(from._internal_splitmode()); _this->_internal_set_splitmode(from._internal_splitmode());
} }
if (from._internal_setupguideseen() != 0) {
_this->_internal_set_setupguideseen(from._internal_setupguideseen());
}
if (from._internal_usedbytes() != 0) { if (from._internal_usedbytes() != 0) {
_this->_internal_set_usedbytes(from._internal_usedbytes()); _this->_internal_set_usedbytes(from._internal_usedbytes());
} }
@ -7399,6 +7375,7 @@ LoginFinishedEvent::LoginFinishedEvent(const LoginFinishedEvent& from)
LoginFinishedEvent* const _this = this; (void)_this; LoginFinishedEvent* const _this = this; (void)_this;
new (&_impl_) Impl_{ new (&_impl_) Impl_{
decltype(_impl_.userid_){} decltype(_impl_.userid_){}
, decltype(_impl_.wassignedout_){}
, /*decltype(_impl_._cached_size_)*/{}}; , /*decltype(_impl_._cached_size_)*/{}};
_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
@ -7410,6 +7387,7 @@ LoginFinishedEvent::LoginFinishedEvent(const LoginFinishedEvent& from)
_this->_impl_.userid_.Set(from._internal_userid(), _this->_impl_.userid_.Set(from._internal_userid(),
_this->GetArenaForAllocation()); _this->GetArenaForAllocation());
} }
_this->_impl_.wassignedout_ = from._impl_.wassignedout_;
// @@protoc_insertion_point(copy_constructor:grpc.LoginFinishedEvent) // @@protoc_insertion_point(copy_constructor:grpc.LoginFinishedEvent)
} }
@ -7419,6 +7397,7 @@ inline void LoginFinishedEvent::SharedCtor(
(void)is_message_owned; (void)is_message_owned;
new (&_impl_) Impl_{ new (&_impl_) Impl_{
decltype(_impl_.userid_){} decltype(_impl_.userid_){}
, decltype(_impl_.wassignedout_){false}
, /*decltype(_impl_._cached_size_)*/{} , /*decltype(_impl_._cached_size_)*/{}
}; };
_impl_.userid_.InitDefault(); _impl_.userid_.InitDefault();
@ -7452,6 +7431,7 @@ void LoginFinishedEvent::Clear() {
(void) cached_has_bits; (void) cached_has_bits;
_impl_.userid_.ClearToEmpty(); _impl_.userid_.ClearToEmpty();
_impl_.wassignedout_ = false;
_internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
} }
@ -7471,6 +7451,14 @@ const char* LoginFinishedEvent::_InternalParse(const char* ptr, ::_pbi::ParseCon
} else } else
goto handle_unusual; goto handle_unusual;
continue; continue;
// bool wasSignedOut = 2;
case 2:
if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
_impl_.wassignedout_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
CHK_(ptr);
} else
goto handle_unusual;
continue;
default: default:
goto handle_unusual; goto handle_unusual;
} // switch } // switch
@ -7510,6 +7498,12 @@ uint8_t* LoginFinishedEvent::_InternalSerialize(
1, this->_internal_userid(), target); 1, this->_internal_userid(), target);
} }
// bool wasSignedOut = 2;
if (this->_internal_wassignedout() != 0) {
target = stream->EnsureSpace(target);
target = ::_pbi::WireFormatLite::WriteBoolToArray(2, this->_internal_wassignedout(), target);
}
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
_internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
@ -7533,6 +7527,11 @@ size_t LoginFinishedEvent::ByteSizeLong() const {
this->_internal_userid()); this->_internal_userid());
} }
// bool wasSignedOut = 2;
if (this->_internal_wassignedout() != 0) {
total_size += 1 + 1;
}
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
} }
@ -7554,6 +7553,9 @@ void LoginFinishedEvent::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, con
if (!from._internal_userid().empty()) { if (!from._internal_userid().empty()) {
_this->_internal_set_userid(from._internal_userid()); _this->_internal_set_userid(from._internal_userid());
} }
if (from._internal_wassignedout() != 0) {
_this->_internal_set_wassignedout(from._internal_wassignedout());
}
_this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
} }
@ -7577,6 +7579,7 @@ void LoginFinishedEvent::InternalSwap(LoginFinishedEvent* other) {
&_impl_.userid_, lhs_arena, &_impl_.userid_, lhs_arena,
&other->_impl_.userid_, rhs_arena &other->_impl_.userid_, rhs_arena
); );
swap(_impl_.wassignedout_, other->_impl_.wassignedout_);
} }
::PROTOBUF_NAMESPACE_ID::Metadata LoginFinishedEvent::GetMetadata() const { ::PROTOBUF_NAMESPACE_ID::Metadata LoginFinishedEvent::GetMetadata() const {

View File

@ -1668,18 +1668,17 @@ class User final :
// accessors ------------------------------------------------------- // accessors -------------------------------------------------------
enum : int { enum : int {
kAddressesFieldNumber = 10, kAddressesFieldNumber = 9,
kIdFieldNumber = 1, kIdFieldNumber = 1,
kUsernameFieldNumber = 2, kUsernameFieldNumber = 2,
kAvatarTextFieldNumber = 3, kAvatarTextFieldNumber = 3,
kPasswordFieldNumber = 9, kPasswordFieldNumber = 8,
kStateFieldNumber = 4, kStateFieldNumber = 4,
kSplitModeFieldNumber = 5, kSplitModeFieldNumber = 5,
kSetupGuideSeenFieldNumber = 6, kUsedBytesFieldNumber = 6,
kUsedBytesFieldNumber = 7, kTotalBytesFieldNumber = 7,
kTotalBytesFieldNumber = 8,
}; };
// repeated string addresses = 10; // repeated string addresses = 9;
int addresses_size() const; int addresses_size() const;
private: private:
int _internal_addresses_size() const; int _internal_addresses_size() const;
@ -1745,7 +1744,7 @@ class User final :
std::string* _internal_mutable_avatartext(); std::string* _internal_mutable_avatartext();
public: public:
// bytes password = 9; // bytes password = 8;
void clear_password(); void clear_password();
const std::string& password() const; const std::string& password() const;
template <typename ArgT0 = const std::string&, typename... ArgT> template <typename ArgT0 = const std::string&, typename... ArgT>
@ -1777,16 +1776,7 @@ class User final :
void _internal_set_splitmode(bool value); void _internal_set_splitmode(bool value);
public: public:
// bool setupGuideSeen = 6; // int64 usedBytes = 6;
void clear_setupguideseen();
bool setupguideseen() const;
void set_setupguideseen(bool value);
private:
bool _internal_setupguideseen() const;
void _internal_set_setupguideseen(bool value);
public:
// int64 usedBytes = 7;
void clear_usedbytes(); void clear_usedbytes();
int64_t usedbytes() const; int64_t usedbytes() const;
void set_usedbytes(int64_t value); void set_usedbytes(int64_t value);
@ -1795,7 +1785,7 @@ class User final :
void _internal_set_usedbytes(int64_t value); void _internal_set_usedbytes(int64_t value);
public: public:
// int64 totalBytes = 8; // int64 totalBytes = 7;
void clear_totalbytes(); void clear_totalbytes();
int64_t totalbytes() const; int64_t totalbytes() const;
void set_totalbytes(int64_t value); void set_totalbytes(int64_t value);
@ -1819,7 +1809,6 @@ class User final :
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr password_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr password_;
int state_; int state_;
bool splitmode_; bool splitmode_;
bool setupguideseen_;
int64_t usedbytes_; int64_t usedbytes_;
int64_t totalbytes_; int64_t totalbytes_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
@ -4803,6 +4792,7 @@ class LoginFinishedEvent final :
enum : int { enum : int {
kUserIDFieldNumber = 1, kUserIDFieldNumber = 1,
kWasSignedOutFieldNumber = 2,
}; };
// string userID = 1; // string userID = 1;
void clear_userid(); void clear_userid();
@ -4818,6 +4808,15 @@ class LoginFinishedEvent final :
std::string* _internal_mutable_userid(); std::string* _internal_mutable_userid();
public: public:
// bool wasSignedOut = 2;
void clear_wassignedout();
bool wassignedout() const;
void set_wassignedout(bool value);
private:
bool _internal_wassignedout() const;
void _internal_set_wassignedout(bool value);
public:
// @@protoc_insertion_point(class_scope:grpc.LoginFinishedEvent) // @@protoc_insertion_point(class_scope:grpc.LoginFinishedEvent)
private: private:
class _Internal; class _Internal;
@ -4827,6 +4826,7 @@ class LoginFinishedEvent final :
typedef void DestructorSkippable_; typedef void DestructorSkippable_;
struct Impl_ { struct Impl_ {
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr userid_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr userid_;
bool wassignedout_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
}; };
union { Impl_ _impl_; }; union { Impl_ _impl_; };
@ -10616,27 +10616,7 @@ inline void User::set_splitmode(bool value) {
// @@protoc_insertion_point(field_set:grpc.User.splitMode) // @@protoc_insertion_point(field_set:grpc.User.splitMode)
} }
// bool setupGuideSeen = 6; // int64 usedBytes = 6;
inline void User::clear_setupguideseen() {
_impl_.setupguideseen_ = false;
}
inline bool User::_internal_setupguideseen() const {
return _impl_.setupguideseen_;
}
inline bool User::setupguideseen() const {
// @@protoc_insertion_point(field_get:grpc.User.setupGuideSeen)
return _internal_setupguideseen();
}
inline void User::_internal_set_setupguideseen(bool value) {
_impl_.setupguideseen_ = value;
}
inline void User::set_setupguideseen(bool value) {
_internal_set_setupguideseen(value);
// @@protoc_insertion_point(field_set:grpc.User.setupGuideSeen)
}
// int64 usedBytes = 7;
inline void User::clear_usedbytes() { inline void User::clear_usedbytes() {
_impl_.usedbytes_ = int64_t{0}; _impl_.usedbytes_ = int64_t{0};
} }
@ -10656,7 +10636,7 @@ inline void User::set_usedbytes(int64_t value) {
// @@protoc_insertion_point(field_set:grpc.User.usedBytes) // @@protoc_insertion_point(field_set:grpc.User.usedBytes)
} }
// int64 totalBytes = 8; // int64 totalBytes = 7;
inline void User::clear_totalbytes() { inline void User::clear_totalbytes() {
_impl_.totalbytes_ = int64_t{0}; _impl_.totalbytes_ = int64_t{0};
} }
@ -10676,7 +10656,7 @@ inline void User::set_totalbytes(int64_t value) {
// @@protoc_insertion_point(field_set:grpc.User.totalBytes) // @@protoc_insertion_point(field_set:grpc.User.totalBytes)
} }
// bytes password = 9; // bytes password = 8;
inline void User::clear_password() { inline void User::clear_password() {
_impl_.password_.ClearToEmpty(); _impl_.password_.ClearToEmpty();
} }
@ -10726,7 +10706,7 @@ inline void User::set_allocated_password(std::string* password) {
// @@protoc_insertion_point(field_set_allocated:grpc.User.password) // @@protoc_insertion_point(field_set_allocated:grpc.User.password)
} }
// repeated string addresses = 10; // repeated string addresses = 9;
inline int User::_internal_addresses_size() const { inline int User::_internal_addresses_size() const {
return _impl_.addresses_.size(); return _impl_.addresses_.size();
} }
@ -12904,6 +12884,26 @@ inline void LoginFinishedEvent::set_allocated_userid(std::string* userid) {
// @@protoc_insertion_point(field_set_allocated:grpc.LoginFinishedEvent.userID) // @@protoc_insertion_point(field_set_allocated:grpc.LoginFinishedEvent.userID)
} }
// bool wasSignedOut = 2;
inline void LoginFinishedEvent::clear_wassignedout() {
_impl_.wassignedout_ = false;
}
inline bool LoginFinishedEvent::_internal_wassignedout() const {
return _impl_.wassignedout_;
}
inline bool LoginFinishedEvent::wassignedout() const {
// @@protoc_insertion_point(field_get:grpc.LoginFinishedEvent.wasSignedOut)
return _internal_wassignedout();
}
inline void LoginFinishedEvent::_internal_set_wassignedout(bool value) {
_impl_.wassignedout_ = value;
}
inline void LoginFinishedEvent::set_wassignedout(bool value) {
_internal_set_wassignedout(value);
// @@protoc_insertion_point(field_set:grpc.LoginFinishedEvent.wasSignedOut)
}
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// UpdateEvent // UpdateEvent

View File

@ -54,7 +54,6 @@ void User::update(User const &user)
this->setAvatarText(user.avatarText()); this->setAvatarText(user.avatarText());
this->setState(user.state()); this->setState(user.state());
this->setSplitMode(user.splitMode()); this->setSplitMode(user.splitMode());
this->setSetupGuideSeen(user.setupGuideSeen());
this->setUsedBytes(user.usedBytes()); this->setUsedBytes(user.usedBytes());
this->setTotalBytes(user.totalBytes()); this->setTotalBytes(user.totalBytes());
} }
@ -260,28 +259,6 @@ void User::setSplitMode(bool splitMode)
} }
//****************************************************************************************************************************************************
/// \return The 'Setup Guide Seen' status.
//****************************************************************************************************************************************************
bool User::setupGuideSeen() const
{
return setupGuideSeen_;
}
//****************************************************************************************************************************************************
/// \param[in] setupGuideSeen The 'Setup Guide Seen' status.
//****************************************************************************************************************************************************
void User::setSetupGuideSeen(bool setupGuideSeen)
{
if (setupGuideSeen == setupGuideSeen_)
return;
setupGuideSeen_ = setupGuideSeen;
emit setupGuideSeenChanged(setupGuideSeen_);
}
//**************************************************************************************************************************************************** //****************************************************************************************************************************************************
/// \return The used bytes. /// \return The used bytes.
//**************************************************************************************************************************************************** //****************************************************************************************************************************************************

View File

@ -98,7 +98,6 @@ public:
Q_PROPERTY(QString avatarText READ avatarText WRITE setAvatarText NOTIFY avatarTextChanged) Q_PROPERTY(QString avatarText READ avatarText WRITE setAvatarText NOTIFY avatarTextChanged)
Q_PROPERTY(UserState state READ state WRITE setState NOTIFY stateChanged) Q_PROPERTY(UserState state READ state WRITE setState NOTIFY stateChanged)
Q_PROPERTY(bool splitMode READ splitMode WRITE setSplitMode NOTIFY splitModeChanged) Q_PROPERTY(bool splitMode READ splitMode WRITE setSplitMode NOTIFY splitModeChanged)
Q_PROPERTY(bool setupGuideSeen READ setupGuideSeen WRITE setSetupGuideSeen NOTIFY setupGuideSeenChanged)
Q_PROPERTY(float usedBytes READ usedBytes WRITE setUsedBytes NOTIFY usedBytesChanged) Q_PROPERTY(float usedBytes READ usedBytes WRITE setUsedBytes NOTIFY usedBytesChanged)
Q_PROPERTY(float totalBytes READ totalBytes WRITE setTotalBytes NOTIFY totalBytesChanged) Q_PROPERTY(float totalBytes READ totalBytes WRITE setTotalBytes NOTIFY totalBytesChanged)
@ -116,8 +115,6 @@ public:
void setState(UserState state); void setState(UserState state);
bool splitMode() const; bool splitMode() const;
void setSplitMode(bool splitMode); void setSplitMode(bool splitMode);
bool setupGuideSeen() const;
void setSetupGuideSeen(bool setupGuideSeen);
float usedBytes() const; float usedBytes() const;
void setUsedBytes(float usedBytes); void setUsedBytes(float usedBytes);
float totalBytes() const; float totalBytes() const;
@ -133,7 +130,6 @@ signals:
void loggedInChanged(bool loggedIn); void loggedInChanged(bool loggedIn);
void stateChanged(UserState state); void stateChanged(UserState state);
void splitModeChanged(bool splitMode); void splitModeChanged(bool splitMode);
void setupGuideSeenChanged(bool seen);
void usedBytesChanged(float byteCount); void usedBytesChanged(float byteCount);
void totalBytesChanged(float byteCount); void totalBytesChanged(float byteCount);
void toggleSplitModeFinished(); void toggleSplitModeFinished();
@ -149,7 +145,6 @@ private: // data members.
QString avatarText_; ///< The avatar text (i.e. initials of the user) QString avatarText_; ///< The avatar text (i.e. initials of the user)
UserState state_ { UserState::SignedOut }; ///< The state of the user UserState state_ { UserState::SignedOut }; ///< The state of the user
bool splitMode_ { false }; ///< Is split mode active. bool splitMode_ { false }; ///< Is split mode active.
bool setupGuideSeen_ { false }; ///< Has the setup guide been seen.
float usedBytes_ { 0.0f }; ///< The storage used by the user. float usedBytes_ { 0.0f }; ///< The storage used by the user.
float totalBytes_ { 1.0f }; ///< The storage quota of the user. float totalBytes_ { 1.0f }; ///< The storage quota of the user.
}; };

File diff suppressed because it is too large Load Diff

View File

@ -185,11 +185,10 @@ message User {
string avatarText = 3; string avatarText = 3;
UserState state = 4; UserState state = 4;
bool splitMode = 5; bool splitMode = 5;
bool setupGuideSeen = 6; int64 usedBytes = 6;
int64 usedBytes = 7; int64 totalBytes = 7;
int64 totalBytes = 8; bytes password = 8;
bytes password = 9; repeated string addresses = 9;
repeated string addresses = 10;
} }
message UserSplitModeRequest { message UserSplitModeRequest {
@ -290,6 +289,7 @@ message LoginTwoPasswordsRequestedEvent {}
message LoginFinishedEvent { message LoginFinishedEvent {
string userID = 1; string userID = 1;
bool wasSignedOut = 2;
} }
//********************************************************** //**********************************************************

View File

@ -57,8 +57,8 @@ func NewLoginTwoPasswordsRequestedEvent() *StreamEvent {
return loginEvent(&LoginEvent{Event: &LoginEvent_TwoPasswordRequested{}}) return loginEvent(&LoginEvent{Event: &LoginEvent_TwoPasswordRequested{}})
} }
func NewLoginFinishedEvent(userID string) *StreamEvent { func NewLoginFinishedEvent(userID string, wasSignedOut bool) *StreamEvent {
return loginEvent(&LoginEvent{Event: &LoginEvent_Finished{Finished: &LoginFinishedEvent{UserID: userID}}}) return loginEvent(&LoginEvent{Event: &LoginEvent_Finished{Finished: &LoginFinishedEvent{UserID: userID, WasSignedOut: wasSignedOut}}})
} }
func NewLoginAlreadyLoggedInEvent(userID string) *StreamEvent { func NewLoginAlreadyLoggedInEvent(userID string) *StreamEvent {

View File

@ -390,6 +390,8 @@ func (s *Service) loginClean() {
func (s *Service) finishLogin() { func (s *Service) finishLogin() {
defer s.loginClean() defer s.loginClean()
wasSignedOut := s.bridge.HasUser(s.auth.UserID)
if len(s.password) == 0 || s.auth.UID == "" || s.authClient == nil { if len(s.password) == 0 || s.auth.UID == "" || s.authClient == nil {
s.log. s.log.
WithField("hasPass", len(s.password) != 0). WithField("hasPass", len(s.password) != 0).
@ -415,7 +417,7 @@ func (s *Service) finishLogin() {
s.log.WithField("userID", userID).Debug("Login finished") s.log.WithField("userID", userID).Debug("Login finished")
_ = s.SendEvent(NewLoginFinishedEvent(userID)) _ = s.SendEvent(NewLoginFinishedEvent(userID, wasSignedOut))
} }
func (s *Service) waitForUserChangeDone(eventCh <-chan events.Event, userID string) { func (s *Service) waitForUserChangeDone(eventCh <-chan events.Event, userID string) {

View File

@ -126,7 +126,7 @@ func (s *Service) StartEventTest() error { //nolint:funlen
NewLoginError(LoginErrorType_FREE_USER, "error"), NewLoginError(LoginErrorType_FREE_USER, "error"),
NewLoginTfaRequestedEvent(dummyAddress), NewLoginTfaRequestedEvent(dummyAddress),
NewLoginTwoPasswordsRequestedEvent(), NewLoginTwoPasswordsRequestedEvent(),
NewLoginFinishedEvent("userID"), NewLoginFinishedEvent("userID", false),
NewLoginAlreadyLoggedInEvent("userID"), NewLoginAlreadyLoggedInEvent("userID"),
// update // update

View File

@ -66,7 +66,6 @@ func grpcUserFromInfo(user bridge.UserInfo) *User {
AvatarText: getInitials(user.Username), AvatarText: getInitials(user.Username),
State: userStateToGrpc(user.State), State: userStateToGrpc(user.State),
SplitMode: user.AddressMode == vault.SplitMode, SplitMode: user.AddressMode == vault.SplitMode,
SetupGuideSeen: true, // users listed have already seen the setup guide.
UsedBytes: int64(user.UsedSpace), UsedBytes: int64(user.UsedSpace),
TotalBytes: int64(user.MaxSpace), TotalBytes: int64(user.MaxSpace),
Password: user.BridgePass, Password: user.BridgePass,