improve whatsnew

pull/2575/head
Mikael Finstad 9 months ago
parent 251107a073
commit 251107dac7
No known key found for this signature in database
GPG Key ID: 25AB36E3E81CBC26

@ -66,10 +66,14 @@ Windows store version is built as a Desktop Bridge app (with `runFullTrust` capa
Before releasing, consider [Maintainence chores](#maintainence-chores) first.
### Build new version
### Prepare and build new version
- `git checkout master`
- `git merge stores` (in case there's an old unmerged stores hotfix)
- **Prepare release notes** from commit history
- Create a new file `versions/x.y.z.md` and write the most important highlights from the release notes
- `tsx script/generateVersions.mts`
- Commit changes
- *If Store-only hotfix release*
- `git checkout stores`
- `npm version patch`
@ -80,14 +84,14 @@ Before releasing, consider [Maintainence chores](#maintainence-chores) first.
### Release built version
- Open draft in github and add Release notes
- Open draft in github and add the prepared release notes
- Add prefix `-DO-NOT-DOWNLOAD` to `LosslessCut-mac-universal.pkg` and `LosslessCut-win-x64.appx`
- *If GitHub release*
- Release the draft
- *If Store-only hotfix release*
- Remove all other artifacts and release the draft as **pre-release**
#### After releasing on GitHub
#### After releasing in GitHub
- *If Stores-only hotfix release*
- `git checkout master`

@ -115,6 +115,7 @@
"react-icons": "^4.1.0",
"react-leaflet": "^4.2.1",
"react-lottie-player": "^1.5.0",
"react-markdown": "^10.1.0",
"react-syntax-highlighter": "^15.4.3",
"react-use": "^17.4.0",
"rimraf": "^5.0.5",

@ -0,0 +1,16 @@
import { readdir, readFile, writeFile } from 'node:fs/promises';
const versionsDir = new URL('../versions/', import.meta.url);
const versions: { version: string, highlightsMd?: string | undefined }[] = [];
for (const file of await readdir(versionsDir, { withFileTypes: true })) {
if (file.isFile() && file.name.endsWith('.md')) {
const version = file.name.replace(/.md$/, '');
const content = await readFile(new URL(file.name, versionsDir), { encoding: 'utf8' });
versions.push({ version, highlightsMd: content.trim() !== '' ? content : undefined });
}
}
await writeFile(new URL('../src/renderer/src/versions.json', import.meta.url), JSON.stringify(versions, null, 2));

@ -96,7 +96,9 @@ const defaultKeyBindings: KeyBinding[] = [
const defaults: Config = {
version: 1,
lastAppVersion: app.getVersion(),
lastAppVersion: app.getVersion() === '3.67.0' ? '3.64.0' : app.getVersion(),
// todo change it to this in next version:
// lastAppVersion: app.getVersion(),
captureFormat: 'jpeg',
customOutDir: undefined,
keyframeCut: true,

@ -2,13 +2,18 @@ import { useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import semver from 'semver';
import { FaCode, FaFile } from 'react-icons/fa';
import Markdown from 'react-markdown';
import * as Dialog from './Dialog';
import useUserSettings from '../hooks/useUserSettings';
import { appVersion, isMasBuild } from '../util';
import versions from '../versions';
import versionsJson from '../versions.json';
import Button from './Button';
// see also generateVersions.mts
const versions: { version: string, highlightsMd?: string | undefined }[] = versionsJson;
const remote = window.require('@electron/remote');
const { shell } = remote;
@ -38,18 +43,26 @@ export default function WhatsNew() {
</Dialog.Title>
<div>
{matchingVersions.map(({ version, highlights }, i) => {
{matchingVersions.map(({ version, highlightsMd }, i) => {
// +1 because reverse order
const prevVersion = matchingVersions[i + 1]?.version ?? initialLastAppVersion;
return (
<div key={version}>
{!(isMasBuild && matchingVersions.length === 1) && <h2>v{version}</h2>}
<ul>
{highlights?.map((h) => (
<li key={h}>{h}</li>
))}
</ul>
{highlightsMd != null && (
<Markdown
components={{
// eslint-disable-next-line react/no-unstable-nested-components
code(props) {
// eslint-disable-next-line react/jsx-props-no-spreading
return <code className="highlighted" {...props} />;
},
}}
>
{highlightsMd}
</Markdown>
)}
<Button style={{ padding: '.5em 1em' }} onClick={() => shell.openExternal(`https://github.com/mifi/lossless-cut/releases/tag/v${version}`)}><FaFile style={{ verticalAlign: 'middle' }} /> {t('All release notes')}</Button>
<Button style={{ padding: '.5em 1em' }} onClick={() => shell.openExternal(`https://github.com/mifi/lossless-cut/compare/v${prevVersion}...v${version}`)}><FaCode style={{ verticalAlign: 'middle' }} /> {t('All code changes')}</Button>

@ -0,0 +1,13 @@
[
{
"version": "3.64.0"
},
{
"version": "3.66.1",
"highlightsMd": "- ‼️ Upgraded Electron to 38 - They dropped support for macOS 11\n- 🆕 Markers: Segments that don't have any end time are now considered \"markers\". They are rendered differently, and are excluded from exports. Markers can be useful for bookmarking locations on the timeline and all markers can be batch exported as screenshots.\n- 🔈 Play multiple audio tracks simultaneously (with FFmpeg-assisted playback)\n- ✅ Remember segment selected/deselected state inside `.llc` file\n- 💿 Split timeline by byte size\n- Modify segments by JavaScript expression\n- Upgraded FFmpeg to 8.0\n- Drastically improve performance of FFmpeg-assisted playback for non-natively supported codecs/formats\n- Improve UI performance and increase max segments to 1000\n- Toggle tracks by expression\n- CSV export/import tags as extra columns\n- New keyboard actions:\n - `toggleDarkMode`: Toggle dark mode\n - `toggleStripCurrentFilter`: Toggle tracks using current filter\n - `toggleStripAll`: Keep or discard all tracks\n - `toggleStripSubtitle`: Keep or discard subtitle tracks\n - `toggleStripVideo`: Keep or discard video tracks\n - `selectSegmentsAtCursor`\n - `makeCursorTimeZero`: Allow setting timeline zero offset to current cursor time - this effectively also means allowing a negative time offset\n- New shortcuts:\n - <kbd>shift</kbd>+<kbd>alt</kbd>+<kbd>up</kbd> Jump & seek to previous segment\n - <kbd>shift</kbd>+<kbd>alt</kbd>+<kbd>down</kbd> Jump & seek to next segment\n - <kbd>shift</kbd>+<kbd>alt</kbd>+<kbd>pageup</kbd> Jump & seek to first segment\n - <kbd>shift</kbd>+<kbd>alt</kbd>+<kbd>pagedown</kbd> Jump & seek to last segment\n- Add new file name template variables:\n - `CUT_DURATION`\n - `CUT_FROM_NUM`\n - `CUT_TO_NUM`\n - `FILE_EXPORT_COUNT`\n - `EXPORT_COUNT`\n - `SEG_LABEL` (cut+merge mode)\n- Change `SEG_NUM` and `SEG_NUM_INT` variables: they will now correspond to the original index of the segment as shown in the number on the segment list. New variables `SELECTED_SEG_NUM` and `SELECTED_SEG_NUM_INT` can be used for previous behavior (where the numbering is based on the segment's number in the list of *selected* segments).\n- All segments will now have a start time defined - `.llc` project file version bumped to v2 (to migrate missing `start` times). Missing end time now means that the segment is a marker (previously it meant the segment extended to end of timeline).\n"
},
{
"version": "3.67.0",
"highlightsMd": "- Improve UI and dark/light mode\n- Allow <kbd>Shift</kbd> + mouse click/drag to move/resize segments (configurable modifier key)\n- Use native web keyboard events: This makes keybindings consistently independent of keyboard layout.\n- New action `play-selected-segments` (play once, no loop)\n- Use file name template also for merge files\n- Persist more app state\n- New, improved reduce motion setting to override OS default\n- Dialog button positions are now OS-dependent\n- Add \"What's new\" (this dialog!)\n"
}
]

@ -1,18 +0,0 @@
const versions: { version: string, highlights?: string[] }[] = [
{
version: '3.66.1',
highlights: [
'‼️ Upgraded Electron to 38 - They dropped support for macOS 11',
'🆕 Markers: Segments that don\'t have any end time are now considered "markers". They are rendered differently, and are excluded from exports. Markers can be useful for bookmarking locations on the timeline and all markers can be batch exported as screenshots.',
'🔈 Play multiple audio tracks simultaneously (with FFmpeg-assisted playback)',
'✅ Remember segment selected/deselected state inside .llc file',
'💿 Split timeline by byte size',
'Upgraded FFmpeg to 8.0',
],
},
{
version: '3.64.0',
},
];
export default versions;

@ -0,0 +1,33 @@
- ‼️ Upgraded Electron to 38 - They dropped support for macOS 11
- 🆕 Markers: Segments that don't have any end time are now considered "markers". They are rendered differently, and are excluded from exports. Markers can be useful for bookmarking locations on the timeline and all markers can be batch exported as screenshots.
- 🔈 Play multiple audio tracks simultaneously (with FFmpeg-assisted playback)
- ✅ Remember segment selected/deselected state inside `.llc` file
- 💿 Split timeline by byte size
- Modify segments by JavaScript expression
- Upgraded FFmpeg to 8.0
- Drastically improve performance of FFmpeg-assisted playback for non-natively supported codecs/formats
- Improve UI performance and increase max segments to 1000
- Toggle tracks by expression
- CSV export/import tags as extra columns
- New keyboard actions:
- `toggleDarkMode`: Toggle dark mode
- `toggleStripCurrentFilter`: Toggle tracks using current filter
- `toggleStripAll`: Keep or discard all tracks
- `toggleStripSubtitle`: Keep or discard subtitle tracks
- `toggleStripVideo`: Keep or discard video tracks
- `selectSegmentsAtCursor`
- `makeCursorTimeZero`: Allow setting timeline zero offset to current cursor time - this effectively also means allowing a negative time offset
- New shortcuts:
- <kbd>shift</kbd>+<kbd>alt</kbd>+<kbd>up</kbd> Jump & seek to previous segment
- <kbd>shift</kbd>+<kbd>alt</kbd>+<kbd>down</kbd> Jump & seek to next segment
- <kbd>shift</kbd>+<kbd>alt</kbd>+<kbd>pageup</kbd> Jump & seek to first segment
- <kbd>shift</kbd>+<kbd>alt</kbd>+<kbd>pagedown</kbd> Jump & seek to last segment
- Add new file name template variables:
- `CUT_DURATION`
- `CUT_FROM_NUM`
- `CUT_TO_NUM`
- `FILE_EXPORT_COUNT`
- `EXPORT_COUNT`
- `SEG_LABEL` (cut+merge mode)
- Change `SEG_NUM` and `SEG_NUM_INT` variables: they will now correspond to the original index of the segment as shown in the number on the segment list. New variables `SELECTED_SEG_NUM` and `SELECTED_SEG_NUM_INT` can be used for previous behavior (where the numbering is based on the segment's number in the list of *selected* segments).
- All segments will now have a start time defined - `.llc` project file version bumped to v2 (to migrate missing `start` times). Missing end time now means that the segment is a marker (previously it meant the segment extended to end of timeline).

@ -0,0 +1,9 @@
- Improve UI and dark/light mode
- Allow <kbd>Shift</kbd> + mouse click/drag to move/resize segments (configurable modifier key)
- Use native web keyboard events: This makes keybindings consistently independent of keyboard layout.
- New action `play-selected-segments` (play once, no loop)
- Use file name template also for merge files
- Persist more app state
- New, improved reduce motion setting to override OS default
- Dialog button positions are now OS-dependent
- Add "What's new" (this dialog!)

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save