implement shuffle segments order

pull/982/head
Mikael Finstad 4 years ago
parent 19527802ef
commit 61b7ca2e44
No known key found for this signature in database
GPG Key ID: 25AB36E3E81CBC26

@ -207,6 +207,12 @@ module.exports = (app, mainWindow, newVersion) => {
mainWindow.webContents.send('invertAllCutSegments');
},
},
{
label: i18n.t('Shuffle segments order'),
click() {
mainWindow.webContents.send('shuffleSegments');
},
},
],
},
{

@ -59,7 +59,7 @@ import {
checkDirWriteAccess, dirExists, openDirToast, isMasBuild, isStoreBuild, dragPreventer, doesPlayerSupportFile,
isDurationValid, isWindows, filenamify, getOutFileExtension, generateSegFileName, defaultOutSegTemplate,
hasDuplicates, havePermissionToReadFile, isMac, resolvePathIfNeeded, pathExists, html5ifiedPrefix, html5dummySuffix, findExistingHtml5FriendlyFile,
deleteFiles, getHtml5ifiedPath, isStreamThumbnail, getAudioStreams, getVideoStreams, isOutOfSpaceError,
deleteFiles, getHtml5ifiedPath, isStreamThumbnail, getAudioStreams, getVideoStreams, isOutOfSpaceError, shuffleArray,
} from './util';
import { formatDuration } from './util/duration';
import { adjustRate } from './util/rate-calculator';
@ -179,6 +179,8 @@ const App = memo(() => {
setCutSegments(createInitialCutSegments());
}, [clearSegCounter, createInitialCutSegments, setCutSegments]);
const shuffleSegments = useCallback(() => setCutSegments((oldSegments) => shuffleArray(oldSegments)), [setCutSegments]);
// Store "working" in a ref so we can avoid race conditions
const workingRef = useRef(working);
const setWorking = useCallback((val) => {
@ -2016,6 +2018,7 @@ const App = memo(() => {
electron.ipcRenderer.on('batchConvertFriendlyFormat', batchConvertFriendlyFormat);
electron.ipcRenderer.on('openSendReportDialog', openSendReportDialog2);
electron.ipcRenderer.on('clearSegments', clearSegments);
electron.ipcRenderer.on('shuffleSegments', shuffleSegments);
electron.ipcRenderer.on('createNumSegments', createNumSegments2);
electron.ipcRenderer.on('createFixedDurationSegments', createFixedDurationSegments2);
electron.ipcRenderer.on('invertAllCutSegments', invertAllCutSegments);
@ -2040,6 +2043,7 @@ const App = memo(() => {
electron.ipcRenderer.removeListener('batchConvertFriendlyFormat', batchConvertFriendlyFormat);
electron.ipcRenderer.removeListener('openSendReportDialog', openSendReportDialog2);
electron.ipcRenderer.removeListener('clearSegments', clearSegments);
electron.ipcRenderer.removeListener('shuffleSegments', shuffleSegments);
electron.ipcRenderer.removeListener('createNumSegments', createNumSegments2);
electron.ipcRenderer.removeListener('createFixedDurationSegments', createFixedDurationSegments2);
electron.ipcRenderer.removeListener('invertAllCutSegments', invertAllCutSegments);

@ -293,3 +293,23 @@ export const isOutOfSpaceError = (err) => (
err && (err.exitCode === 1 || err.code === 'ENOENT')
&& typeof err.stderr === 'string' && err.stderr.includes('No space left on device')
);
// https://stackoverflow.com/a/2450976/6519037
export function shuffleArray(arrayIn) {
const array = [...arrayIn];
let currentIndex = array.length;
let randomIndex;
// While there remain elements to shuffle...
while (currentIndex !== 0) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
[array[currentIndex], array[randomIndex]] = [
array[randomIndex], array[currentIndex]];
}
return array;
}

Loading…
Cancel
Save