JDownloader Community - Appwork GmbH
 

Notices

Reply
 
Thread Tools Display Modes
  #2001  
Old 04.11.2021, 16:44
reddy.shyam reddy.shyam is offline
Fibre Channel User
 
Join Date: Aug 2013
Posts: 123
Default

Quote:
Originally Posted by mgpai View Post
It is currently configured to append the next execution time to the script name. Each time it is executed, the next execution time will be appended to the script name in the eventscripter panel.

If your current script name is reddy.shyam (you have to set the current name in the script), it will be renamed to reddy.shyam | Next execution: Nov 04 2021 15:46:59.
Hi @mgpai, yes, I see this, pretty neat actually. Just that I will have to goto setting each time to check the next trigger time. You guys have made us so lazy already that everything is a big task for us.
Reply With Quote
  #2002  
Old 04.11.2021, 16:45
reddy.shyam reddy.shyam is offline
Fibre Channel User
 
Join Date: Aug 2013
Posts: 123
Default

Quote:
Originally Posted by mgpai View Post
You will have to wait for Jiaz to implement it. I can provide a script which can append it to the title bar.
Title bar would be fantastic as well. Can you do this please?
Reply With Quote
  #2003  
Old 04.11.2021, 16:51
mgpai mgpai is offline
Script Master
 
Join Date: Sep 2013
Posts: 1,533
Default

Quote:
Originally Posted by reddy.shyam View Post
Title bar would be fantastic as well. Can you do this please?
Add this code at the end of the existing script:
Code:
/*
    Append next execution time to title bar
*/

var current = "|#TITLE|| - #SPEED/s|| - #UPDATENOTIFY|"; // Replace this with your current title pattern
var date = new Date(Date.now() + interval).toString().substr(4, 20);
var pattern = current + "|" + date;

callAPI(
    "config", "set",
    "org.jdownloader.settings.GraphicalUserInterfaceSettings",
    null, "TitlePattern", pattern
)
Reply With Quote
  #2004  
Old 04.11.2021, 17:13
reddy.shyam reddy.shyam is offline
Fibre Channel User
 
Join Date: Aug 2013
Posts: 123
Default

Quote:
Originally Posted by mgpai View Post
Add this code at the end of the existing script:
Code:
/*
    Append next execution time to title bar
*/

var current = "|#TITLE|| - #SPEED/s|| - #UPDATENOTIFY|"; // Replace this with your current title pattern
var date = new Date(Date.now() + interval).toString().substr(4, 20);
var pattern = current + "|" + date;

callAPI(
    "config", "set",
    "org.jdownloader.settings.GraphicalUserInterfaceSettings",
    null, "TitlePattern", pattern
)
Super, thanks again @mgpai. What if I dont want this on script window anymore?
Reply With Quote
  #2005  
Old 04.11.2021, 17:18
mgpai mgpai is offline
Script Master
 
Join Date: Sep 2013
Posts: 1,533
Default

Quote:
Originally Posted by reddy.shyam View Post
What if I dont want this on script window anymore?
Remove the relevant code from the script and manually restore the old name.
Reply With Quote
  #2006  
Old 04.11.2021, 17:22
reddy.shyam reddy.shyam is offline
Fibre Channel User
 
Join Date: Aug 2013
Posts: 123
Default

Quote:
Originally Posted by mgpai View Post
Remove **External links are only visible to Support Staff**... from the script and manually restore the old name.
Thanks @mgpai. You are super awesome! Appreciate your time and help.

Have a good day!
Reply With Quote
  #2007  
Old 04.11.2021, 18:18
KlaraBlik KlaraBlik is offline
I will play nice!
 
Join Date: Jun 2020
Posts: 2
Default Move only certain file types after extraction

Hi there and thanks for all the ideas around the EventScripter. I found this script somewhere above to move downloads after extraction,

Quote:
Originally Posted by mgpai View Post
Code:
/*
    Move extracted files
    Trigger: Archive extraction finished
*/

var source = "c:\\downloading";
var destination = "d:\\finished";

archive.extractedFilePaths.forEach(function(filePath) {
    var newFolder = filePath.parent.toString().replace(source,destination);
    filePath.moveTo(newFolder);
})
but I would like to move only certain file types (e.g. .mp3) after successful extraction to a new folder. How do I have to amend this script?

Many thanks for your support and ideas!

KlaraBlik
Reply With Quote
  #2008  
Old 05.11.2021, 06:17
mgpai mgpai is offline
Script Master
 
Join Date: Sep 2013
Posts: 1,533
Default

Quote:
Originally Posted by KlaraBlik View Post
... I would like to move only certain file types (e.g. .mp3) after successful extraction to a new folder. How do I have to amend this script?
This script will preserver folder structure. To move all the files to a single folder you can also just use a packagizer rule.

Code:
/*
    Move extracted files
    Trigger: Archive extraction finished
*/

var source = "C:\\Downloads";
var destination = "C:\\Finished";
var fileTypes = ["mp3", "ex1", "ex2"];

archive.extractedFilePaths.forEach(function(filePath) {
    if (fileTypes.indexOf(filePath.extension) > -1) {
        var newFolder = filePath.parent.toString().replace(source, destination);
        filePath.moveTo(newFolder);
    }
})
Reply With Quote
  #2009  
Old 05.11.2021, 09:36
KlaraBlik KlaraBlik is offline
I will play nice!
 
Join Date: Jun 2020
Posts: 2
Default

@mgpai: Thank you so much for your fast answer, I will give it a try! Only one question left: Is there a event which covers both downloaded and extracted mp3-files or would you recommend two scripts (one to move downloaded files which were not zipped) and one to move extracted files?
Reply With Quote
  #2010  
Old 05.11.2021, 11:27
mrjjones mrjjones is offline
Vacuum Cleaner
 
Join Date: Nov 2021
Posts: 17
Post Custom Bubble Notify?

Is there anyway, perhaps with scripting, to send any custom bubble notifications? I'd like to have a bubble notify with package/link name on link added to the link grabber. Although I didn't try, it looks like there is an advanced setting to show the filename when downloads are added, but I'm looking to have something like that when links are added to the link grabber instead like from the clipboard.
Reply With Quote
  #2011  
Old 05.11.2021, 13:47
mgpai mgpai is offline
Script Master
 
Join Date: Sep 2013
Posts: 1,533
Default

Quote:
Originally Posted by KlaraBlik View Post
@mgpai: Thank you so much for your fast answer, I will give it a try! Only one question left: Is there a event which covers both downloaded and extracted mp3-files or would you recommend two scripts (one to move downloaded files which were not zipped) and one to move extracted files?
Extraction is post download, so they are 2 different events. You will have use 2 different scripts, or a single packagizer rule.

Packagizer rule:
Code:
if > file name contains > *.mp3
then set > download directory > c:\downloads\JDownloader\downloaded\mp3
then do > move to > c:\downloads\JDownloader\extracted\mp3

The example rule uses different folders for normal and extracted files. Same/single folder can also be used for both.
Reply With Quote
  #2012  
Old 05.11.2021, 14:12
Jiaz's Avatar
Jiaz Jiaz is offline
JD Manager
 
Join Date: Mar 2009
Location: Germany
Posts: 79,286
Default

@mrjjones: You could use 3rd party tools/support for your OS/mobile...and then use script to send noticiation to this app/tool/service which then shows the notification for you.
__________________
JD-Dev & Server-Admin
Reply With Quote
  #2013  
Old 05.11.2021, 14:47
tb21 tb21 is offline
Junior Loader
 
Join Date: Oct 2021
Posts: 14
Default

I hope you don't mind if I add another question into the mix, I'm not sure yet if this thread is ok for that, or whether I should open a new thread for each? Things seem to mix up here very quickly, but anyway.. let's have the question now. o)

I have problems moving folders with FilePath.moveTo(), renameTo(), renamePath(). In the meantime I started to write my own functions to copy/move folder structures around, but is that recommended? Should the mentioned methods work for folders as well, even across drives? tia! o)
Reply With Quote
  #2014  
Old 05.11.2021, 15:21
Jiaz's Avatar
Jiaz Jiaz is offline
JD Manager
 
Join Date: Mar 2009
Location: Germany
Posts: 79,286
Default

@tb21: move only works if src and dest are on same drive/mountpoint.
__________________
JD-Dev & Server-Admin
Reply With Quote
  #2015  
Old 05.11.2021, 15:50
mrjjones mrjjones is offline
Vacuum Cleaner
 
Join Date: Nov 2021
Posts: 17
Default

Quote:
Originally Posted by Jiaz View Post
@mrjjones: You could use 3rd party tools/support for your OS/mobile...and then use script to send noticiation to this app/tool/service which then shows the notification for you.
@Jiaz, just the advice I was looking for. Thank you.

If anyone else needs, for linux there is notify-send (install with: sudo apt install libnotify-bin) and use a JDownloader script like:

Code:
var linkName = link.getName();
callSync("notify-send",linkName+"");
Reply With Quote
  #2016  
Old 05.11.2021, 16:06
tb21 tb21 is offline
Junior Loader
 
Join Date: Oct 2021
Posts: 14
Default

Ok, not optimal and I would think it doesn't even work correctly for same mountpoints/drives when folders are involved, but anyway, enough reason for me to carry on with the custom functions, thank you! o)

btw: Is there a (better) reference somewhere for the mentioned methods? I started to test whether each method wants just path or fullpath (including name), but got exhausted quickly, since testing all the methods and how they work for files/folders, different parameters and same/different mountpoint is quite tedious.
Reply With Quote
  #2017  
Old 05.11.2021, 16:44
Jiaz's Avatar
Jiaz Jiaz is offline
JD Manager
 
Join Date: Mar 2009
Location: Germany
Posts: 79,286
Default

@mrjjones: You're welcome nice and easy solution

@tb21: I could not reproduce issues with moveTo when on same drive/mountpoint.

renameTo(returns false/true) is the same as rename(returns null/new File object): full path to file/folder
rename/moves the file/folder but does NOT auto create parent folder. fails if parent folder does not exist


moveTo(returns true/false): full path to file/folder
rename/moves the file/folder but does auto create parent folder if not exist yet


renameName: change name only -> new name of file/folder only
renamePath: change parent of file/folder -> full path of new parent folder, name of file/folder is the same
__________________
JD-Dev & Server-Admin

Last edited by Jiaz; 05.11.2021 at 20:07.
Reply With Quote
  #2018  
Old 05.11.2021, 19:06
tb21 tb21 is offline
Junior Loader
 
Join Date: Oct 2021
Posts: 14
Default

renamePath() seems to expect path for me, as it puts FilePathObj into the folder-path given.
It kind of makes sense for renamePath(), but you say it expects full path, which would include
a new name for the target folder, which I did not experience.
Code:
// moves files across drives (into existing path only), not folders
var r = testFoldObj.renamePath( /* path */ "D:\\lala");
These methods did not do so well with folders on my system (a Windows Server 2008 R2).
Code:
// always == false, it just copies the folder without content and does not delete src folder
var r = testFoldObj.moveTo( /* fullPath */ ); 

// always == false, fails completely for folders, does nothing, new fullpath or just new name both fail
var r = testFoldObj.renameTo( /* fullPath */ ); 

// always == null, fails completely for folders
var r = testFoldObj.renamePath( /* fullPath */ );
Not less interesting for me while tinkering, what's the actual difference between.. ?
renameTo(), rename(), renamePath() and renameName() - I get the last one at least I think.. o)
Reply With Quote
  #2019  
Old 05.11.2021, 19:16
tb21 tb21 is offline
Junior Loader
 
Join Date: Oct 2021
Posts: 14
Default

Let me add..
I mostly tried folders which contain subfolders (iirc).. If there are no know bugs and you are sure all this works es expected.. I won't start a fight o). I think I can get along with copying single items, rebuilding folder structure with mkdirs() and delete things afterwards if I want to turn a copy-operation into a move. I would have like to prevent unnecessary copy and disk space requirements for "same mountpoint" moves of course, but it's not a show stopper for me.
Reply With Quote
  #2020  
Old 05.11.2021, 20:03
Jiaz's Avatar
Jiaz Jiaz is offline
JD Manager
 
Join Date: Mar 2009
Location: Germany
Posts: 79,286
Default

@tb21: I've updated my post https://board.jdownloader.org/showpo...postcount=2017
Reason for newer methods is that the old methods follows File Java class while newer return different object and work differently (eg auto create parent folder)
Maybe the commands fail because of missing parent folder?
__________________
JD-Dev & Server-Admin

Last edited by Jiaz; 05.11.2021 at 20:08.
Reply With Quote
  #2021  
Old 05.11.2021, 21:14
tb21 tb21 is offline
Junior Loader
 
Join Date: Oct 2021
Posts: 14
Default

Ok, thank you, I think that could answer some of my questions, I will try some more. o) So the newer methods return null/object and create parents, is there any drawback using the new methods or any reason to still use the old ones?

EDIT: Found the source for some of the file/folder methods here, seems helpful to explore the differences:
github.com/mirror/jdownloader/blob/master/src/org/jdownloader/extensions/eventscripter/sandboxobjects/FilePathSandbox.java

Last edited by tb21; 05.11.2021 at 22:04.
Reply With Quote
  #2022  
Old 06.11.2021, 07:24
mgpai mgpai is offline
Script Master
 
Join Date: Sep 2013
Posts: 1,533
Default

Quote:
Originally Posted by tb21 View Post
I mostly tried folders which contain subfolders (iirc)..
I am guessing you are trying to move the entire folder using a single 'moveTo' call, which is not possible using this method.

You will have to use folder.getChildren() to recursively access/move each object in the folder. Using this method I have been able move entire folders with folder structure intact, even across different drives. It will however leave empty folders behind in the source location, which can also be removed using the same script.

Another option (perhaps easier one) is to use external programs (OS or 3rd party) in eventscripter to move it.
Reply With Quote
  #2023  
Old 06.11.2021, 12:56
tb21 tb21 is offline
Junior Loader
 
Join Date: Oct 2021
Posts: 14
Default

Yes, thank you for confirming, after analyzing the linked source file it is clear..
There is no recursive copy/move support in any of these methods. I did the getChildren() thing and did some new methods to make this work, I think they turned out nicely, will provide them here when final testing is done.

Using an external tool is an option, yes, but that would tie the script to specific OS variants unless you branch depending on OS (I saw you have methods to do that). There's another downside with external tools though, in case things go wrong, it's much harder to get down to the problem (needs analyzing of std-err output or something?!).

I am quite fine with the built in methods, the only thing I miss is being able to re-set the "modified" and "created" timestamps for copied/moved files. Losing timestamps is a severe disadvantage here. There is FilePath.getModifiedDate() already..

Who must I pay to add setModifiedDate(), getCreatedDate(), setCreatedDate()?
To get fully working OS independent, recursive copy and move without losing timestamps? o)
Reply With Quote
  #2024  
Old 06.11.2021, 21:57
mrjjones mrjjones is offline
Vacuum Cleaner
 
Join Date: Nov 2021
Posts: 17
Post callSync with parameters

Does anyone know how to pass along parameters with callSync? I'm trying to send notifications with "notify-send" in ubuntu like:

Code:
callSync("notify-send","some text");

and that works fine, but if I want to add an icon, like with "-i battery" to the notify-send command, it does nothing. I tried many combinations with no luck. Thanks for any advice.
Reply With Quote
  #2025  
Old 07.11.2021, 04:45
mgpai mgpai is offline
Script Master
 
Join Date: Sep 2013
Posts: 1,533
Default

Quote:
Originally Posted by mrjjones View Post
... I want to add an icon, like with "-i battery" ...
Code:
callSync("notify-send", "some text", "-i", "battery");
Reply With Quote
  #2026  
Old 07.11.2021, 12:16
Gbyte Gbyte is offline
I will play nice!
 
Join Date: Nov 2021
Posts: 4
Default

Quote:
Originally Posted by Jiaz View Post
@Gbyte:
Extraction.customextractionpathenabled
and
Extraction.customextractionpath
Now i get this error or is the mistake on my end?

I use this script in the event scripter:

Code:
var script = '/REDACTED/jdownloader-postprocess.sh'

var package = archive.getDownloadLinks() ? archive.getDownloadLinks()[0].getPackage() : null
var links = package ? package.getDownloadLinks() : []

function isReallyFinished() {
    for (var i = 0; i < links.length; i++) {
        if (links[i].getArchive() != null && links[i].getExtractionStatus() != "SUCCESSFUL" || !package.isFinished()) {
            return false
        }
    }
    return true
}

if (package && isReallyFinished()) {
    var command = [script, Extraction.customextractionpath(), package.getName(), package.getComment() ? package.getComment() : 'N/A', 'ARCHIVE_EXTRACTED']
    log(command)
    log(callSync(command))
}
Attached Images
File Type: png 88567576.png (233.1 KB, 1 views)
Reply With Quote
  #2027  
Old 07.11.2021, 15:08
mgpai mgpai is offline
Script Master
 
Join Date: Sep 2013
Posts: 1,533
Default

Quote:
Originally Posted by Gbyte View Post
Now i get this error or is the mistake on my end?
Since I cannot access your screenshot, I cannot also know the exact error you are getting. But, the following method used in the script is invalid:
Code:
Extraction.customextractionpath()

Try replacing it with:
Code:
archive.getExtractToFolder();
Reply With Quote
  #2028  
Old 07.11.2021, 22:10
Gbyte Gbyte is offline
I will play nice!
 
Join Date: Nov 2021
Posts: 4
Default

Quote:
Originally Posted by mgpai View Post
Since I cannot access your screenshot, I cannot also know the exact error you are getting. But, the following method used in the script is invalid:
Code:
Extraction.customextractionpath()

Try replacing it with:
Code:
archive.getExtractToFolder();
Thank you a lot. Now it works :D

Note for the mod: When will my account be unlocked for "more" freely usage?
Reply With Quote
  #2029  
Old 07.11.2021, 22:58
mrjjones mrjjones is offline
Vacuum Cleaner
 
Join Date: Nov 2021
Posts: 17
Default

Quote:
Originally Posted by mgpai View Post
Code:
callSync("notify-send", "some text", "-i", "battery");
@mgpai thank you very much. It seems so obvious now to split the -i and battery which is something I didn't try. Ugh.
Reply With Quote
  #2030  
Old 08.11.2021, 00:29
raztoki's Avatar
raztoki raztoki is offline
English Supporter
 
Join Date: Apr 2010
Location: Australia
Posts: 17,611
Default

@mrjjones
yes for some reason you cant have any spaces between switches and/or user defined section, must be all separated.

@Gbyte
unfortunately it has nothing todo with your account type, every user can post images/urls/etc but can not be viewed by anyone but moderators/admins. This is due to security/privacy concerns.
__________________
raztoki @ jDownloader reporter/developer
http://svn.jdownloader.org/users/170

Don't fight the system, use it to your advantage. :]
Reply With Quote
  #2031  
Old 08.11.2021, 02:16
JDL1059 JDL1059 is offline
Junior Loader
 
Join Date: Oct 2021
Posts: 10
Default

Quote:
Originally Posted by mgpai View Post
Code:
/*
    Interval > Add urls
    Trigger : Interval (Recommended 3600000 or more)
*/

var file = "Downloads/.torrent files/JDL Sync.txt";// <- Set path to text file

try {
    var links = readFile(getPath(file));

    callAPI("linkgrabberv2", "addLinks", {
        links: links
    })
} catch (e) {};
thank you. What are the steps to enable this script? I went to "Event Scripter", clicked "add", set the "Trigger" to "Interval" and then within the Edit Script button added the code above pointing to my text file which has 4 different megaupload links. I set the call interval to 259200000 i.e. 3 days. Synchronous execution of script checkbox is ticked. I hit test compile and it says successful, but when i hit test run, nothing happens. I tried changing the interval to 1000ms and nothing happened either. Any idea? **External links are only visible to Support Staff**... of my JDL install.
Reply With Quote
  #2032  
Old 08.11.2021, 05:52
mgpai mgpai is offline
Script Master
 
Join Date: Sep 2013
Posts: 1,533
Default

Quote:
Originally Posted by JDL1059 View Post
.... I hit test compile and it says successful, but when i hit test run, nothing happens ...
The url in your post is obfuscated. Most likely the file path is invalid and hence the script is unable to find the file. Use the following script for testing, it will display the relevant error message.

Code:
/*
    Interval > Add urls
    Trigger : Interval (Recommended 3600000 or more)
*/

var file = "Downloads/.torrent files/JDL Sync.txt"; // <- Set path to text file

try {
    var links = readFile(getPath(file));

    callAPI("linkgrabberv2", "addLinks", {
        links: links
    })
} catch (e) {
    alert(e.message);
};

Pleas note, JD should be running for a longer period than the interval specified for it to be triggered.
Reply With Quote
  #2033  
Old 09.11.2021, 00:17
Crank436 Crank436 is offline
Ultra Loader
 
Join Date: Aug 2016
Posts: 45
Default

Hey!
Maybe you can help me, im new to this scripting stuff.
I'm trying to write a script, to always have a specific amount of time between two reconnects.
I have one script "after each reconnect" which should safe the current time.
Another script "before each reconnect" which checks, if the time since the last reconnect is < x, and if not it waits until its < x (e.g. 90s).

Now my problem: I cant access the variable from the first script in the second one. How can I make this global? I read that its global in Javascript, if its not inside a function. It isnt, its just
now = new Date()

Sorry, I'm really a total new to this...
Reply With Quote
  #2034  
Old 09.11.2021, 00:45
mgpai mgpai is offline
Script Master
 
Join Date: Sep 2013
Posts: 1,533
Default

Quote:
Originally Posted by Crank436 View Post
I cant access the variable from the first script in the second one. How can I make this global?
You can find details on the method in the built-in help in script editor.
Code:
/*
    After a reconnect
*/
    
setProperty("lastReconnectTime", Date.now(), true);
Code:
/*
    Before a reconnect
*/

var lastReconnectTime = getProperty("lastReconnectTime", true);
Reply With Quote
  #2035  
Old 09.11.2021, 16:34
stakelabel stakelabel is offline
Baby Loader
 
Join Date: Nov 2021
Posts: 6
Default Site Specific Script

hi, Thanks for the great software!

(1)Pass through the link grabber.
There is always a URL to download.

I tried, but dont work..
--
var host = "myhost.com";
var myString = myDownloadLink.getDownloadHost();
startDownloads();
--

(2)Unzip after downloading only the specified URL
Now everything is unzip after download.

I found a script that does batch processing after unzipping. tnx:)
callAsync(function(){},"cmd","/c","c:/myFolder/myBatch.bat");
Reply With Quote
  #2036  
Old 09.11.2021, 16:42
mgpai mgpai is offline
Script Master
 
Join Date: Sep 2013
Posts: 1,533
Default

Quote:
Originally Posted by stakelabel View Post
I tried, but dont work..
Are both scripts not working? Can you explain in detail what do you want the script to do or post your script here?
Reply With Quote
  #2037  
Old 09.11.2021, 17:28
stakelabel stakelabel is offline
Baby Loader
 
Join Date: Nov 2021
Posts: 6
Default

Quote:
Originally Posted by mgpai View Post
Are both scripts not working? Can you explain in detail what do you want the script to do or post your script here?
sorry,, I am looking for two scripts.
Reply With Quote
  #2038  
Old 09.11.2021, 17:32
mgpai mgpai is offline
Script Master
 
Join Date: Sep 2013
Posts: 1,533
Default

Quote:
Originally Posted by stakelabel View Post
sorry,, I am looking for two scripts.
I will need more info. Contact me in IRC:
Code:
kiwiirc.com/nextclient/irc.libera.chat/#jdownloader
Reply With Quote
  #2039  
Old 09.11.2021, 19:26
Crank436 Crank436 is offline
Ultra Loader
 
Join Date: Aug 2016
Posts: 45
Default

Thank you for your help Mr Script Master!
Reply With Quote
  #2040  
Old 12.11.2021, 18:59
JDL1059 JDL1059 is offline
Junior Loader
 
Join Date: Oct 2021
Posts: 10
Default

Quote:
Originally Posted by mgpai View Post
The url in your post is obfuscated. Most likely the file path is invalid and hence the script is unable to find the file. Use the following script for testing, it will display the relevant error message.

Code:
/*
    Interval > Add urls
    Trigger : Interval (Recommended 3600000 or more)
*/

var file = "Downloads/.torrent files/JDL Sync.txt"; // <- Set path to text file

try {
    var links = readFile(getPath(file));

    callAPI("linkgrabberv2", "addLinks", {
        links: links
    })
} catch (e) {
    alert(e.message);
};

Pleas note, JD should be running for a longer period than the interval specified for it to be triggered.
ah thank you. I got this working perfectly. Amazing!!!
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

All times are GMT +2. The time now is 17:15.
Provided By AppWork GmbH | Privacy | Imprint
Parts of the Design are used from Kirsch designed by Andrew & Austin
Powered by vBulletin® Version 3.8.10 Beta 1
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.