diff --git a/Gemfile b/Gemfile index 3c2ecc4ed..51c76a4c7 100644 --- a/Gemfile +++ b/Gemfile @@ -48,6 +48,6 @@ group :development, :test do end gem "dogstatsd-ruby", "~> 4.8" -gem "ddtrace", "~> 0.38.0" +gem "ddtrace", "~> 0.40" gem "lograge", "~> 0.11.2" diff --git a/Gemfile.lock b/Gemfile.lock index f8e71596f..e2d07dfa4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -67,7 +67,7 @@ GEM concurrent-ruby (1.1.5) connection_pool (2.2.2) crass (1.0.6) - ddtrace (0.38.0) + ddtrace (0.40.0) msgpack dogstatsd-ruby (4.8.1) dotenv (2.7.5) @@ -212,7 +212,7 @@ DEPENDENCIES capistrano-rails capistrano-rvm capistrano-sidekiq - ddtrace (~> 0.38.0) + ddtrace (~> 0.40) dogstatsd-ruby (~> 4.8) dotenv-rails haml diff --git a/app/assets/javascripts/strings.ts b/app/assets/javascripts/strings.ts index b368b1a0e..88261996d 100644 --- a/app/assets/javascripts/strings.ts +++ b/app/assets/javascripts/strings.ts @@ -64,3 +64,11 @@ export const STRING_CONFIRM_APP_QUIT_DURING_PASSCODE_CHANGE = export const STRING_CONFIRM_APP_QUIT_DURING_PASSCODE_REMOVAL = "A passcode removal is in progress. You may lose data if you quit the app. " + "Are you sure you want to quit?" + +export const STRING_UPGRADE_ACCOUNT_CONFIRM_TITLE = 'Encryption upgrade available'; +export const STRING_UPGRADE_ACCOUNT_CONFIRM_TEXT = + 'Encryption version 004 is available for your account and local data storage. ' + + 'This version strengthens the encryption algorithms for your account and ' + + 'disk use. To learn more about this upgrade, visit our ' + + 'Security Upgrade page.'; +export const STRING_UPGRADE_ACCOUNT_CONFIRM_BUTTON = 'Upgrade'; diff --git a/app/assets/javascripts/views/footer/footer_view.ts b/app/assets/javascripts/views/footer/footer_view.ts index 6f711d7b5..b42deab33 100644 --- a/app/assets/javascripts/views/footer/footer_view.ts +++ b/app/assets/javascripts/views/footer/footer_view.ts @@ -19,9 +19,13 @@ import { AppStateEvent, EventSource } from '@/ui_models/app_state'; import { STRING_GENERIC_SYNC_ERROR, STRING_NEW_UPDATE_READY, - STRING_CONFIRM_APP_QUIT_DURING_UPGRADE + STRING_CONFIRM_APP_QUIT_DURING_UPGRADE, + STRING_UPGRADE_ACCOUNT_CONFIRM_TEXT, + STRING_UPGRADE_ACCOUNT_CONFIRM_TITLE, + STRING_UPGRADE_ACCOUNT_CONFIRM_BUTTON, } from '@/strings'; import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; +import { confirmDialog } from '@/services/alertService'; /** * Disable before production release. @@ -337,9 +341,15 @@ class FooterViewCtrl extends PureViewCtrl<{}, { } async openSecurityUpdate() { - preventRefreshing(STRING_CONFIRM_APP_QUIT_DURING_UPGRADE, async () => { - await this.application.performProtocolUpgrade(); - }); + if (await confirmDialog({ + title: STRING_UPGRADE_ACCOUNT_CONFIRM_TITLE, + text: STRING_UPGRADE_ACCOUNT_CONFIRM_TEXT, + confirmButtonText: STRING_UPGRADE_ACCOUNT_CONFIRM_BUTTON, + })) { + preventRefreshing(STRING_CONFIRM_APP_QUIT_DURING_UPGRADE, async () => { + await this.application.performProtocolUpgrade(); + }); + } } findErrors() { diff --git a/app/assets/javascripts/views/notes/notes-view.pug b/app/assets/javascripts/views/notes/notes-view.pug index 46ae7b372..3ddad8dd6 100644 --- a/app/assets/javascripts/views/notes/notes-view.pug +++ b/app/assets/javascripts/views/notes/notes-view.pug @@ -95,8 +95,11 @@ label="'Date'" ) p.empty-notes-list.faded( - ng-if="self.state.localDataLoaded && !self.state.renderedNotes.length" + ng-if="self.state.completedFullSync && !self.state.renderedNotes.length" ) No notes. + p.empty-notes-list.faded( + ng-if="!self.state.completedFullSync && !self.state.renderedNotes.length" + ) Loading notes… .scrollable(ng-if="self.state.renderedNotes.length") #notes-scrollable.infinite-scroll( can-load='true', diff --git a/app/assets/javascripts/views/notes/notes_view.ts b/app/assets/javascripts/views/notes/notes_view.ts index 65b006e63..062aeeb3a 100644 --- a/app/assets/javascripts/views/notes/notes_view.ts +++ b/app/assets/javascripts/views/notes/notes_view.ts @@ -34,7 +34,7 @@ type NotesState = { hideDate?: boolean noteFilter: { text: string } mutable: { showMenu: boolean } - localDataLoaded: boolean + completedFullSync: boolean [WebPrefKey.TagsPanelWidth]?: number [WebPrefKey.NotesPanelWidth]?: number [WebPrefKey.EditorWidth]?: number @@ -127,7 +127,7 @@ class NotesViewCtrl extends PureViewCtrl<{}, NotesState> { mutable: { showMenu: false }, noteFilter: { text: '' }, panelTitle: '', - localDataLoaded: false, + completedFullSync: false, }; } @@ -167,6 +167,9 @@ class NotesViewCtrl extends PureViewCtrl<{}, NotesState> { case ApplicationEvent.SignedIn: this.appState.closeAllEditors(); this.selectFirstNote(); + this.setState({ + completedFullSync: false, + }); break; case ApplicationEvent.CompletedFullSync: this.getMostValidNotes().then((notes) => { @@ -174,10 +177,8 @@ class NotesViewCtrl extends PureViewCtrl<{}, NotesState> { this.createPlaceholderNote(); } }); - break; - case ApplicationEvent.LocalDataLoaded: this.setState({ - localDataLoaded: true, + completedFullSync: true, }); break; } diff --git a/app/assets/stylesheets/_stylekit-sub.scss b/app/assets/stylesheets/_stylekit-sub.scss index 7867e66ac..33003133c 100644 --- a/app/assets/stylesheets/_stylekit-sub.scss +++ b/app/assets/stylesheets/_stylekit-sub.scss @@ -70,3 +70,7 @@ button.sk-button { border: none; } + +a { + color: var(--sn-stylekit-info-color); +}