|
| 1 | +'use strict'; |
| 2 | + |
| 3 | +const pcloudSdk = require('pcloud-sdk-js'); |
| 4 | +const pMap = require('p-map'); |
| 5 | +const delay = require('delay'); |
| 6 | +const {join} = require('path'); |
| 7 | + |
| 8 | +const pClient = pcloudSdk.createClient(process.env.ACCESS_TOKEN); |
| 9 | + |
| 10 | +const {program} = require('commander'); |
| 11 | + |
| 12 | +async function run(folderPaths) { |
| 13 | + const folders = await pMap(folderPaths, async path => { |
| 14 | + const {metadata} = await pClient.api('listfolder', {params: {path}}); |
| 15 | + return metadata; |
| 16 | + }); |
| 17 | + |
| 18 | + const fileNamesToFiles = new Map(); |
| 19 | + for (const folder of folders) { |
| 20 | + for (const file of folder.contents) { |
| 21 | + const fileName = file.name; |
| 22 | + const entry = fileNamesToFiles.get(fileName) || []; |
| 23 | + entry.push(file); |
| 24 | + fileNamesToFiles.set(fileName, entry); |
| 25 | + } |
| 26 | + } |
| 27 | + |
| 28 | + // Order by oldest to newest |
| 29 | + for (const files of fileNamesToFiles.values()) { |
| 30 | + files.sort((a, b) => a.created - b.created); |
| 31 | + } |
| 32 | + |
| 33 | + const [destinationFolder, ...otherFolders] = folders; |
| 34 | + |
| 35 | + await pMap(fileNamesToFiles.values(), async files => { |
| 36 | + const file = files[0]; |
| 37 | + if (file.parentfolderid === destinationFolder.folderid) { |
| 38 | + return; |
| 39 | + } |
| 40 | + |
| 41 | + console.log(`Moving "${file.path}" to "${destinationFolder.path}"`); |
| 42 | + await pClient.movefile(Number.parseInt(file.fileid), destinationFolder.folderid); |
| 43 | + }, {concurrency: 1}); |
| 44 | + |
| 45 | + await pMap(otherFolders, async folder => { |
| 46 | + console.log(`Deleting ${folder.path}`); |
| 47 | + await pClient.deletefolder(folder.folderid); |
| 48 | + }); |
| 49 | +} |
| 50 | + |
| 51 | +// First folder is destination |
| 52 | + |
| 53 | +program |
| 54 | + .option('-p, --prefix <prefix>') |
| 55 | + .arguments('<folders...>') |
| 56 | + .action((folders, {prefix}) => { |
| 57 | + if (prefix) { |
| 58 | + folders = folders.map(f => join(prefix, f)); |
| 59 | + } |
| 60 | + |
| 61 | + run(folders).catch(error => console.error(error)); |
| 62 | + }); |
| 63 | + |
| 64 | +program.parse(process.argv); |
0 commit comments