Version 1.1.0
was released on 13 December 2019.
This release includes the following (notable) new features, improvements and bug fixes:
- LCP 1.0 compliance, including library lending interactions (return/renew)
- OPDS improvements: support for hybrid OPDS2 navigation/publications views, OAuth Authentication for OPDS (with seamless LCP acquisition via "borrow"), fixed search/previous/next-pagination links, metadata parser corrections, navigation links with "number of items"
- User Interface fix: publications shown twice in local bookshelf (recently added vs. reading list)
- Publication "info" modal dialog box: now with support for small/large cover image toggle, and eliminated the top-offset bug (blur effect was causing margin)
- Download progress indicator for LCP and OPDS acquisitions
- Publications now have checksum (CRC) calculations to prevent duplicate imports
- Navigation between main window sections (local bookshelf, OPDS catalogs) preserves grid vs. list display setting, and preserves context (was total reset before)
- Eliminated duplicate binaries / libraries from the built application package (LevelDown database)
- AppX Windows Store file extensions associations now fixed in the Electron builder toolchain
- Prototype integration of MathJax (to render MathML)
- Upgrade to Electron 7 (Chromium 78, NodeJS 12)
- Automated continuous integration builds via Travis and Appveyor, now with inspector/debugging tools enabled in EPUB webview
- Unsupported JSON Schema properties for ReadiumWebPublicationManifest and OPDS2 are now preserved (custom data)
- Developer experience improvements: significant TypeScript robustification / type safety (removal of "any" data structures, including in Redux Saga, actions, reducers, etc.), upgrade to TypeScript 3.7 (new syntactical constructs for more concise programming practices)
(previous v1.0.5 changelog)
Git commit diff since v1.0.5
:
https://github.com/readium/readium-desktop/compare/v1.0.5...v1.1.0
=> 151 GitHub Pull Requests or high-level Git commits.
Here is the complete list of commits, ordered by descending date:
- (_) fix(UI): reader window had top-offset content due to CSS mismatch [skip ci] Fixes #880
- (_) fix(UI): removed blur CSS filter effect which was somehow causing a top offset of the underlying content when modal dialog box is displayed [skip ci]
- (_) chore(release): version bump 1.1.0 [skip ci]
- (_) chore(release): changelog 1.1.0 [skip ci]
- (_) chore(release): changelog 1.1.0 [skip ci]
- (_) chore(NPM): package update, minor semver increment
- (_) chore(build): clean before package, and updated Electron rebuild version
- (_) chore(NPM): minor semantic version increments on package dependencies
- (_) fix(LCP): LSD EPUB ZIP license inject now with concurrency safeguard, critical section for read/write filesystem cycles (PR #883)
- (_) fix(OPDS): LCP hashed passphrase can be passed as Base64 instead of Hex string by some servers (we work around this server error by handling both cases, which requires string "sniffing")
- (_) fix: navigation between library tabs (books, catalogs, settings) was loosing history / context (PR #879 Fixes #878)
- (_) chore(NPM): package updates, minor semantic version increments
- (_) fix(OPDS): "borrow" + misc. code cleanup (type safety -related) (PR #877)
- (_) fix(OPDS): monkey-patching of incorrect link href in order to support invalid feeds, and fixed support for OPDS2 publication entry when displaying info box (now import link works, including LCP) ... but no borrow handling yet
- (_) chore(dev): fixed incorrect imports (aliases to R2 modules)
- (_) fix(OPDS): support for the authentication HTTP content-type header (PR #875)
- (_) fix: minimized library window was considered hidden (attached mode) when in fact minimized, also API clarifications for Windows registry (was breaking encapsulation of Electron internals: BrowserWindow "id" number, which was used for array-like operations with non-guaranteed stack ordering), usage of TypeScript type safety on Object.value() (PR #876)
- (_) chore(dev): TypeScript type safety for Object.keys() and Object.values()
- (_) fix: typed React routes with displayType grid/list state (PR #870 much improved version of #864)
- (_) fix(LCP): return / renew LSD links for external text/html publisher website / authenticated portal
- (_) fix(LCP): when LSD license update closes opened readers, attempt to re-open (fails if license is returned/revoked/expired, otherwise succeeds)
- (_) fix: ensure sufficient time for EPUB zip streams to be closed on filesystem after all readers are closed
- (_) fix(LCP): check LSD status updates before displaying publication info modal dialog box (just like before opening a publication for reading). Note: closes existing readers (potentially self) if license is updated (LCP injected in EPUB zip)
- (_) fix(LCP): reader(s) now are forced-closed only when there actually is a ZIP inject of META-INF/license.lcpl due to LSD update
- (_) fix(LCP): when importing LCP license, inject first, then check ZIP CRC to avoid duplicates in bookshelf (caveat: LSD can update license at any time in a publication lifecycle, so not a 100% reliable match heuristic)
- (_) chore(dev): code cleanup, removal of TypeScript "any" and other non-typed entities
- (_) chore(dev): fixed reader settings, types, etc. (PR #873 Supersedes PR #863)
- (_) chore(dev): removed unused bookmark code (PR #872 Supersedes PR #862)
- (_) chore(dev): harmonized React Refs code (PR #871 Supersedes PR #861)
- (_) feat(OPDS, LCP): mixed view (groups), OAuth access token authentication and refresh, LCP hashed passphrase retrieval (PR #869 supersedes PR #859)
- (_) hotfix(LCP): LSD return / renew controls in publication info dialog (follow-up to recently merged PR #832)
- (_) fix(OPDS): code refactor for OPDS service, converter, API, Redux Saga, publication info dialog (PR #832 Fixes #823 Fixes #822)
- (_) chore(dev): further rationalization of the DB TypeScript type system (PR #858 follows PR #857)
- (_) chore(dev): TypeScript elimination of "any" for the application database (PR #857)
- (_) hotfix(lint): TypeScript types for PouchDB Search plugin
- (_) chore(dev): eliminated TypeScript "any" for PouchDB and the Search plugin
- (_) chore(dev): eliminated TypeScript "any" for AvailableLanguages (code-name locale mapping)
- (_) chore(dev): eliminated TypeScript "any" in match.param of RouteComponentProps (React router parametrized paths)
- (_) fix: BrowserWindow was set to AppWindow due to unhandled "any" TypeScript type, also harmonized win-registry getWindows() usage because of unorthodox JavaScript dictionary key'ed by number instead of string.
- (_) hotfix: OPDS parser did not check for null/undefined values (JSON properties)
- (_) fix(LCP): "cancelled" LSD status message, initial LCP checks before publication download, LCP information in publication dialog, error translations (PR #856)
- (_) fix(LCP): LSD interactions now with custom HTTP headers for user-agent and accept-language
- (_) feat(LCP): character copy rights (PR #855)
- (_) chore(NPM): minor semver package updates, except file-loader (default ES modules instead of CommonJS) (PR #853)
- (_) fix: NPM updates to include support for TAJSON roundtrip lossless de/serialization of non-JSON-Schema properties (PR #852)
- (_) fix(regression): view/state refresh, e.g. OPDS catalog (PR #850 Fixes #849)
- (_) chore(NPM): package dependency updates, notably LCP and OPDS R2 components, but also Yargs (major version upgrade, safe for Thorium)
- (_) chore(dev): minor code comment addition (LCP / LSD renew)
- (_) hotfix(tests): missing file in previous commit for PR #848
- (_) chore(tests): Jest configuration works again (PR #848)
- (_) chore(dev): common Visual Studio Code workspace settings (PR #847)
- (_) fix(OPDS): added missing buy/subscribe/borrow links in publication info popup modal dialog (see old PR #804 Fixes #781)
- (_) chore(dev): updated Visual Studio Code settings [skip ci]
- (_) chore(dev): gradual arch evolution - replace apiActions + apiSubscribe with Redux Connect (PR #836)
- (_) chore(dev): added MathJax NPM package in electron-builder production package.json (not sure why it works without it though, as it is not explicitly referenced from the source code)
- (_) chore(dev): remove unnecessary console log
- (_) chore(build): release packaging had an unused entry, and missing MathJax
- (_) chore(NPM): package updates in lock file
- (_) feat: MathML support via MathJax (for advanced users, disabled by default) (PR #644 Fixes #643)
- (_) fix: LCP LSD EPUB ZIP parse filesystem error (Windows crash) (PR #846 Fixes #845)
- (_) chore(build): Appveyor PowerShell versus Command (MS-DOS) woes
- (_) chore(build): revert Appveyor GitHub Pull Requests only build, no release
- (_) chore(build): Appveyor GitHub Pull Requests only build, no release
- (_) fix(build): Appveyor replaces Travis for Windows CI (PR #844 Fixes #841)
- (_) chore(build): Appveyor sed.exe (default Git install)
- (_) chore(build): Appveyor shell script trials
- (_) chore(build): Appveyor PowerShell vs. Command shell scripts (will need to migrate SED, LS, etc.)
- (_) chore(build): Appveyor deploy test for Windows build (TravisCI electron-builder:wine Docker fails)
- (_) chore(build): another TravisCI Windows build attempt (Docker Wine timeout?)
- (_) chore(build): TravisCI Windows Docker Wine woes ... let's test timeout
- (_) chore(build): attempt to solve the TravisCI broken Windows Wine / Docker configuration (see #841)
- (_) chore(dev): removed ts-optchain as TypeScript now features optional chaining, and adjusted author/publisher concatenation code
- (_) fix(OPDS): search and next/previous/first/last links were not absolute (follow-up to closed PR #825)
- (_) fix: LCP and OPDS (open-access + sample/preview) publication acquisition - progress reporting, internal download state, toast notifications (PR #843 Fixes #840 Fixes #826 Fixes #831)
- (_) chore(NPM): minor semver package dependency updates
- (_) chore(dev): removed unused file
- (_) chore(dev): better syntax for translator function call with dynamic labels (non typed)
- (_) fix(UI): disabled buttons should not have pointer cursor
- (_) chore(dev): combined renderer and main reducers are now correctly typed
- (_) chore(dev): missing exported interface was causing false error in Visual Studio Code
- (_) chore(dev): renamed incorrect class name
- (_) chore(build): TravisCI relaunch, debugging issue #841 ...
- (_) chore(build): Travis still failing for Windows, seems like NPM cache issue
- (_) fix(build): electron-builder on Windows now generates 7z NSIS archive, instead of exe installer? (TravisCI config)
- (_) hotfix: stricter TypeScript discovered inconsistent Tag type, and incorrect Promise "all settled" code.
- (_) chore(NPM): package updates (all minor, but includes TypeScript 3.7! :)
- (_) fix(LCP+LSD): also introduced TypeScript types in Redux actions and Saga effects, harmonized React component IState/IProps, consistent variable naming, etc. (PR #795 Fixes #663 Fixes #787 Fixes #326 Fixes #484 Fixes #325 Fixes #324 Fixes #706 Fixes #655)
- (_) chore(dev): removed unnecessary console output (edge case of obsolete DB document field)
- (_) chore(dev): removed unused "opdsPublication" field in PublicationDocument
- (_) chore(dev): DB document strong typing (save() function, instead of 'any' TypeScript statement)
- (_) chore(dev): PouchDB find() with native selector type (code harmonization), in preparation for fix / replacement
- (_) chore(dev): typed ConfigDocument and removed a few "any" TypeScript statements
- (_) chore(dev): removed unused file (IPC model)
- (_) chore(dev): minor change, consistent use of fs.readFileSync() with UTF8 encoding function arg
- (_) chore(dev): refactor incorrectly-named DB doc base64 fields in the resources object (PR #839)
- (_) chore(build): removed unused JSON Schemas, added references and mention of
r2-streamer-js
(Fixes #814) - (_) chore(build): follow-up to 35ae088434394e8cab3bf7e944b5be9abe2f7289 electron-builder AppX patch (was called from TravisCI script)
- (_) chore(build): removed unused JPG cover images (Fixes #813)
- (_) chore(build): minor increment in Electron version to match actual dependency
- (_) chore(build): removed electron-builder patch for AppX Windows file extensions registration (Fixes #811)
- (_) fix: minor removal of unused code (PR #835)
- (_) chore(NPM): minor semver package updates (including Electron devtools fix)
- (_) chore(NPM): package lock update
- (_) chore(NPM): react-beautiful-dnd major semver (no regression) https://github.com/atlassian/react-beautiful-dnd/releases/tag/v12.0.0
- (_) chore(NPM): i18n version 19.0.0 breaking change in TypeScript default export, see https://github.com/i18next/i18next/blob/master/CHANGELOG.md#1900 i18next/i18next#1352
- (_) chore(NPM): package update major semver (safe upgrade) electron-builder https://github.com/electron-userland/electron-builder/releases/tag/v22.0.0
- (_) chore(NPM): minor semantic versioning updates
- (_) chore(NPM): R2-JS packages
- (_) chore(NPM): package updates (including latest LevelDown which fixes MacOS de-dupe issue)
- (_) feat(UI): publication "info box" cover image thumbnail vs. full size (PR #807 Fixes #786 Fixes #783)
- (_) fix(l10n): German locale updates (PR #830)
- (_) fix(OPDS): subsections now display numberOfItems (Atom thr:count), follows PR #819
- (_) chore(NPM): package updates, including i18next major semver due to potential breaking change (does not affect Thorium, see code comments)
- (_) fix(dev): content inspect debug menu enabled in TravisCI (MacOS)
- (_) chore(dev): NPM package updates, all r2-xxx-js components, and Electron v7
- (_) chore(NPM): package update r2-shared-js
- (_) fix: OPDS subsections subtitle (PR #819 Fixes #785)
- (_) chore(NPM): package updates, including r2-shared-js (metadata fixes)
- (_) chore(dev): TravisCI build number used to increment Thorium version
- (_) fix(l10n): German upper case noun (PR #817)
- (_) fix(l10n): german language name (PR #816)
- (_) fix(reader): default text align should be auto, not left (PR #815 Fixes #809)
- (_) feat: TravisCI test builds enable EPUB content inspector / debugger (PR #812 Fixes #810)
- (_) chore(dev): NPM package updates (Electron v6 was behind actual version, v7 is now out)
- (_) chore(dev): TravisCI config: Pull Requests build matrix, removed postinstall (no LevelDown)
- (_) hotfix(dev): TravisCI jsondown build (no leveldown) Javascript bundling requires module ignore
- (_) hotfix(dev): typo in release script, and TravisCI now builds without LevelDown (Windows installer was broken)
- (_) chore(dev): NPM package updates (including leveldown, but bug persists, so workaround remains)
- (_) fix: bookshelf, prevent publication import duplicates (OPDS and local filesystem), improved error reporting with failed imports (PR #793 Fixes #700 Fixes #790)
- (_) (tag: latest-windows, tag: latest-osx, tag: latest-linux) chore(dev): TravisCI debug for ASAR unpack contents
- (_) chore(dev): TravisCI deploy on Windows Docker tolerates asarUnpack + include only installer exe
- (_) chore(dev): TravisCI removal of unnecessary Windows exe, test with asarUnpack (causes filesystem linking errors)
- (_) chore(dev): TravisCI config tweaks for Xenial, MacOS XCode, etc.
- (_) chore(dev): bash CLI escaping in TravisCI shell
- (_) chore(dev): TravisCI fixes (testing deploy)
- (_) chore(dev): TravisCI deploy fixes (Windows APX electron-builder target removal + LevelDown prebuilds deletion)
- (_) chore(dev): Travis Continuous Integration + Deploy (automatic Thorium builds from the develop branch, for MacOS, Windows, Linux)
- (_) chore(dev): package.json versions are now aligned with NPM lock file
- (_) chore(dev): NPM package lock file refresh
- (_) fix(OPDS): pagination can be undefined (PR #801 Fixes #788)
- (_) fix(a11y): added accessible label on bookmark buttons "edit" and "delete" (PR #802 Fixes #796)
- (_) fix(OPDS): feeds without search link were causing error (PR #803 Fixes #784)
- (_) fix(dev): react-helmet-async to avoid using react-side-effect (PR #805 Fixes #596)
- (_) fix(l10n/i18n): English terms "alignment" and "layout" (PR #797 Fixes #791)
- (_) fix(ui): no duplicate publications in recently read vs. added bookshelf lists (PR #798 Fixes #779)
- (_) hotfix(dev): LevelDown versions in node_modules were only deduped at code level during NPM install, precompiled binaries of NodeJS plugins were loaded several times (Fixes #496 Also see Level/leveldown#686 )
- (_) hotfix(dev): Electron6 LevelDown NodeJS plugin rebuild, in prod mode (src/package.json sync)
- (_) feat: migration to Electron v6 / NodeJS 12 / Chromium 76, also PouchDB + LevelDown fix (PR #792 Fixes #496)
- (_) chore(release): ElectronBuilder command now with env variable to ensure skip auto code-signing (certificate discovery)
- (_) chore(release): version bump 1.0.6-rc.0 for continued development in codebase trunk
develop
branch
Developer Notes:
- The standard-changelog utility (
npx standard-changelog --first-release
) somehow only generates a limited number of commits, so we use a one-liner command line / shell script instead: git --no-pager log --decorate=short --pretty=oneline v1.0.5...v1.1.0 | cut -d " " -f 1- | sed -En '/^([0-9a-zA-Z]+)[[:space:]]([^:]+):(.+)$/!p;s//\1 __\2:__\3/p' | sed -En 's/^(.+)$/* \1/p' | sed -En '/PR[[:space:]]*#([0-9]+)/!p;s//PR [#\1](https:\/\/github.com\/readium\/readium-desktop\/pull\/\1)/gp' | sed -En '/\(#([0-9]+)/!p;s//(PR [#\1](https:\/\/github.com\/readium\/readium-desktop\/pull\/\1)/gp' | sed -En '/(Fixes|See|Fix|Fixed)[[:space:]]*#([0-9]+)/!p;s//\1 [#\2](https:\/\/github.com\/readium\/readium-desktop\/issues\/\2)/gp' | sed -En '/^.[[:space:]]([0-9a-zA-Z]+)[[:space:]]/!p;s//* [(_)](https:\/\/github.com\/readium\/readium-desktop\/commit\/\1) /p' | sed -En '/[[:space:]]#([0-9]+)/!p;s// [#\1](https:\/\/github.com\/readium\/readium-desktop\/issues\/\1)/gp'
- ...append
| pbcopy
on MacOS to copy the result into the clipboard. - ...append
| wc -l
to verify that the result actually matches the number of Git commits.