diff --git a/app/images/icon.css b/app/images/icon.css index 4d006b87376286510d4720f19fde1a4a8b5efd9c..f457b9e7bc219ada31b8128bd3290faef16df5f1 100644 --- a/app/images/icon.css +++ b/app/images/icon.css @@ -1,3 +1,3 @@ -.icon-pling-store { +.icon-ocs-store { background-image: url(app-icons/pling-store.svg); } diff --git a/app/main.js b/app/main.js index 05a7a4ce24f6bd5dd7fd44c12773567f3432eb8d..ca5172797b7b7c2e0a0066fcbf1c0d5607202877 100644 --- a/app/main.js +++ b/app/main.js @@ -1,7 +1,7 @@ const fs = require('fs'); const {spawn} = require('child_process'); -const {app, BrowserWindow, BrowserView, ipcMain} = require('electron'); +const {app, BrowserWindow, ipcMain} = require('electron'); const ElectronStore = require('electron-store'); const request = require('request'); @@ -12,13 +12,10 @@ const ocsManagerConfig = require('./configs/ocs-manager.json'); const isDebugMode = process.argv.includes('--debug'); const previewpicDirectory = `${app.getPath('userData')}/previewpic`; const windowIcon = `${__dirname}/images/app-icons/ocs-store.png`; -const windowIndexFileUrl = `file://${__dirname}/index.html`; -const viewSessionPartition = 'persist:opendesktop'; -const viewPreloadScript = `${__dirname}/scripts/renderers/browser-view.js`; +const indexFileUrl = `file://${__dirname}/index.html`; const appConfigStoreStorage = 'application'; let mainWindow = null; -let mainView = null; let ocsManager = null; let ocsManagerUrl = ''; @@ -62,7 +59,6 @@ async function startOcsManager() { function stopOcsManager() { if (ocsManager) { ocsManager.kill(); - ocsManager = null; ocsManagerUrl = ''; } } @@ -87,6 +83,12 @@ function createWindow() { } }); + if (!isDebugMode) { + mainWindow.setMenu(null); + } + + mainWindow.loadURL(indexFileUrl); + mainWindow.on('close', () => { const appConfigStore = new ElectronStore({name: appConfigStoreStorage}); appConfigStore.set('windowBounds', mainWindow.getBounds()); @@ -94,149 +96,19 @@ function createWindow() { mainWindow.on('closed', () => { mainWindow = null; - if (mainView) { - mainView.destroy(); - mainView = null; - } }); if (isDebugMode) { - mainWindow.webContents.openDevTools({mode: 'detach'}); - } else { - mainWindow.setMenu(null); + mainWindow.webContents.openDevTools(); } - - mainWindow.loadURL(windowIndexFileUrl); - mainWindow.maximize(); - createView(); -} - -function createView() { - const detectOcsApiInfo = (url) => { - // Detect provider key and content id from page url - // https://www.opendesktop.org/s/Gnome/p/123456789/?key=val#hash - // - // providerKey = https://www.opendesktop.org/ocs/v1/ - // contentId = 123456789 - const info = { - providerKey: '', - contentId: '' - }; - const matches = url.match(/(https?:\/\/[^/]+).*\/p\/([^/?#]+)/); - if (matches) { - info.providerKey = `${matches[1]}/ocs/v1/`; - info.contentId = matches[2]; - } - return info; - }; - - mainView = new BrowserView({ - webPreferences: { - nodeIntegration: false, - partition: viewSessionPartition, - preload: viewPreloadScript - } - }); - - mainWindow.setBrowserView(mainView); - - const windowBounds = mainWindow.getBounds(); - mainView.setBounds({ - x: 0, - y: 40, - width: windowBounds.width, - height: windowBounds.height - }); - - mainView.setAutoResize({ - width: true, - height: true - }); - - mainView.webContents.on('did-start-loading', () => { - mainWindow.webContents.send('browserView_loading', {isLoading: true}); - }); - - mainView.webContents.on('did-stop-loading', () => { - mainWindow.webContents.send('browserView_loading', {isLoading: false}); - }); - - mainView.webContents.on('dom-ready', () => { - mainWindow.webContents.send('browserView_page', { - url: mainView.webContents.getURL(), - title: mainView.webContents.getTitle(), - canGoBack: mainView.webContents.canGoBack(), - canGoForward: mainView.webContents.canGoForward() - }); - - if (isDebugMode) { - mainView.webContents.openDevTools({mode: 'detach'}); - } - - mainView.webContents.send('ipcMessage'); - }); - - mainView.webContents.on('new-window', (event, url) => { - if (url.startsWith('http://') || url.startsWith('https://')) { - event.preventDefault(); - mainWindow.webContents.send('ocsManager_openUrl', {url: url}); - } - }); - - mainView.webContents.on('will-navigate', (event, url) => { - if (url.startsWith('ocs://') || url.startsWith('ocss://')) { - event.preventDefault(); - const info = detectOcsApiInfo(mainView.webContents.getURL()); - mainWindow.webContents.send('ocsManager_getItemByOcsUrl', {url: url, ...info}); - } - }); - - ipcMain.on('browserView_loadUrl', (event, url) => { - mainView.webContents.loadURL(url); - event.returnValue = undefined; - }); - - ipcMain.on('browserView_getUrl', (event) => { - event.returnValue = mainView.webContents.getURL(); - }); - - ipcMain.on('browserView_getTitle', (event) => { - event.returnValue = mainView.webContents.getTitle(); - }); - - ipcMain.on('browserView_goBack', (event) => { - mainView.webContents.goBack(); - event.returnValue = undefined; - }); - - ipcMain.on('browserView_goForward', (event) => { - mainView.webContents.goForward(); - event.returnValue = undefined; - }); - - ipcMain.on('browserView_reload', (event) => { - mainView.webContents.reload(); - event.returnValue = undefined; - }); - - ipcMain.on('browserView_stop', (event) => { - mainView.webContents.stop(); - event.returnValue = undefined; - }); - - //ipcMain.on('ipcMessage', (event) => {}); - - const appConfigStore = new ElectronStore({name: appConfigStoreStorage}); - const startPage = appConfigStore.get('startPage'); - - mainView.webContents.loadURL(startPage); } function isFile(path) { try { const stats = fs.statSync(path); return stats.isFile(); - } catch (error) { + } + catch (error) { console.error(error); return false; } @@ -246,7 +118,8 @@ function isDirectory(path) { try { const stats = fs.statSync(path); return stats.isDirectory(); - } catch (error) { + } + catch (error) { console.error(error); return false; } @@ -266,24 +139,14 @@ function previewpicFilename(itemKey) { return btoa(itemKey).slice(-255); } -function downloadPreviewpic(itemKey) { - const selector = 'meta[property="og:image"]'; - mainView.webContents.executeJavaScript( - `document.querySelector('${selector}').content`, - false, - (result) => { - const previewpicUrl = result || ''; - if (previewpicUrl) { - if (!isDirectory(previewpicDirectory)) { - fs.mkdirSync(previewpicDirectory); - } - const path = `${previewpicDirectory}/${previewpicFilename(itemKey)}`; - request.get(previewpicUrl).on('error', (error) => { - console.error(error); - }).pipe(fs.createWriteStream(path)); - } - } - ); +function downloadPreviewpic(itemKey, url) { + if (!isDirectory(previewpicDirectory)) { + fs.mkdirSync(previewpicDirectory); + } + const path = `${previewpicDirectory}/${previewpicFilename(itemKey)}`; + request.get(url).on('error', (error) => { + console.error(error); + }).pipe(fs.createWriteStream(path)); } function removePreviewpic(itemKey) { @@ -296,7 +159,8 @@ function removePreviewpic(itemKey) { app.on('ready', async () => { if (await startOcsManager()) { createWindow(); - } else { + } + else { app.quit(); } }); @@ -317,7 +181,7 @@ app.on('activate', () => { } }); -/*app.on('web-contents-created', (event, webContents) => { +app.on('web-contents-created', (event, webContents) => { if (webContents.getType() === 'webview') { webContents.on('will-navigate', (event, url) => { if (url.startsWith('ocs://') || url.startsWith('ocss://')) { @@ -326,7 +190,7 @@ app.on('activate', () => { } }); } -});*/ +}); ipcMain.on('app', (event, key) => { const data = { @@ -356,15 +220,19 @@ ipcMain.on('store', (event, key, value) => { ipcMain.on('previewpic', (event, kind, itemKey, url) => { if (kind === 'directory') { event.returnValue = previewpicDirectory; - } else if (kind === 'path' && itemKey) { + } + else if (kind === 'path' && itemKey) { event.returnValue = `${previewpicDirectory}/${previewpicFilename(itemKey)}`; - } else if (kind === 'download' && itemKey && url) { + } + else if (kind === 'download' && itemKey && url) { downloadPreviewpic(itemKey, url); event.returnValue = undefined; - } else if (kind === 'remove' && itemKey) { + } + else if (kind === 'remove' && itemKey) { removePreviewpic(itemKey); event.returnValue = undefined; - } else { + } + else { event.returnValue = false; } }); diff --git a/app/scripts/components/AboutdialogComponent.js b/app/scripts/components/AboutdialogComponent.js index 67d5ab308d8d49478d4e5598dec062a45d2b0cea..888da734bd8d6947d7ce5ddf42dad1041817008d 100644 --- a/app/scripts/components/AboutdialogComponent.js +++ b/app/scripts/components/AboutdialogComponent.js @@ -41,7 +41,7 @@ export default class AboutdialogComponent extends BaseComponent { padding: 1em; text-align: center; } - div[slot="content"] figure.icon-pling-store { + div[slot="content"] figure.icon-ocs-store { display: inline-block; width: 128px; height: 128px; @@ -58,7 +58,7 @@ export default class AboutdialogComponent extends BaseComponent { <app-dialog data-width="500px" data-footer-state="inactive"> <h3 slot="header">About This App</h3> <div slot="content"> - <figure class="icon-pling-store"></figure> + <figure class="icon-ocs-store"></figure> <h4>${this.state.productName}</h4> <p>Version ${this.state.version}</p> <p>${this.state.description}</p> @@ -87,7 +87,7 @@ export default class AboutdialogComponent extends BaseComponent { _handleClick(event) { if (event.target.closest('a')) { event.preventDefault(); - this.dispatch('browserView_loadUrl', {url: event.target.closest('a').href}); + this.dispatch('webview_loadUrl', {url: event.target.closest('a').href}); this.close(); } } diff --git a/app/scripts/components/OmniboxComponent.js b/app/scripts/components/OmniboxComponent.js index 822ec6a75f5e2b972c7432fa9e1d7232509c9d4f..4f02389f05bddbc1e4fac44f88c80a3d973e7335 100644 --- a/app/scripts/components/OmniboxComponent.js +++ b/app/scripts/components/OmniboxComponent.js @@ -15,24 +15,24 @@ export default class OmniboxComponent extends BaseComponent { this.contentRoot.addEventListener('click', this._handleClick.bind(this)); - this._viewHandler_browserView_loading = this._viewHandler_browserView_loading.bind(this); - this._viewHandler_browserView_page = this._viewHandler_browserView_page.bind(this); + this._viewHandler_webview_loading = this._viewHandler_webview_loading.bind(this); + this._viewHandler_webview_page = this._viewHandler_webview_page.bind(this); this._viewHandler_ocsManager_updateAvailableItems = this._viewHandler_ocsManager_updateAvailableItems.bind(this); this._viewHandler_ocsManager_metadataSet = this._viewHandler_ocsManager_metadataSet.bind(this); } componentConnectedCallback() { this.getStateManager().viewHandler - .add('browserView_loading', this._viewHandler_browserView_loading) - .add('browserView_page', this._viewHandler_browserView_page) + .add('webview_loading', this._viewHandler_webview_loading) + .add('webview_page', this._viewHandler_webview_page) .add('ocsManager_updateAvailableItems', this._viewHandler_ocsManager_updateAvailableItems) .add('ocsManager_metadataSet', this._viewHandler_ocsManager_metadataSet); } componentDisconnectedCallback() { this.getStateManager().viewHandler - .remove('browserView_loading', this._viewHandler_browserView_loading) - .remove('browserView_page', this._viewHandler_browserView_page) + .remove('webview_loading', this._viewHandler_webview_loading) + .remove('webview_page', this._viewHandler_webview_page) .remove('ocsManager_updateAvailableItems', this._viewHandler_ocsManager_updateAvailableItems) .remove('ocsManager_metadataSet', this._viewHandler_ocsManager_metadataSet); } @@ -231,12 +231,12 @@ export default class OmniboxComponent extends BaseComponent { <h4><i class="material-icons md-small">home</i> Choose Startpage</h4> <nav> <ul> - <li><app-button data-action="browserView_startPage" data-url="https://www.opendesktop.org/">pling.com</app-button></li> - <li><app-button data-action="browserView_startPage" data-url="https://www.opendesktop.org/s/Gnome">gnome-look.org</app-button></li> - <li><app-button data-action="browserView_startPage" data-url="https://store.kde.org/">store.kde.org</app-button></li> - <li><app-button data-action="browserView_startPage" data-url="https://www.opendesktop.org/s/XFCE">xfce-look.org</app-button></li> - <li><app-button data-action="browserView_startPage" data-url="https://www.opendesktop.org/s/Window-Managers">box-look.org</app-button></li> - <li><app-button data-action="browserView_startPage" data-url="https://www.opendesktop.org/s/Enlightenment">enlightenment-themes.org</app-button></li> + <li><app-button data-action="webview_startPage" data-url="https://www.pling.com/">pling.com</app-button></li> + <li><app-button data-action="webview_startPage" data-url="https://www.opendesktop.org/s/Gnome">gnome-look.org</app-button></li> + <li><app-button data-action="webview_startPage" data-url="https://store.kde.org/">store.kde.org</app-button></li> + <li><app-button data-action="webview_startPage" data-url="https://www.opendesktop.org/s/XFCE">xfce-look.org</app-button></li> + <li><app-button data-action="webview_startPage" data-url="https://www.opendesktop.org/s/Window-Managers">box-look.org</app-button></li> + <li><app-button data-action="webview_startPage" data-url="https://www.opendesktop.org/s/Enlightenment">enlightenment-themes.org</app-button></li> </ul> </nav> </div> @@ -247,12 +247,12 @@ export default class OmniboxComponent extends BaseComponent { } componentUpdatedCallback() { - if (this.contentRoot.querySelector('app-button[data-action="browserView_startPage"][data-checked]')) { - this.contentRoot.querySelector('app-button[data-action="browserView_startPage"][data-checked]').removeAttribute('data-checked'); + if (this.contentRoot.querySelector('app-button[data-action="webview_startPage"][data-checked]')) { + this.contentRoot.querySelector('app-button[data-action="webview_startPage"][data-checked]').removeAttribute('data-checked'); } - if (this.contentRoot.querySelector(`app-button[data-action="browserView_startPage"][data-url="${this.state.startPage}"]`)) { - this.contentRoot.querySelector(`app-button[data-action="browserView_startPage"][data-url="${this.state.startPage}"]`).setAttribute('data-checked', 'data-checked'); + if (this.contentRoot.querySelector(`app-button[data-action="webview_startPage"][data-url="${this.state.startPage}"]`)) { + this.contentRoot.querySelector(`app-button[data-action="webview_startPage"][data-url="${this.state.startPage}"]`).setAttribute('data-checked', 'data-checked'); } } @@ -300,8 +300,8 @@ export default class OmniboxComponent extends BaseComponent { this.dispatch('ocsManager_openUrl', {url: target.getAttribute('data-url')}); break; } - case 'browserView_startPage': { - this.dispatch('browserView_startPage', {url: target.getAttribute('data-url')}); + case 'webview_startPage': { + this.dispatch('webview_startPage', {url: target.getAttribute('data-url')}); this.close(); break; } @@ -313,12 +313,12 @@ export default class OmniboxComponent extends BaseComponent { } } - _viewHandler_browserView_loading(state) { + _viewHandler_webview_loading(state) { const indicator = this.contentRoot.querySelector('div[data-omnibox] app-indicator'); state.isLoading ? indicator.start() : indicator.stop(); } - _viewHandler_browserView_page(state) { + _viewHandler_webview_page(state) { this.update({...this.state, ...state}); } diff --git a/app/scripts/components/RootComponent.js b/app/scripts/components/RootComponent.js index bd6e8ac8da4ef5feac9f11a392ff81ffd67fe3b2..a5a4d36ff116ed7f2c0b7e345a64cb308187af03 100644 --- a/app/scripts/components/RootComponent.js +++ b/app/scripts/components/RootComponent.js @@ -5,8 +5,7 @@ import Chirit from '../../libs/chirit/Chirit.js'; import OcsManagerApi from '../api/OcsManagerApi.js'; import GeneralHandler from '../handlers/GeneralHandler.js'; -//import WebviewHandler from '../handlers/WebviewHandler.js'; -import BrowserViewHandler from '../handlers/BrowserViewHandler.js'; +import WebviewHandler from '../handlers/WebviewHandler.js'; import OcsManagerHandler from '../handlers/OcsManagerHandler.js'; import BaseComponent from './common/BaseComponent.js'; @@ -21,8 +20,7 @@ export default class RootComponent extends BaseComponent { const ocsManagerApi = new OcsManagerApi(ipcRenderer.sendSync('ocs-manager', 'url')); new GeneralHandler(this._stateManager, ipcRenderer); - //new WebviewHandler(this._stateManager, ipcRenderer); - new BrowserViewHandler(this._stateManager, ipcRenderer); + new WebviewHandler(this._stateManager, ipcRenderer); new OcsManagerHandler(this._stateManager, ipcRenderer, ocsManagerApi); } @@ -41,7 +39,7 @@ export default class RootComponent extends BaseComponent { <app-page id="browser"> <app-toolbar slot="header"></app-toolbar> - <!--<app-webview slot="content"></app-webview>--> + <app-webview slot="content"></app-webview> </app-page> <app-collectiondialog></app-collectiondialog> diff --git a/app/scripts/components/SplashscreenComponent.js b/app/scripts/components/SplashscreenComponent.js index 989bfc089ef42f6ab34b0ee44118b459dfebd68b..134848fd853b116bcc61e10af4d50459511ad3c1 100644 --- a/app/scripts/components/SplashscreenComponent.js +++ b/app/scripts/components/SplashscreenComponent.js @@ -3,17 +3,17 @@ import BaseComponent from './common/BaseComponent.js'; export default class SplashscreenComponent extends BaseComponent { init() { - this._viewHandler_browserView_loading = this._viewHandler_browserView_loading.bind(this); + this._viewHandler_webview_loading = this._viewHandler_webview_loading.bind(this); } componentConnectedCallback() { this.getStateManager().viewHandler - .add('browserView_loading', this._viewHandler_browserView_loading); + .add('webview_loading', this._viewHandler_webview_loading); } componentDisconnectedCallback() { this.getStateManager().viewHandler - .remove('browserView_loading', this._viewHandler_browserView_loading); + .remove('webview_loading', this._viewHandler_webview_loading); } render() { @@ -31,7 +31,7 @@ export default class SplashscreenComponent extends BaseComponent { align-items: center; justify-content: center; } - div[slot="content"] figure.icon-pling-store { + div[slot="content"] figure.icon-ocs-store { display: inline-block; width: 128px; height: 128px; @@ -47,7 +47,7 @@ export default class SplashscreenComponent extends BaseComponent { <app-dialog data-width="400px" data-height="300px" data-state="active" data-header-state="inactive" data-footer-state="inactive" data-auto-close-state="inactive"> <div slot="content"> - <figure class="icon-pling-store"></figure> + <figure class="icon-ocs-store"></figure> <h3>Welcome to ${document.title}</h3> <p>Loading...</p> </div> @@ -55,7 +55,7 @@ export default class SplashscreenComponent extends BaseComponent { `; } - _viewHandler_browserView_loading(state) { + _viewHandler_webview_loading(state) { if (!state.isLoading) { this.contentRoot.querySelector('app-dialog').close(); // Splash screen only shows when app launch, so remove it diff --git a/app/scripts/components/ToolbarComponent.js b/app/scripts/components/ToolbarComponent.js index 9a09b6a6ecbdfbebdd682ef90f9403d5fe26009a..73bc1fdb353da8c35aae318be1be0a1c3eaae2c3 100644 --- a/app/scripts/components/ToolbarComponent.js +++ b/app/scripts/components/ToolbarComponent.js @@ -5,24 +5,24 @@ export default class ToolbarComponent extends BaseComponent { init() { this.contentRoot.addEventListener('click', this._handleClick.bind(this)); - this._viewHandler_browserView_loading = this._viewHandler_browserView_loading.bind(this); - this._viewHandler_browserView_page = this._viewHandler_browserView_page.bind(this); + this._viewHandler_webview_loading = this._viewHandler_webview_loading.bind(this); + this._viewHandler_webview_page = this._viewHandler_webview_page.bind(this); this._viewHandler_ocsManager_updateAvailableItems = this._viewHandler_ocsManager_updateAvailableItems.bind(this); this._viewHandler_ocsManager_metadataSet = this._viewHandler_ocsManager_metadataSet.bind(this); } componentConnectedCallback() { this.getStateManager().viewHandler - .add('browserView_loading', this._viewHandler_browserView_loading) - .add('browserView_page', this._viewHandler_browserView_page) + .add('webview_loading', this._viewHandler_webview_loading) + .add('webview_page', this._viewHandler_webview_page) .add('ocsManager_updateAvailableItems', this._viewHandler_ocsManager_updateAvailableItems) .add('ocsManager_metadataSet', this._viewHandler_ocsManager_metadataSet); } componentDisconnectedCallback() { this.getStateManager().viewHandler - .remove('browserView_loading', this._viewHandler_browserView_loading) - .remove('browserView_page', this._viewHandler_browserView_page) + .remove('webview_loading', this._viewHandler_webview_loading) + .remove('webview_page', this._viewHandler_webview_page) .remove('ocsManager_updateAvailableItems', this._viewHandler_ocsManager_updateAvailableItems) .remove('ocsManager_metadataSet', this._viewHandler_ocsManager_metadataSet); } @@ -67,10 +67,10 @@ export default class ToolbarComponent extends BaseComponent { } } - app-iconbutton[data-action="browserView_reload"][data-state="inactive"] { + app-iconbutton[data-action="webview_reload"][data-state="inactive"] { display: none; } - app-iconbutton[data-action="browserView_stop"][data-state="inactive"] { + app-iconbutton[data-action="webview_stop"][data-state="inactive"] { display: none; } @@ -99,21 +99,21 @@ export default class ToolbarComponent extends BaseComponent { <nav data-toolbar> <ul> <li> - <app-iconbutton data-action="browserView_goBack" + <app-iconbutton data-action="webview_goBack" data-title="Back" data-icon="arrow_back" data-state="inactive"></app-iconbutton> </li> <li> - <app-iconbutton data-action="browserView_goForward" + <app-iconbutton data-action="webview_goForward" data-title="Forward" data-icon="arrow_forward" data-state="inactive"></app-iconbutton> </li> <li> - <app-iconbutton data-action="browserView_reload" + <app-iconbutton data-action="webview_reload" data-title="Reload" data-icon="refresh" data-state="active"></app-iconbutton> - <app-iconbutton data-action="browserView_stop" + <app-iconbutton data-action="webview_stop" data-title="Stop" data-icon="close" data-state="inactive"></app-iconbutton> </li> <li> - <app-iconbutton data-action="browserView_startPage" + <app-iconbutton data-action="webview_startPage" data-title="Startpage" data-icon="home"></app-iconbutton> </li> <li> @@ -127,7 +127,7 @@ export default class ToolbarComponent extends BaseComponent { <app-iconbutton data-action="menu_open" data-title="Other Operations..." data-icon="more_vert"></app-iconbutton><br> <app-menu data-width="250px" data-offset-x="-220px"> - <a slot="menuitem" href="#" data-action="browserView_appBugsPage">Report a Bug</a> + <a slot="menuitem" href="#" data-action="webview_appBugsPage">Report a Bug</a> <a slot="menuitem" href="#" data-action="general_about">About This App</a> </app-menu> </li> @@ -150,24 +150,24 @@ export default class ToolbarComponent extends BaseComponent { } switch (target.getAttribute('data-action')) { - case 'browserView_goBack': { - this.dispatch('browserView_goBack', {}); + case 'webview_goBack': { + this.dispatch('webview_goBack', {}); break; } - case 'browserView_goForward': { - this.dispatch('browserView_goForward', {}); + case 'webview_goForward': { + this.dispatch('webview_goForward', {}); break; } - case 'browserView_reload': { - this.dispatch('browserView_reload', {}); + case 'webview_reload': { + this.dispatch('webview_reload', {}); break; } - case 'browserView_stop': { - this.dispatch('browserView_stop', {}); + case 'webview_stop': { + this.dispatch('webview_stop', {}); break; } - case 'browserView_startPage': { - this.dispatch('browserView_startPage', {}); + case 'webview_startPage': { + this.dispatch('webview_startPage', {}); break; } case 'ocsManager_collection': { @@ -178,8 +178,8 @@ export default class ToolbarComponent extends BaseComponent { this.contentRoot.querySelector('app-menu').open(); break; } - case 'browserView_appBugsPage': { - this.dispatch('browserView_appBugsPage', {}); + case 'webview_appBugsPage': { + this.dispatch('webview_appBugsPage', {}); this.contentRoot.querySelector('app-menu').close(); break; } @@ -191,17 +191,17 @@ export default class ToolbarComponent extends BaseComponent { } } - _viewHandler_browserView_loading(state) { - this.contentRoot.querySelector('app-iconbutton[data-action="browserView_reload"]') + _viewHandler_webview_loading(state) { + this.contentRoot.querySelector('app-iconbutton[data-action="webview_reload"]') .setAttribute('data-state', state.isLoading ? 'inactive' : 'active'); - this.contentRoot.querySelector('app-iconbutton[data-action="browserView_stop"]') + this.contentRoot.querySelector('app-iconbutton[data-action="webview_stop"]') .setAttribute('data-state', state.isLoading ? 'active' : 'inactive'); } - _viewHandler_browserView_page(state) { - this.contentRoot.querySelector('app-iconbutton[data-action="browserView_goBack"]') + _viewHandler_webview_page(state) { + this.contentRoot.querySelector('app-iconbutton[data-action="webview_goBack"]') .setAttribute('data-state', state.canGoBack ? 'active' : 'inactive'); - this.contentRoot.querySelector('app-iconbutton[data-action="browserView_goForward"]') + this.contentRoot.querySelector('app-iconbutton[data-action="webview_goForward"]') .setAttribute('data-state', state.canGoForward ? 'active' : 'inactive'); } diff --git a/app/scripts/components/index.js b/app/scripts/components/index.js index 382ab7c96c284eff7d71b11ea89d8c000b2c7cc3..318c00d9deabbbeb4de1069186de8eb20945e968 100644 --- a/app/scripts/components/index.js +++ b/app/scripts/components/index.js @@ -31,6 +31,9 @@ ToolbarComponent.define('app-toolbar'); import OmniboxComponent from './OmniboxComponent.js'; OmniboxComponent.define('app-omnibox'); +import WebviewComponent from './WebviewComponent.js'; +WebviewComponent.define('app-webview'); + import CollectiondialogComponent from './CollectiondialogComponent.js'; CollectiondialogComponent.define('app-collectiondialog'); diff --git a/app/scripts/handlers/BrowserViewHandler.js b/app/scripts/handlers/BrowserViewHandler.js deleted file mode 100644 index f4527d8c17aa7ebe91034dd1a692b3b1f9550687..0000000000000000000000000000000000000000 --- a/app/scripts/handlers/BrowserViewHandler.js +++ /dev/null @@ -1,69 +0,0 @@ -export default class BrowserViewHandler { - - constructor(stateManager, ipcRenderer) { - this._stateManager = stateManager; - this._ipcRenderer = ipcRenderer; - - this._appPackage = this._ipcRenderer.sendSync('app', 'package'); - this._startPage = this._ipcRenderer.sendSync('store', 'startPage'); - - this._subscribe(); - } - - _subscribe() { - this._ipcRenderer.on('browserView_loading', (event, data) => { - this._stateManager.dispatch('browserView_loading', data); - }); - - this._ipcRenderer.on('browserView_page', (event, data) => { - this._stateManager.dispatch('browserView_page', data); - }); - - this._stateManager.actionHandler - .add('browserView_loading', (data) => { - return {isLoading: data.isLoading}; - }) - .add('browserView_page', (data) => { - return { - startPage: this._startPage, - url: data.url, - title: data.title, - canGoBack: data.canGoBack, - canGoForward: data.canGoForward - }; - }) - .add('browserView_startPage', (data) => { - if (data.url) { - this._startPage = data.url; - this._ipcRenderer.sendSync('store', 'startPage', this._startPage); - } - this._ipcRenderer.sendSync('browserView_loadUrl', this._startPage); - return false; - }) - .add('browserView_loadUrl', (data) => { - this._ipcRenderer.sendSync('browserView_loadUrl', data.url); - return false; - }) - .add('browserView_goBack', () => { - this._ipcRenderer.sendSync('browserView_goBack'); - return false; - }) - .add('browserView_goForward', () => { - this._ipcRenderer.sendSync('browserView_goForward'); - return false; - }) - .add('browserView_reload', () => { - this._ipcRenderer.sendSync('browserView_reload'); - return false; - }) - .add('browserView_stop', () => { - this._ipcRenderer.sendSync('browserView_stop'); - return false; - }) - .add('browserView_appBugsPage', () => { - this._ipcRenderer.sendSync('browserView_loadUrl', this._appPackage.bugs); - return false; - }); - } - -} diff --git a/app/scripts/handlers/OcsManagerHandler.js b/app/scripts/handlers/OcsManagerHandler.js index 818df37b294e70d0f0cb4f5d8d3413b38c99f34e..25b9ef825483300289bc3f31a4779b04aee074a9 100644 --- a/app/scripts/handlers/OcsManagerHandler.js +++ b/app/scripts/handlers/OcsManagerHandler.js @@ -8,7 +8,7 @@ export default class OcsManagerHandler { this._previewpicDirectory = this._ipcRenderer.sendSync('previewpic', 'directory'); this._installTypes = {}; - //this._webviewComponent = null; + this._webviewComponent = null; this._collectiondialogComponent = null; this._subscribe(); @@ -16,19 +16,11 @@ export default class OcsManagerHandler { } _subscribe() { - this._ipcRenderer.on('ocsManager_openUrl', (event, data) => { - this._stateManager.dispatch('ocsManager_openUrl', data); - }); - - this._ipcRenderer.on('ocsManager_getItemByOcsUrl', (event, data) => { - this._stateManager.dispatch('ocsManager_getItemByOcsUrl', data); - }); - this._stateManager.actionHandler - /*.add('webview_activate', (data) => { + .add('webview_activate', (data) => { this._webviewComponent = data.component; return {isActivated: true}; - })*/ + }) .add('ocsManager_activate', (data) => { this._collectiondialogComponent = data.component; return {isActivated: true}; @@ -185,7 +177,29 @@ export default class OcsManagerHandler { }); // Download preview picture - this._ipcRenderer.sendSync('previewpic', 'download', message.data[0].metadata.url); + const selector = 'meta[property="og:image"]'; + this._webviewComponent.executeJavaScript( + `document.querySelector('${selector}').content`, + false, + (result) => { + let previewpicUrl = result || ''; + + // FIXME: previewpic API maybe deprecated + /* + if (!previewpicUrl + && message.data[0].metadata.command === 'install' + && message.data[0].metadata.provider + && message.data[0].metadata.content_id + ) { + previewpicUrl = `${message.data[0].metadata.provider}content/previewpic/${message.data[0].metadata.content_id}`; + } + */ + + if (previewpicUrl) { + this._ipcRenderer.sendSync('previewpic', 'download', message.data[0].metadata.url, previewpicUrl); + } + } + ); }) .set('ItemHandler::downloadFinished', (message) => { if (message.data[0].status !== 'success_download') { diff --git a/app/scripts/renderers/browser-view.js b/app/scripts/renderers/browser-view.js deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000