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 = (