diff --git a/CHANGELOG.md b/CHANGELOG.md
index 709c6866a..6ea4fe9a9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
+## [0.33.0] - [Unreleased]
+
+### Fixed
+
+- Channel page styling ([#2520](https://github.com/lbryio/lbry-desktop/pull/2520))
+
+### Added
+
+- Comic book reader ([#2484](https://github.com/lbryio/lbry-desktop/pull/2484))
+- Base functionality for more language support ([#2495](https://github.com/lbryio/lbry-desktop/pull2495))
+- Add easy thumbnail selector for videos ([#2492](https://github.com/lbryio/lbry-desktop/pull2492))
+
## [0.32.2] - [2019-5-20]
### Fixed
diff --git a/build/downloadDaemon.js b/build/downloadDaemon.js
index b8221e632..878272343 100644
--- a/build/downloadDaemon.js
+++ b/build/downloadDaemon.js
@@ -24,14 +24,13 @@ const downloadDaemon = targetPlatform =>
const daemonFilePath = path.join(daemonDir, daemonFileName);
const daemonVersionPath = path.join(__dirname, 'daemon.ver');
const tmpZipPath = path.join(__dirname, '..', 'dist', 'daemon.zip');
- const daemonURL = daemonURLTemplate
- .replace(/DAEMONVER/g, daemonVersion)
- .replace(/OSNAME/g, daemonPlatform);
+ const daemonURL = daemonURLTemplate.replace(/DAEMONVER/g, daemonVersion).replace(/OSNAME/g, daemonPlatform);
// If a daemon and daemon.ver exists, check to see if it matches the current daemon version
const hasDaemonDownloaded = fs.existsSync(daemonFilePath);
const hasDaemonVersion = fs.existsSync(daemonVersionPath);
let downloadedDaemonVersion;
+
if (hasDaemonVersion) {
downloadedDaemonVersion = fs.readFileSync(daemonVersionPath, 'utf8');
}
@@ -65,6 +64,7 @@ const downloadDaemon = targetPlatform =>
})
)
.then(() => del(`${daemonFilePath}*`))
+ .then()
.then(() =>
decompress(tmpZipPath, daemonDir, {
filter: file => path.basename(file.path) === daemonFileName,
@@ -80,9 +80,7 @@ const downloadDaemon = targetPlatform =>
resolve('Done');
})
.catch(error => {
- console.error(
- `\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m`
- );
+ console.error(`\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m`);
reject(error);
});
}
diff --git a/package.json b/package.json
index 8a2182f79..dd02e8616 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "LBRY",
- "version": "0.32.2",
+ "version": "0.33.0",
"description": "A browser for the LBRY network, a digital marketplace controlled by its users.",
"keywords": [
"lbry"
@@ -37,7 +37,7 @@
"flow-defs": "flow-typed install",
"precommit": "lint-staged",
"preinstall": "yarn cache clean lbry-redux && yarn cache clean lbryinc",
- "postinstall": "electron-builder install-app-deps && node build/downloadDaemon.js"
+ "postinstall": "electron-builder install-app-deps && node ./build/downloadDaemon.js"
},
"dependencies": {
"electron-dl": "^1.11.0",
@@ -81,6 +81,7 @@
"copy-webpack-plugin": "^4.6.0",
"country-data": "^0.0.31",
"cross-env": "^5.2.0",
+ "css-doodle": "^0.7.1",
"css-loader": "^2.1.0",
"cssnano": "^4.1.10",
"dat.gui": "^0.7.2",
@@ -193,7 +194,7 @@
"yarn": "^1.3"
},
"lbrySettings": {
- "lbrynetDaemonVersion": "0.37.1",
+ "lbrynetDaemonVersion": "0.37.2",
"lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-OSNAME.zip",
"lbrynetDaemonDir": "static/daemon",
"lbrynetDaemonFileName": "lbrynet"
diff --git a/src/platforms/electron/createWindow.js b/src/platforms/electron/createWindow.js
index 584e6d536..90fd4df29 100644
--- a/src/platforms/electron/createWindow.js
+++ b/src/platforms/electron/createWindow.js
@@ -16,7 +16,7 @@ export default appState => {
});
const windowConfiguration = {
- backgroundColor: '#2f9176',
+ backgroundColor: '#270f34', // Located in src/scss/init/_vars.scss `--color-background`
minWidth: 950,
minHeight: 600,
autoHideMenuBar: true,
diff --git a/src/ui/component/channelAbout/view.jsx b/src/ui/component/channelAbout/view.jsx
index 82e8dab90..5965c896c 100644
--- a/src/ui/component/channelAbout/view.jsx
+++ b/src/ui/component/channelAbout/view.jsx
@@ -1,5 +1,6 @@
// @flow
import React, { Fragment } from 'react';
+import MarkdownPreview from 'component/common/markdown-preview';
type Props = {
description: ?string,
@@ -7,6 +8,15 @@ type Props = {
website: ?string,
};
+const formatEmail = (email: string) => {
+ if (email) {
+ const protocolRegex = new RegExp('^mailto:', 'i');
+ const protocol = protocolRegex.exec(email);
+ return protocol ? email : `mailto:${email}`;
+ }
+ return null;
+};
+
function ChannelContent(props: Props) {
const { description, email, website } = props;
const showAbout = description || email || website;
@@ -16,17 +26,25 @@ function ChannelContent(props: Props) {
{!showAbout &&
{__('Nothing here yet')}
}
{showAbout && (
- {description && {description}
}
+ {description && (
+
+
+
+ )}
{email && (
{__('Contact')}
- {email}
+
+
+
)}
{website && (
{__('Site')}
- {website}
+
+
+
)}
diff --git a/src/ui/component/doodle/index.js b/src/ui/component/doodle/index.js
new file mode 100644
index 000000000..542124684
--- /dev/null
+++ b/src/ui/component/doodle/index.js
@@ -0,0 +1,5 @@
+/* eslint react/display-name: 0 */
+
+import React from 'react';
+
+export default ({ rule = '' }) => {rule};
diff --git a/src/ui/component/errorBoundary/view.jsx b/src/ui/component/errorBoundary/view.jsx
index 64d7ad10d..6e6c8d092 100644
--- a/src/ui/component/errorBoundary/view.jsx
+++ b/src/ui/component/errorBoundary/view.jsx
@@ -5,6 +5,7 @@ import Yrbl from 'component/yrbl';
import Button from 'component/button';
import { withRouter } from 'react-router';
import Native from 'native';
+import { Lbry } from 'lbry-redux';
type Props = {
children: React.Node,
@@ -30,20 +31,22 @@ class ErrorBoundary extends React.Component {
}
componentDidCatch(error: { stack: string }) {
- let errorMessage = '\n';
+ let errorMessage = 'Uncaught error\n';
// @if TARGET='web'
- errorMessage += 'lbry.tv error\n';
+ errorMessage += 'lbry.tv\n';
errorMessage += window.location.pathname + window.location.search;
this.log(errorMessage);
// @endif
// @if TARGET='app'
Native.getAppVersionInfo().then(({ localVersion }) => {
- errorMessage += `version: ${localVersion}\n`;
- errorMessage += `page: ${window.location.href.split('.html')[1]}\n`;
- errorMessage += `${error.stack}`;
-
- this.log(errorMessage);
+ Lbry.version().then(({ lbrynet_version: sdkVersion }) => {
+ errorMessage += `app version: ${localVersion}\n`;
+ errorMessage += `sdk version: ${sdkVersion}\n`;
+ errorMessage += `page: ${window.location.href.split('.html')[1]}\n`;
+ errorMessage += `${error.stack}`;
+ this.log(errorMessage);
+ });
});
// @endif
}
diff --git a/src/ui/component/externalLink/view.jsx b/src/ui/component/externalLink/view.jsx
index 1a2642a25..f5736ec25 100644
--- a/src/ui/component/externalLink/view.jsx
+++ b/src/ui/component/externalLink/view.jsx
@@ -24,12 +24,12 @@ class ExternalLink extends React.PureComponent {
createLink() {
const { href, title, children, openModal } = this.props;
// Regex for url protocol
- const protocolRegex = new RegExp('^(https?|lbry)+:', 'i');
+ const protocolRegex = new RegExp('^(https?|lbry|mailto)+:', 'i');
const protocol = href ? protocolRegex.exec(href) : null;
// Return plain text if no valid url
let element = {children};
// Return external link if protocol is http or https
- if (protocol && (protocol[0] === 'http:' || protocol[0] === 'https:')) {
+ if (protocol && (protocol[0] === 'http:' || protocol[0] === 'https:' || protocol[0] === 'mailto:')) {
element = (