Warning, /multimedia/kid3/src/qml/script/ExtractAlbumArt.qml is written in an unsupported language. File is not indexed.
0001 /**
0002 * \file ExtractAlbumArt.qml
0003 * Extract all embedded cover art pictures avoiding duplicates.
0004 *
0005 * \b Project: Kid3
0006 * \author Urs Fleisch
0007 * \date 08 Mar 2015
0008 *
0009 * Copyright (C) 2015-2017 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.1
0025
0026 Kid3Script {
0027 onRun: {
0028 var lastDir
0029 var md5Map = {}
0030 var baseName = configs.fileConfig().defaultCoverFileName
0031 var extPos = baseName.lastIndexOf(".")
0032 if (extPos !== -1) {
0033 baseName = baseName.substr(0, extPos)
0034 }
0035
0036 function doWork() {
0037 if (app.selectionInfo.tag(Frame.Tag_2).tagFormat) {
0038 var data = app.getPictureData()
0039 if (script.getDataSize(data) !== 0) {
0040 var fileName = app.selectionInfo.fileName
0041 var dirName = app.selectionInfo.filePath
0042 dirName = dirName.substring(0, dirName.length - fileName.length)
0043 if (dirName !== lastDir) {
0044 lastDir = dirName
0045 var existingImageFiles = script.listDir(dirName, ["*.png", "*.jpg", "*.webp"])
0046 for (var i = 0; i < existingImageFiles.length; ++i) {
0047 var filePath = dirName + existingImageFiles[i]
0048 var fileData = script.readFile(filePath)
0049 if (script.getDataSize(fileData) !== 0) {
0050 md5Map[script.getDataMd5(fileData)] = filePath
0051 }
0052 }
0053 }
0054 var md5 = script.getDataMd5(data)
0055 if (md5 in md5Map) {
0056 console.log("Picture in %1 already exists in %2".
0057 arg(fileName).arg(md5Map[md5]))
0058 } else {
0059 var formats = ["jpg", "png", "webp"]
0060 for (var fmt in formats) {
0061 var format = formats[fmt]
0062 var img = script.dataToImage(data, format)
0063 var imgProps = script.imageProperties(img)
0064 if ("width" in imgProps) {
0065 var fileBaseName = baseName
0066 if (fileBaseName.indexOf("%") !== -1) {
0067 fileBaseName = app.importFromTagsToSelection(
0068 Frame.Tag_2, baseName, "%{__return}(.+)")
0069 }
0070 var picPath = dirName + fileBaseName + "." + format
0071 var picNr = 1
0072 while (script.fileExists(picPath)) {
0073 ++picNr
0074 picPath = dirName + fileBaseName + picNr + "." + format
0075 }
0076 if (script.writeFile(picPath, data)) {
0077 md5Map[md5] = picPath
0078 console.log("Picture in %1 stored to %2".
0079 arg(fileName).arg(picPath))
0080 } else {
0081 console.log("Failed to write", picPath)
0082 }
0083 break
0084 }
0085 }
0086 }
0087 }
0088 }
0089 if (!nextFile()) {
0090 Qt.quit()
0091 } else {
0092 setTimeout(doWork, 1)
0093 }
0094 }
0095
0096 firstFile()
0097 doWork()
0098 }
0099 }