wip: server history support

This commit is contained in:
Johnny Almonte
2020-07-13 03:18:49 -04:00
parent a81e2f02e5
commit 50f45547a4
6 changed files with 92 additions and 57 deletions

View File

@@ -44,7 +44,7 @@ import {
PrivilegesAuthModal, PrivilegesAuthModal,
PrivilegesManagementModal, PrivilegesManagementModal,
RevisionPreviewModal, RevisionPreviewModal,
SessionHistoryMenu, HistoryMenu,
SyncResolutionMenu SyncResolutionMenu
} from './directives/views'; } from './directives/views';
@@ -100,7 +100,7 @@ angular
.directive('privilegesAuthModal', () => new PrivilegesAuthModal()) .directive('privilegesAuthModal', () => new PrivilegesAuthModal())
.directive('privilegesManagementModal', () => new PrivilegesManagementModal()) .directive('privilegesManagementModal', () => new PrivilegesManagementModal())
.directive('revisionPreviewModal', () => new RevisionPreviewModal()) .directive('revisionPreviewModal', () => new RevisionPreviewModal())
.directive('sessionHistoryMenu', () => new SessionHistoryMenu()) .directive('historyMenu', () => new HistoryMenu())
.directive('syncResolutionMenu', () => new SyncResolutionMenu()); .directive('syncResolutionMenu', () => new SyncResolutionMenu());
// Filters // Filters

View File

@@ -1,21 +1,22 @@
import { WebDirective } from './../../types'; import { WebDirective } from '../../types';
import { WebApplication } from '@/ui_models/application'; import { WebApplication } from '@/ui_models/application';
import template from '%/directives/session-history-menu.pug'; import template from '%/directives/history-menu.pug';
import { SNItem, ItemHistoryEntry, ItemHistory } from '@node_modules/snjs/dist/@types'; import { SNItem, ItemHistoryEntry, ItemHistory } from '@node_modules/snjs/dist/@types';
import { PayloadSource } from 'snjs';
interface SessionHistoryScope { interface HistoryScope {
application: WebApplication application: WebApplication
item: SNItem item: SNItem
} }
class SessionHistoryMenuCtrl implements SessionHistoryScope { class HistoryMenuCtrl implements HistoryScope {
$timeout: ng.ITimeoutService $timeout: ng.ITimeoutService
diskEnabled = false diskEnabled = false
autoOptimize = false autoOptimize = false
fetchingServerHistory = false
application!: WebApplication application!: WebApplication
item!: SNItem item!: SNItem
entries!: ItemHistoryEntry[]
history!: ItemHistory history!: ItemHistory
/* @ngInject */ /* @ngInject */
@@ -31,12 +32,8 @@ class SessionHistoryMenuCtrl implements SessionHistoryScope {
this.autoOptimize = this.application.historyManager!.isAutoOptimizeEnabled(); this.autoOptimize = this.application.historyManager!.isAutoOptimizeEnabled();
} }
reloadHistory() { async reloadHistory() {
const history = this.application.historyManager!.historyForItem(this.item); this.history = await this.application.historyManager!.historyForItem(this.item);
this.entries = history.entries.slice(0).sort((a, b) => {
return a.payload.updated_at! < b.payload.updated_at! ? 1 : -1;
});
this.history = history;
} }
openRevision(revision: ItemHistoryEntry) { openRevision(revision: ItemHistoryEntry) {
@@ -93,6 +90,18 @@ class SessionHistoryMenuCtrl implements SessionHistoryScope {
); );
} }
get historySessionEntries() {
return this.history.entries.filter((entry) => {
return entry.payload.source === PayloadSource.SessionHistory;
});
}
get historyServerEntries() {
return this.history.entries.filter((entry) => {
return entry.payload.source === PayloadSource.ServerHistory;
});
}
toggleDiskSaving() { toggleDiskSaving() {
const run = () => { const run = () => {
this.application.historyManager!.toggleDiskSaving().then(() => { this.application.historyManager!.toggleDiskSaving().then(() => {
@@ -125,14 +134,20 @@ class SessionHistoryMenuCtrl implements SessionHistoryScope {
}); });
}); });
} }
fetchServerHistory() {
this.fetchingServerHistory = true;
this.reloadHistory();
this.fetchingServerHistory = false;
}
} }
export class SessionHistoryMenu extends WebDirective { export class HistoryMenu extends WebDirective {
constructor() { constructor() {
super(); super();
this.restrict = 'E'; this.restrict = 'E';
this.template = template; this.template = template;
this.controller = SessionHistoryMenuCtrl; this.controller = HistoryMenuCtrl;
this.controllerAs = 'ctrl'; this.controllerAs = 'ctrl';
this.bindToController = true; this.bindToController = true;
this.scope = { this.scope = {

View File

@@ -11,5 +11,5 @@ export { PermissionsModal } from './permissionsModal';
export { PrivilegesAuthModal } from './privilegesAuthModal'; export { PrivilegesAuthModal } from './privilegesAuthModal';
export { PrivilegesManagementModal } from './privilegesManagementModal'; export { PrivilegesManagementModal } from './privilegesManagementModal';
export { RevisionPreviewModal } from './revisionPreviewModal'; export { RevisionPreviewModal } from './revisionPreviewModal';
export { SessionHistoryMenu } from './sessionHistoryMenu'; export { HistoryMenu } from './historyMenu';
export { SyncResolutionMenu } from './syncResolutionMenu'; export { SyncResolutionMenu } from './syncResolutionMenu';

View File

@@ -183,14 +183,14 @@
application='self.application' application='self.application'
) )
.sk-app-bar-item( .sk-app-bar-item(
click-outside=`self.setMenuState('showSessionHistory', false)`, click-outside=`self.setMenuState('showHistory', false)`,
is-open='self.state.showSessionHistory', is-open='self.state.showHistory',
ng-click="self.toggleMenu('showSessionHistory')" ng-click="self.toggleMenu('showHistory')"
) )
.sk-label Session History .sk-label History
session-history-menu( history-menu(
item='self.note', item='self.note',
ng-if='self.state.showSessionHistory', ng-if='self.state.showHistory',
application='self.application' application='self.application'
) )
#editor-content.editor-content(ng-if='!self.note.errorDecrypting') #editor-content.editor-content(ng-if='!self.note.errorDecrypting')

View File

@@ -0,0 +1,55 @@
#history-menu.sn-component
.sk-menu-panel.dropdown-menu
.sk-menu-panel-header
.sk-menu-panel-header-title Session
.sk-menu-panel-header-subtitle {{ctrl.historySessionEntries.length || 'No'}} revisions
a.sk-a.info.sk-h5(
ng-click='ctrl.showSessionOptions = !ctrl.showSessionOptions; $event.stopPropagation();'
) Options
div(ng-if='ctrl.showSessionOptions')
menu-row(
action='ctrl.clearItemHistory()'
label="'Clear note local history'"
)
menu-row(
action='ctrl.clearAllHistory()'
label="'Clear all local history'"
)
menu-row(
action='ctrl.toggleAutoOptimize()'
label="(ctrl.autoOptimize ? 'Disable' : 'Enable') + ' auto cleanup'")
.sk-sublabel
| Automatically cleans up small revisions to conserve space.
menu-row(
action='ctrl.toggleDiskSaving()'
label="(ctrl.diskEnabled ? 'Disable' : 'Enable') + ' saving history to disk'"
)
.sk-sublabel
| Saving to disk is not recommended. Decreases performance and increases app
| loading time and memory footprint.
menu-row(
ng-repeat='revision in ctrl.historySessionEntries track by $index'
action='ctrl.openRevision(revision);'
label='revision.previewTitle()'
)
.sk-sublabel.opaque(ng-class='ctrl.classForRevision(revision)')
| {{revision.previewSubTitle()}}
.sk-menu-panel-header
.sk-menu-panel-header-title Server
.sk-menu-panel-header-subtitle {{ctrl.historyServerEntries.length || 'No'}} revisions
a.sk-a.info.sk-h5(
ng-click='ctrl.showServerOptions = !ctrl.showServerOptions; $event.stopPropagation();'
) Options
div(ng-if='ctrl.showServerOptions')
menu-row(
action='ctrl.fetchServerHistory()'
label="(ctrl.fetchingServerHistory ? 'Refreshing...' : 'Refresh')")
.sk-sublabel
| Fetch history from server.
menu-row(
ng-repeat='revision in ctrl.historyServerEntries track by $index'
action='ctrl.openRevision(revision);'
label='revision.previewTitle()'
)
.sk-sublabel.opaque(ng-class='ctrl.classForRevision(revision)')
| {{revision.previewSubTitle()}}

View File

@@ -1,35 +0,0 @@
#session-history-menu.sn-component
.sk-menu-panel.dropdown-menu
.sk-menu-panel-header
.sk-menu-panel-header-title {{ctrl.history.entries.length || 'No'}} revisions
a.sk-a.info.sk-h5(
ng-click='ctrl.showOptions = !ctrl.showOptions; $event.stopPropagation();'
) Options
div(ng-if='ctrl.showOptions')
menu-row(
action='ctrl.clearItemHistory()'
label="'Clear note local history'"
)
menu-row(
action='ctrl.clearAllHistory()'
label="'Clear all local history'"
)
menu-row(
action='ctrl.toggleAutoOptimize()'
label="(ctrl.autoOptimize ? 'Disable' : 'Enable') + ' auto cleanup'")
.sk-sublabel
| Automatically cleans up small revisions to conserve space.
menu-row(
action='ctrl.toggleDiskSaving()'
label="(ctrl.diskEnabled ? 'Disable' : 'Enable') + ' saving history to disk'"
)
.sk-sublabel
| Saving to disk is not recommended. Decreases performance and increases app
| loading time and memory footprint.
menu-row(
ng-repeat='revision in ctrl.entries'
action='ctrl.openRevision(revision);'
label='revision.previewTitle()'
)
.sk-sublabel.opaque(ng-class='ctrl.classForRevision(revision)')
| {{revision.previewSubTitle()}}