diff options
author | Marius David Wieschollek <passwords.public@mdns.eu> | 2021-03-13 18:54:51 +0300 |
---|---|---|
committer | Marius David Wieschollek <passwords.public@mdns.eu> | 2021-03-13 18:54:51 +0300 |
commit | 1c806857b4edffafea26cfa0603dcf39495ee358 (patch) | |
tree | c7847ad3dab84a7ad2eedc183e1914097664b3e8 /src/js | |
parent | d17aadcb31ed5960416d341523386b87ff00cbbd (diff) |
[#60] Add menu option to open website
[#102] Add menu option to delete passwords
Signed-off-by: Marius David Wieschollek <passwords.public@mdns.eu>
Diffstat (limited to 'src/js')
-rw-r--r-- | src/js/Controller/Password/Delete.js | 75 | ||||
-rw-r--r-- | src/js/Controller/Tab/Create.js | 24 | ||||
-rw-r--r-- | src/js/Manager/ControllerManager.js | 14 |
3 files changed, 113 insertions, 0 deletions
diff --git a/src/js/Controller/Password/Delete.js b/src/js/Controller/Password/Delete.js new file mode 100644 index 0000000..04c8bf6 --- /dev/null +++ b/src/js/Controller/Password/Delete.js @@ -0,0 +1,75 @@ +import AbstractController from '@js/Controller/AbstractController'; +import SearchIndex from '@js/Search/Index/SearchIndex'; +import ApiRepository from "@js/Repositories/ApiRepository"; +import ToastService from "@js/Services/ToastService"; +import ErrorManager from "@js/Manager/ErrorManager"; + +export default class Delete extends AbstractController { + + async execute(message, reply) { + let {id} = message.getPayload(); + + /** @type {EnhancedPassword} **/ + let model = SearchIndex.getItem(id); + + if(model !== null && !model.isTrashed()) { + SearchIndex.removeItem(model); + let api = /** @type {PasswordsClient} **/ await ApiRepository.findById(model.getServer().getId()); + let repository = /** @type {PasswordRepository} **/ api.getInstance('repository.password'); + await repository.delete(model); + + reply.setPayload({success: true}); + if(!model.getHidden()) { + this._crateTrashedNotification(repository, model) + .catch(ErrorManager.catch); + } else { + this._restoreOrDelete(repository, model); + } + } else { + reply.setPayload({success: false}); + } + } + + /** + * + * @param {PasswordRepository} repository + * @param {EnhancedPassword} model + * @returns {Promise<Boolean>} + * @private + */ + async _crateTrashedNotification(repository, model) { + let toast = { + type : model.getHidden() ? 'warning':'info', + message : [`ToastPassword${model.getHidden() ? 'Hidden':''}Trashed`, model.getLabel()], + closeable: true, + options : {restore: 'ToastPasswordTrashedRestore', close: 'ButtonClose'}, + ttl : model.getHidden() ? 10:5 + }, + response = await ToastService.create(toast); + + if(response === 'restore') { + await repository.restore(model); + SearchIndex.addItem(model); + ToastService + .success(['ToastPasswordRestored', model.getLabel()]) + .catch(ErrorManager.catch); + + return true; + } + + return false; + } + + /** + * + * @param {PasswordRepository} repository + * @param {EnhancedPassword} model + * @returns {Promise<void>} + * @private + */ + async _restoreOrDelete(repository, model) { + if(!await this._crateTrashedNotification(repository, model)) { + await repository.delete(model); + } + } +}
\ No newline at end of file diff --git a/src/js/Controller/Tab/Create.js b/src/js/Controller/Tab/Create.js new file mode 100644 index 0000000..a62c2ce --- /dev/null +++ b/src/js/Controller/Tab/Create.js @@ -0,0 +1,24 @@ +import AbstractController from '@js/Controller/AbstractController'; +import SystemService from '@js/Services/SystemService'; +import ErrorManager from '@js/Manager/ErrorManager'; + +export default class Create extends AbstractController { + + /** + * + * @param {Message} message + * @param {Message} reply + */ + async execute(message, reply) { + let api = SystemService.getBrowserApi(); + + try { + let payload = message.getPayload(); + await api.tabs.create({url:payload.url}); + reply.setPayload({success: true}); + } catch(e) { + ErrorManager.logError(e); + reply.setPayload({success: false}); + } + } +}
\ No newline at end of file diff --git a/src/js/Manager/ControllerManager.js b/src/js/Manager/ControllerManager.js index 61e683a..51e31fa 100644 --- a/src/js/Manager/ControllerManager.js +++ b/src/js/Manager/ControllerManager.js @@ -61,6 +61,13 @@ class ControllerManager { } ); MessageService.listen( + 'password.delete', + async (message, reply) => { + let module = await import(/* webpackChunkName: "PasswordDelete" */ '@js/Controller/Password/Delete'); + await this._executeController(module, message, reply); + } + ); + MessageService.listen( 'folder.list', async (message, reply) => { let module = await import(/* webpackChunkName: "FolderList" */ '@js/Controller/Folder/List'); @@ -292,6 +299,13 @@ class ControllerManager { } ); MessageService.listen( + 'tab.create', + async (message, reply) => { + let module = await import(/* webpackChunkName: "TabCreate" */ '@js/Controller/Tab/Create'); + await this._executeController(module, message, reply); + } + ); + MessageService.listen( 'popup.debug.form.fields', async (message, reply) => { let module = await import(/* webpackChunkName: "PopupDebugLoginForms" */ '@js/Controller/Popup/DebugLoginForms'); |