2018-01-17 23:13:08 -03:00
|
|
|
/* eslint-disable react/jsx-filename-extension */
|
2017-12-27 20:48:11 -03:00
|
|
|
import amplitude from 'amplitude-js';
|
|
|
|
import App from 'component/app';
|
|
|
|
import SnackBar from 'component/snackBar';
|
|
|
|
import SplashScreen from 'component/splash';
|
|
|
|
import * as ACTIONS from 'constants/action_types';
|
|
|
|
import { ipcRenderer, remote, shell } from 'electron';
|
|
|
|
import lbry from 'lbry';
|
2017-12-21 14:32:51 -03:00
|
|
|
import React from 'react';
|
|
|
|
import ReactDOM from 'react-dom';
|
|
|
|
import { Provider } from 'react-redux';
|
2018-01-05 01:29:31 -05:00
|
|
|
import { doConditionalAuthNavigate, doDaemonReady, doShowSnackBar, doAutoUpdate } from 'redux/actions/app';
|
2017-12-21 14:32:51 -03:00
|
|
|
import { doNavigate } from 'redux/actions/navigation';
|
|
|
|
import { doDownloadLanguages } from 'redux/actions/settings';
|
2017-12-27 20:48:11 -03:00
|
|
|
import { doUserEmailVerify } from 'redux/actions/user';
|
2017-12-21 14:32:51 -03:00
|
|
|
import 'scss/all.scss';
|
2017-12-27 20:48:11 -03:00
|
|
|
import store from 'store';
|
2017-12-21 19:09:30 -03:00
|
|
|
import app from './app';
|
2016-11-22 14:19:08 -06:00
|
|
|
|
2017-12-08 07:14:37 -05:00
|
|
|
const { autoUpdater } = remote.require('electron-updater');
|
2017-12-13 18:36:30 -03:00
|
|
|
|
2017-12-10 03:06:30 -05:00
|
|
|
autoUpdater.logger = remote.require("electron-log");
|
|
|
|
|
2017-12-21 14:32:51 -03:00
|
|
|
window.addEventListener('contextmenu', event => {
|
2018-01-05 19:25:33 -03:00
|
|
|
contextMenu(remote.getCurrentWindow(), event.x, event.y, app.env === 'development');
|
2017-06-07 20:56:52 -04:00
|
|
|
event.preventDefault();
|
2017-03-17 07:41:01 -04:00
|
|
|
});
|
|
|
|
|
2017-12-26 10:25:26 -03:00
|
|
|
ipcRenderer.on('open-uri-requested', (event, uri, newSession) => {
|
2017-12-21 14:32:51 -03:00
|
|
|
if (uri && uri.startsWith('lbry://')) {
|
2017-12-26 10:25:26 -03:00
|
|
|
if (uri.startsWith('lbry://?verify=')) {
|
2017-12-22 18:09:06 -08:00
|
|
|
let verification = {};
|
|
|
|
try {
|
|
|
|
verification = JSON.parse(atob(uri.substring(15)));
|
2017-12-26 10:25:26 -03:00
|
|
|
} catch (error) {
|
2018-01-08 17:15:44 -08:00
|
|
|
console.log(error);
|
2017-12-26 10:25:26 -03:00
|
|
|
}
|
2017-12-22 18:09:06 -08:00
|
|
|
if (verification.token && verification.recaptcha) {
|
|
|
|
app.store.dispatch(doConditionalAuthNavigate(newSession));
|
2017-12-26 10:25:26 -03:00
|
|
|
app.store.dispatch(doUserEmailVerify(verification.token, verification.recaptcha));
|
2017-12-22 18:09:06 -08:00
|
|
|
} else {
|
2017-12-26 10:25:26 -03:00
|
|
|
app.store.dispatch(doShowSnackBar({ message: 'Invalid Verification URI' }));
|
2017-12-22 18:09:06 -08:00
|
|
|
}
|
|
|
|
} else {
|
2017-12-26 10:25:26 -03:00
|
|
|
app.store.dispatch(doNavigate('/show', { uri }));
|
2017-12-22 18:09:06 -08:00
|
|
|
}
|
2017-06-07 20:56:52 -04:00
|
|
|
}
|
2017-05-09 16:58:48 -04:00
|
|
|
});
|
2017-05-08 05:04:11 -04:00
|
|
|
|
2017-12-21 14:32:51 -03:00
|
|
|
ipcRenderer.on('open-menu', (event, uri) => {
|
|
|
|
if (uri && uri.startsWith('/help')) {
|
|
|
|
app.store.dispatch(doNavigate('/help'));
|
2017-06-13 17:02:06 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2017-12-21 14:32:51 -03:00
|
|
|
const { dock } = remote.app;
|
2017-09-14 13:06:41 +05:30
|
|
|
|
2017-12-21 14:32:51 -03:00
|
|
|
ipcRenderer.on('window-is-focused', () => {
|
2017-09-14 13:06:41 +05:30
|
|
|
if (!dock) return;
|
2017-12-21 14:32:51 -03:00
|
|
|
app.store.dispatch({ type: ACTIONS.WINDOW_FOCUSED });
|
|
|
|
dock.setBadge('');
|
2017-09-14 13:06:41 +05:30
|
|
|
});
|
|
|
|
|
2018-01-05 01:29:31 -05:00
|
|
|
((history, ...args) => {
|
2017-12-21 22:21:22 -03:00
|
|
|
const { replaceState } = history;
|
|
|
|
const newHistory = history;
|
2017-12-27 20:48:11 -03:00
|
|
|
newHistory.replaceState = (_, __, path) => {
|
2017-12-21 22:21:22 -03:00
|
|
|
amplitude.getInstance().logEvent('NAVIGATION', { destination: path ? path.slice(1) : path });
|
|
|
|
return replaceState.apply(history, args);
|
2017-12-18 21:53:01 -08:00
|
|
|
};
|
|
|
|
})(window.history);
|
|
|
|
|
2017-12-21 14:32:51 -03:00
|
|
|
document.addEventListener('click', event => {
|
|
|
|
let { target } = event;
|
2017-06-07 20:56:52 -04:00
|
|
|
while (target && target !== document) {
|
2017-12-21 14:32:51 -03:00
|
|
|
if (target.matches('a') || target.matches('button')) {
|
2017-12-05 16:16:54 -08:00
|
|
|
// TODO: Look into using accessiblity labels (this would also make the app more accessible)
|
2017-12-21 14:32:51 -03:00
|
|
|
const hrefParts = window.location.href.split('#');
|
2017-12-21 22:21:22 -03:00
|
|
|
const element = target.title || (target.textContent && target.textContent.trim());
|
2017-12-05 16:16:54 -08:00
|
|
|
if (element) {
|
2017-12-21 14:32:51 -03:00
|
|
|
amplitude.getInstance().logEvent('CLICK', {
|
2017-12-05 17:16:06 -08:00
|
|
|
target: element,
|
2017-12-21 14:32:51 -03:00
|
|
|
location: hrefParts.length > 1 ? hrefParts[hrefParts.length - 1] : '/',
|
2017-12-05 17:16:06 -08:00
|
|
|
});
|
2017-12-05 16:16:54 -08:00
|
|
|
} else {
|
2017-12-21 14:32:51 -03:00
|
|
|
amplitude.getInstance().logEvent('UNMARKED_CLICK', {
|
|
|
|
location: hrefParts.length > 1 ? hrefParts[hrefParts.length - 1] : '/',
|
2017-12-18 22:34:03 -08:00
|
|
|
source: target.outerHTML,
|
2017-12-05 17:16:06 -08:00
|
|
|
});
|
2017-12-05 16:16:54 -08:00
|
|
|
}
|
2017-12-05 00:04:00 -08:00
|
|
|
}
|
2017-12-21 14:32:51 -03:00
|
|
|
if (target.matches('a[href^="http"]') || target.matches('a[href^="mailto"]')) {
|
2017-06-07 20:56:52 -04:00
|
|
|
event.preventDefault();
|
|
|
|
shell.openExternal(target.href);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
target = target.parentNode;
|
|
|
|
}
|
2017-05-21 12:15:41 -04:00
|
|
|
});
|
|
|
|
|
2017-12-27 20:48:11 -03:00
|
|
|
const init = () => {
|
2017-12-08 07:14:37 -05:00
|
|
|
autoUpdater.on("update-downloaded", () => {
|
|
|
|
app.store.dispatch(doAutoUpdate());
|
|
|
|
});
|
|
|
|
|
2017-12-10 03:06:30 -05:00
|
|
|
if (["win32", "darwin"].includes(process.platform)) {
|
|
|
|
autoUpdater.on("update-available", () => {
|
|
|
|
console.log("Update available");
|
|
|
|
});
|
|
|
|
autoUpdater.on("update-not-available", () => {
|
|
|
|
console.log("Update not available");
|
|
|
|
});
|
|
|
|
autoUpdater.on("update-downloaded", () => {
|
|
|
|
console.log("Update downloaded");
|
|
|
|
app.store.dispatch(doAutoUpdate());
|
|
|
|
});
|
|
|
|
}
|
2017-08-08 10:36:14 +01:00
|
|
|
app.store.dispatch(doDownloadLanguages());
|
|
|
|
|
2017-06-07 20:56:52 -04:00
|
|
|
function onDaemonReady() {
|
2017-12-05 13:05:59 -08:00
|
|
|
lbry.status().then(info => {
|
2017-12-05 17:16:06 -08:00
|
|
|
amplitude.getInstance().init(
|
|
|
|
// Amplitude API Key
|
2017-12-21 14:32:51 -03:00
|
|
|
'0b130efdcbdbf86ec2f7f9eff354033e',
|
2017-12-05 17:16:06 -08:00
|
|
|
info.lbry_id,
|
|
|
|
null,
|
2017-12-13 18:36:30 -03:00
|
|
|
() => {
|
2017-12-21 14:32:51 -03:00
|
|
|
window.sessionStorage.setItem('loaded', 'y'); // once we've made it here once per session, we don't need to show splash again
|
2017-12-05 17:16:06 -08:00
|
|
|
app.store.dispatch(doDaemonReady());
|
2017-06-05 21:21:55 -07:00
|
|
|
|
2017-12-05 17:16:06 -08:00
|
|
|
ReactDOM.render(
|
|
|
|
<Provider store={store}>
|
2018-01-08 17:15:44 -08:00
|
|
|
<div>
|
2017-12-05 17:16:06 -08:00
|
|
|
<App />
|
|
|
|
<SnackBar />
|
2018-01-08 17:15:44 -08:00
|
|
|
</div>
|
2017-12-05 17:16:06 -08:00
|
|
|
</Provider>,
|
2017-12-21 14:32:51 -03:00
|
|
|
document.getElementById('app')
|
2017-12-05 17:16:06 -08:00
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
2017-12-05 13:05:59 -08:00
|
|
|
});
|
2017-06-07 20:56:52 -04:00
|
|
|
}
|
2017-06-05 21:21:55 -07:00
|
|
|
|
2017-12-21 14:32:51 -03:00
|
|
|
if (window.sessionStorage.getItem('loaded') === 'y') {
|
2017-06-07 20:56:52 -04:00
|
|
|
onDaemonReady();
|
|
|
|
} else {
|
2017-07-19 17:05:08 -04:00
|
|
|
ReactDOM.render(
|
|
|
|
<Provider store={store}>
|
|
|
|
<SplashScreen onReadyToLaunch={onDaemonReady} />
|
|
|
|
</Provider>,
|
2017-12-21 14:32:51 -03:00
|
|
|
document.getElementById('app')
|
2017-07-19 17:05:08 -04:00
|
|
|
);
|
2017-07-02 21:13:37 +02:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2017-04-01 02:36:45 -04:00
|
|
|
init();
|