Warning, /multimedia/kid3/src/qml/script/ImportJson.qml is written in an unsupported language. File is not indexed.
0001 /** 0002 * \file ImportJson.qml 0003 * Import all tags of all files from a JSON file. 0004 * 0005 * \b Project: Kid3 0006 * \author Urs Fleisch 0007 * \date 29 Oct 2021 0008 * 0009 * Copyright (C) 2021 Urs Fleisch 0010 * 0011 * This program is free software; you can redistribute it and/or modify 0012 * it under the terms of the GNU Lesser General Public License as published by 0013 * the Free Software Foundation; version 3. 0014 * 0015 * This program is distributed in the hope that it will be useful, 0016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0018 * GNU Lesser General Public License for more details. 0019 * 0020 * You should have received a copy of the GNU Lesser General Public License 0021 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0022 */ 0023 0024 import Kid3 1.0 0025 0026 Kid3Script { 0027 onRun: { 0028 var obj, files = {} 0029 var numRowsImported = 0 0030 var round = 0 0031 0032 function doWork() { 0033 var rowNr 0034 if (files) { 0035 var filePath = app.selectionInfo.filePath 0036 rowNr = files[filePath] 0037 } else { 0038 rowNr = numRowsImported 0039 } 0040 0041 if (typeof rowNr !== "undefined" && rowNr >= 0 && rowNr < obj.data.length) { 0042 var row = obj.data[rowNr] 0043 for (var frameName in row) { 0044 var frameValue = row[frameName] 0045 if (frameName !== "File Path" && frameName !== "Duration" && 0046 frameValue !== "") { 0047 if (frameName.substr(0, 2) === "v1") { 0048 frameName = frameName.substr(2) 0049 app.setFrame(tagv1, frameName, frameValue) 0050 } else if (frameName.substr(0, 2) === "v3") { 0051 frameName = frameName.substr(2) 0052 app.setFrame(Frame.TagV3, frameName, frameValue) 0053 } else { 0054 app.setFrame(tagv2, frameName, frameValue) 0055 } 0056 } 0057 } 0058 ++numRowsImported 0059 } else if (filePath) { 0060 console.log("No data for " + filePath) 0061 } 0062 if (!app.nextFile()) { 0063 console.log("Imported tags for %1 files".arg(numRowsImported)) 0064 if (isStandalone()) { 0065 // Save the changes if the script is started stand-alone, not from Kid3. 0066 app.saveDirectory() 0067 } else if (numRowsImported === 0 && round === 0) { 0068 console.log("No files found, importing unconditionally.") 0069 files = undefined 0070 ++round; 0071 app.firstFile() 0072 doWork() 0073 } 0074 Qt.quit() 0075 } else { 0076 setTimeout(doWork, 1) 0077 } 0078 } 0079 0080 function startWork() { 0081 app.expandFileListFinished.disconnect(startWork) 0082 console.log("Setting tags") 0083 app.firstFile() 0084 doWork() 0085 } 0086 0087 var importPath = getArguments()[0] 0088 if (!importPath) { 0089 importPath = app.selectFileName( 0090 "Import", app.dirName, "JSON files (*.json);;All files (*)", false) 0091 if (!importPath) { 0092 Qt.quit() 0093 return 0094 } 0095 } 0096 var txt = "" + script.readFile(importPath) 0097 obj = JSON.parse(txt); 0098 if (obj && obj.data && obj.data.length > 0) { 0099 console.log("Read tags for %1 files from %2". 0100 arg(obj.data.length).arg(importPath)) 0101 for (var i = 0; i < obj.data.length; ++i) { 0102 var filePath = obj.data[i]["File Path"] 0103 if (filePath) { 0104 files[filePath] = i 0105 } 0106 } 0107 if (Object.keys(files).length === 0) { 0108 console.log("No File Path column found, importing unconditionally.") 0109 files = undefined 0110 } 0111 0112 if (!isStandalone() && app.hasGui()) { 0113 console.log("Expanding file list") 0114 app.expandFileListFinished.connect(startWork) 0115 app.requestExpandFileList() 0116 } else { 0117 startWork() 0118 } 0119 } else { 0120 console.log("No data found in %1".arg(importPath)) 0121 } 0122 } 0123 }