|
#1
|
|||
|
|||
![]()
EDIT by pspzockerscene:
If you were sent to this thread but you do not know what the EventScripter is, please read THIS support article first. Convert AAC/M4A/OGG/OPUS files to MP3. Code:
// Convert aac/m4a/ogg/opus files to mp3. // Trigger required: "A Download Stopped". // Requires ffmpeg/ffprobe. Uses JD ffmpeg/ffprobe settings if available. // Overwrites destination file (mp3) if it already exists. if (link.isFinished()) { var fileName = link.name.replace(/(.+)(\..+$)/, "$1"); var fileType = link.name.replace(/(.+)(\..+$)/, "$2"); var sourceFile = link.getDownloadPath(); var audioFile = /\.(aac|m4a|ogg|opus)$/.test(sourceFile); if (audioFile) { var downloadFolder = package.getDownloadFolder(); var destFile = downloadFolder + "/" + fileName + ".mp3"; var ffmpeg = callAPI("config", "get", "org.jdownloader.controlling.ffmpeg.FFmpegSetup", null, "binarypath"); var ffprobe = callAPI("config", "get", "org.jdownloader.controlling.ffmpeg.FFmpegSetup", null, "binarypathprobe"); var data = JSON.parse(callSync(ffprobe, "-v", "quiet", "-print_format", "json", "-show_streams", "-show_format", sourceFile)); var streamsBitrate = data.streams[0].bit_rate ? data.streams[0].bit_rate : 0; var formatBitrate = data.format.bit_rate ? data.format.bit_rate : 0; var bitrate = Math.max(streamsBitrate, formatBitrate) / 1000; var deleteSourceFile = false; // Set this to true to delete source file after conversion. if (bitrate > 0) { callSync(ffmpeg, "-y", "-i", sourceFile, "-b:a", bitrate + "k", destFile); if (deleteSourceFile && getPath(destFile).exists()) deleteFile(sourceFile, false); } } } Alternate version (2021.11.04) Code:
/* Convert audio files to mp3 format Trigger : A download stopped */ if (link.finished) { var input = link.downloadPath; var output = input.replace(/(aac|m4a|ogg|opus)$/, "mp3"); if (input != output) { try { var ffmpeg = callAPI("config", "get", "org.jdownloader.controlling.ffmpeg.FFmpegSetup", null, "binarypath"); var bitrate = callSync(ffmpeg, "-i", input).match(/bitrate: (\d+) kb/)[1]; callAsync(function(error) { !error && getPath(input).delete(); }, ffmpeg, "-y", "-i", input, "-b:a", bitrate + "k", output); } catch (e) {}; } } Last edited by Jiaz; 12.08.2022 at 16:49. Reason: Added alternate version |
#2
|
|||
|
|||
![]()
Save youtube links and basic information to a html page
Code:
// Save youtube links and basic information to a html page. // Trigger required: "A Download Stopped" // Get link property String.prototype.prop = function() { return link.getProperty(this); }; // Convert duration to hh:mm:ss.ms format Date.prototype.duration = function() { var ms = parseInt((this % 1000) / 100); var ss = parseInt((this / 1000) % 60); var mm = parseInt((this / (1000 * 60)) % 60); var hh = parseInt((this / (1000 * 60 * 60)) % 24); hh = (hh < 10) ? "0" + hh : hh; mm = (mm < 10) ? "0" + mm : mm; ss = (ss < 10) ? "0" + ss : ss; return hh + ":" + mm + ":" + ss + "." + ms; }; // Get media bitrate Number.prototype.toKbps = function() { return ((this / mediaDuration) * 8).toFixed(2); }; // youtube media check var youtubeMedia = link.getHost() == "youtube.com" && (/\.(m4a|aac|ogg|mp3|mp4|webm)$/).test(link.getName()); // Get Data if (youtubeMedia) { var output = []; var variant = JSON.parse("YT_VARIANT".prop()); var variantData = JSON.parse(variant.data); var youtube = "<a href=\"" + "http"+ "s://youtube.com/"; var saveFile = link.getDownloadPath() + ".info.html"; var fileSize = link.getBytesTotal(); var demux = (/DEMUX/).test(variant.id); var audioSize = !demux ? "DASH_AUDIO_SIZE".prop() : fileSize; var videoSize = "DASH_VIDEO_SIZE".prop(); var mediaDuration = "YT_DURATION".prop(); var data = { Video: youtube + "watch?v=" + "YT_ID".prop() + "\">" + "YT_TITLE".prop() + "</a>", Playlist: "YT_PLAYLIST_ID".prop() && "YT_PLAYLIST_TITLE".prop() ? youtube + "playlist?list=" + "YT_PLAYLIST_ID".prop() + "\">" + "YT_PLAYLIST_TITLE".prop() + "</a>" : null, User: youtube + "user/" + "YT_USER_NAME".prop() + "\">" + "YT_USER_NAME".prop() + "</a>", Channel: youtube + "channel/" + "YT_CHANNEL_ID".prop() + "\">" + "YT_CHANNEL".prop() + "</a>" + "\r\n", Published: new Date("YT_DATE".prop()).toDateString(), Size: (fileSize / 1048576).toFixed(2) + " MiB", Duration: new Date(mediaDuration).duration(), Width: variantData.width, Height: variantData.height, FPS: variantData.fps, Audio_Bitrate: audioSize.toKbps() + " kbps", Video_Bitrate: !demux && fileSize > audioSize ? videoSize.toKbps() + " kbps" : null, Overall_Bitrate: !demux && fileSize > audioSize ? fileSize.toKbps() + " kbps" : null, Variant_ID: variant.id, }; // Generate output[] for (i in data) { if (data[i] && data[i] != -1) { output.push(i.replace(/_/g, " ") + " : " + data[i]); } } // Format output[] and save to html file try { deleteFile(saveFile, false); // Delete info file if it already exists on the disk. writeFile(saveFile, "<pre>" + output.join("<br>") + "</pre>", false); } catch (err) { log(err + ""); } } Last edited by Jiaz; 15.07.2019 at 13:33. |
#3
|
|||
|
|||
![]()
Extraction Scheduler
Code:
// Schedule Extraction // Trigger Required: Interval // Disable Auto Extract in Archive Extractor // Forum Topic: https://board.jdownloader.org/showthread.php?t=70655 var t = [21, 30]; //Set Starting Time [hours,minutes] e.g. [21,30] is 9:30 PM if ((new Date().setHours(t[0], t[1], 0, 0) % new Date() < interval)) { var links = getAllDownloadLinks(); for (i = 0; i < links.length; i++) { var link = links[i]; var autoExtract = link.getArchive().getInfo().autoExtract; if (link.isFinished() && link.getArchive() && link.getExtractionStatus() == null && autoExtract != "FALSE") { callAPI("extraction", "startExtractionNow", [link.getUUID()], []); } } } Rewritten: Code:
github.com/mgpai/resources/blob/master/jdownloader/eventscripter/scripts/Taobaibai.js Last edited by mgpai; 22.02.2018 at 17:00. Reason: Added link to rewritten script |
#4
|
|||
|
|||
![]()
Update JD when idle.
Code:
// Restart and Update JD when idle // Trigger Required: "Interval" var newInterval = 600000; if (interval == newInterval) { if (isDownloadControllerIdle()) { if (isUpdateAvailable() && !isExtracting() && !isCrawling()) { restartAndUpdate(); } else { if (!isAutoUpdateCheckEnabled()) { runUpdateCheck(); } } } } else { interval = newInterval; } //Functions function isUpdateAvailable() { return callAPI("update", "isUpdateAvailable"); } function isExtracting() { return callAPI("extraction", "getQueue").length > 0; } function isCrawling() { return callAPI("linkcrawler", "isCrawling"); } function restartAndUpdate() { callAPI("update", "restartAndUpdate"); } function isAutoUpdateCheckEnabled() { return callAPI("config", "get", "org.jdownloader.updatev2.UpdateSettings", null, "autoupdatecheckenabled"); } function runUpdateCheck() { callAPI("update", "runUpdateCheck"); } Updated version of the script can be found in Post# 881 of this thread. Last edited by mgpai; 15.09.2019 at 09:52. Reason: Link to new version of the script. |
#5
|
|||
|
|||
![]()
Generate md5 hash file in download folder
Code:
// Generate md5 hash file in download folder // Trigger: "A Download Stopped" // Latest updates: **External links are only visible to Support Staff**// Credits: mgpai if (link.isFinished()) { var filename = link.getName() var file = link.getDownloadPath() var folder = link.package.getDownloadFolder() var hashfile = folder + "/" + filename + "\.md5" if (getPath(hashfile).exists()) getPath(hashfile).delete() var MD5text = getChecksum("md5", file).toLowerCase() + "\t" + filename + "\n" writeFile(hashfile, MD5text, true) } Last edited by DoctorD90; 10.09.2016 at 12:29. |
#6
|
|||
|
|||
![]()
I would like to trigger updates after a reconnect, can you tell me how to modify the script for this?
Why dont't you need to check isDonwloading() ? thank you. |
#7
|
|||
|
|||
![]()
It might better to restart and update "Before a Reconnect". Running it "After a Reconnect", may interrupt downloads or any other activities which have started immediately after the reconnect, in which case updating while idle is a better option.
This script can also be used with "After a Reconnect" trigger. Code:
// Restart and update, if updates are available // Trigger: Before a Reconnect if (callAPI("update", "isUpdateAvailable")) callAPI("update", "restartAndUpdate"); It does check if downloads are running (isDownloadControllerIdle()). |
#8
|
|||
|
|||
![]() Quote:
Doesn't work for me? Is there an update? |
#9
|
|||
|
|||
![]()
Hello,
the code example Save youtube links and basic information to a html page contains the following invalid line: Code:
if (youtubeMedia) { var output = []; var variant = JSON.parse("YT_VARIANT".prop()); var variantData = JSON.parse(variant.data); var youtube = "<a href=\"External links are only visible to Support Staff; ![]() Many thanks and greetings JDFan |
#10
|
|||
|
|||
![]() Quote:
Code:
var youtube = "<a href=\"External links are only visible to Support Staff; Script: Code:
gist.github.com/mgpai/defe23044e32d7cec7756053997295e1/download |
#11
|
|||
|
|||
![]()
Split packages and create sub-folders
Adding custom command to context menu
Code:
// Split Packages and create sub-folder based on package length // Trigger : Linkgrabber Contextmenu Button Pressed // Forum Topic: https://board.jdownloader.org/showthread.php?t=70979 if (name == "Split Packages") { var package = lgSelection.getContextPackage(); var links = package.getDownloadLinks(); var newSize = 100; // Specify max number of links per package var UUIDS = []; var count = 1; if (links.length > newSize) { for (i = 0; i < links.length; i++) { var link = links[i]; UUIDS.push(link.getUUID()); } while (UUIDS.length) { var oldFolder = package.getDownloadFolder(); var packageName = package.getName(); var splitUUIDS = UUIDS.splice(0, newSize); var newFolder = oldFolder + "/" + pad(count); setNewFolder(); count++; } } } // Add sub folder function setNewFolder() { callAPI("linkgrabberv2", "movetoNewPackage", splitUUIDS, [], packageName, newFolder); } // Pad number with leading zeros function pad(num) { var a = num + ""; var b = (links.length / newSize).toFixed(0); while (a.length < b.length) a = "0" + a; return a; } |
#12
|
|||
|
|||
![]()
Simple history of downloaded links in text format.
Code:
// Simple history // Trigger Required : A Download Stopped if (link.isFinished()) { var a /*date*/ = new Date().toString().substring(4, 16); var b /*history folder*/ = JD_HOME + "/auto/history/"; var c /*history file Name */ = a + ".txt"; var d /*download url*/ = link.getContentURL(); var e /*download file name*/ = link.getName(); if (!getPath(b).exists()) getPath(b).mkdirs(); writeFile(b + c, [d, e].join(",") + "\r\n", true); } |
#13
|
|||
|
|||
![]()
Hide/Unhide Infobar Window
Adding custom command to Tray menu
Code:
// Hide/Unhide Infobar Window // Trigger: Traymenu Button Pressed // Can also use other 'button pressed' triggers if you want to specify/use 'keyboard shortcut' // Requirements: Install and enable infobar extension // Forum Topic: https://board.jdownloader.org/showthread.php?t=70617 if (name = "Infobar") { var infobar = "org.jdownloader.extensions.infobar.InfoBarConfig"; var storage = "cfg/org.jdownloader.extensions.infobar.InfoBarExtension"; var windowVisible = callAPI("config", "get", infobar, storage, "windowvisible"); if (windowVisible) { callAPI("config", "set", infobar, storage, "windowvisible", false); } else { callAPI("config", "set", infobar, storage, "windowvisible", true); } } Last edited by mgpai; 18.10.2016 at 10:56. Reason: Modified scrtipt to Hide/Unhide Infobar Window instead of Enable/Disable Infobar Extension |
#14
|
||||
|
||||
![]() Quote:
Falls im Beitrag ergrenzt kann dieser Post gelöscht werden :-) @Administratoren: Wäre es nicht schlecht für kommende Scripts ein extra Foren-bereich einzurichten und für jeden Script ein Thema zu erstellen. Dann noch ein Verweis via URL im JD in der Script-Erweiterung auf den Foren bereich... Scheint künftig übersichtlicher und Interessanter oder? Klasse wärs, wenn genannte Scripte bei "Beispielen im JD auftauchen würden und ggf. die außenstehenden Infos im Script dokumentiert werden sodass sie funktionstüchtig laufen. Beispielsweise wie [...] Default folder: "< [...] Oder eben der Hinweis via URL.
__________________
sorry about my gramma (dyslexia).
——————————————————————————————————— SuFu/Google: Inoffizielle JDownloader Plugins, Erweiterungen, Addons & Tools Last edited by Spongshga; 11.11.2016 at 00:09. |
#15
|
|||
|
|||
![]() Quote:
Code:
var b /*history folder*/ = "c:/myFolder/history/"; Note: Path should always include "/" at the end. |
#16
|
|||
|
|||
![]()
Hello mgpai,
i have crawljob white description inside. Is it possible to write this in txt file and do in downloadfolder? I have no idea how to implement this. regards https://board.jdownloader.org/showthread.php?t=71524 |
#17
|
|||
|
|||
![]() Quote:
Hello, It works. But how can I add information about the source? (the webpage where found the link) Last edited by metozeton; 29.09.2020 at 01:35. |
#18
|
|||
|
|||
![]() Quote:
Code:
// Export related URLs // Trigger : Linkgrabber Contextmenu Button Pressed OR DownloadList Contextmenu Button Pressed if (name == "Export URLs") { var lgSelection, dlSelection, selection = lgSelection || dlSelection; if (selection) { var folder = JD_HOME + "/auto/export/", // <- Folder for exporting the text files date = new Date().toString().substring(4, 24).replace(/:/g, "."), // <- Timestamp used in file name name = lgSelection ? " - LG Selection.txt" : " - DL Selection.txt", file = date + name, content = [], links = selection.links, addContent = function(arr, data) { if (data && arr.indexOf(data) == -1) { arr.push(data); } }; links.forEach(function(link) { var arr = []; addContent(arr, link.name); addContent(arr, link.contentURL); addContent(arr, link.pluginURL); addContent(arr, link.containerURL); addContent(arr, link.referrerURL); addContent(arr, link.originURL); content.push(arr.join(",")); }) if (!getPath(folder).exists()) { getPath(folder).mkdirs(); } writeFile(folder + file, content.join("\r\n"), true); } } |
#19
|
|||
|
|||
![]() Quote:
Could you please help modify this script to save status of all links currently in Jdownloader (not just downloaded links but also links that are currently downloading, links are waiting to download and error links). My intention is to run this script once per day to get status of all links. I am currently running Jdownloader on a small Raspberry Pi that doesn't have a screen, it would be very convenient to get status of all links in a text file every day. Thank you! Last edited by TomNguyen; 02.07.2022 at 04:10. |
#20
|
|||
|
|||
![]()
EDIT by psp: Thank you mgpai - I've removed my request- post above this one to keep the thread clean!
Code:
// Add single URL at user defined interval // Trigger required: "Interval" var setInterval = 60; // in minutes var link = "http://jdownloader.org/download/index"; // Specify URL to be added if (interval == setInterval * 60 * 1000) { callAPI("linkgrabberv2", "addLinks", { "deepDecrypt": true, "links": link }); } else { interval = setInterval * 60 * 1000; } Code:
// Add multiple URLs at user defined interval // Trigger required: "Interval" var setInterval = 60; // in minutes var feeds = JD_HOME + "/feeds/links.txt"; // Full path to text file containing the urls if (interval == setInterval * 60 * 1000) { callAPI("linkgrabberv2", "addLinks", { "deepDecrypt": true, "links": readFile(feeds) }); } else { interval = setInterval * 60 * 1000; } Last edited by pspzockerscene; 11.11.2016 at 02:36. |
![]() |
Thread Tools | |
Display Modes | |
|
|