<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.mediamonkey.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ludek</id>
	<title>MediaMonkey Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mediamonkey.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ludek"/>
	<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/Special:Contributions/Ludek"/>
	<updated>2026-05-23T13:15:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.4</generator>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=Working_with_Native_Objects_%26_Data&amp;diff=12026</id>
		<title>Working with Native Objects &amp; Data</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=Working_with_Native_Objects_%26_Data&amp;diff=12026"/>
		<updated>2025-07-29T20:50:14Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Read/Write Locks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In MediaMonkey 5, data from the database is managed by native objects called &#039;&#039;Shared Objects&#039;&#039;. Unless your addon requires heavy customization, you will not need to handle database calls yourself. &lt;br /&gt;
&lt;br /&gt;
=Concepts=&lt;br /&gt;
&lt;br /&gt;
==Shared==&lt;br /&gt;
These objects are not normal JavaScript objects with properties. They contain native (compiled) code and their properties are accessible from all windows. So unlike normal JS objects, changing one of their properties will cause it to be immediately updated everywhere else in the code. It&#039;s an advantage of the way MM5 was programmed - It lets us do all our intensive database operations in multithreaded native code, freeing up the JavaScript thread to just handle UI.&lt;br /&gt;
&lt;br /&gt;
If you open the Chromium dev tools (on a debug build, by right click &amp;gt; Inspect Element, and print out one of the shared objects to the console, you&#039;ll notice that it says &amp;quot;native code&amp;quot; instead of showing a JavaScript function declaration.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;gt; trackList.forEach&lt;br /&gt;
&amp;lt; ƒ forEach() { [native code] }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Read/Write Locks==&lt;br /&gt;
In order for these database operations to be multithreaded, we need to implement a concept called &#039;&#039;read locks&#039;&#039; and &#039;&#039;write locks&#039;&#039;. Consider what could happen if one thread attempted to write while another thread attempted to read data. The thread attempting a read will have no guarantee that the data is intact. It could be read either before the new value is written or after, or it could be read at the exact moment while the data is being overwritten, which would produce garbage data.&lt;br /&gt;
&lt;br /&gt;
How do we avoid that issue? We prevent reads and writes from happening at the same time. Before writing data, the thread will wait for all readers to finish, and then it writes. Conversely, before reading data, the thread will wait for a write to finish before starting. &lt;br /&gt;
Think of it like a stop light at a highway. Reads are like the highway with multiple lanes; Multiple read cars can pass at once, and while read cars are passing, write cars have to stop. Once the reads finish, the write car can pass through.&lt;br /&gt;
&lt;br /&gt;
[https://www.mediamonkey.com/docs/api/classes/Native.SharedBase.html#locked SharedList.locked()] enters a read lock. If you need to access individual items of a list, and need to work with indices, use &amp;lt;code&amp;gt;locked()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
trackList.locked(function () {&lt;br /&gt;
	// This code will execute as soon as a read lock has been acquired.&lt;br /&gt;
	// There is NO GUARANTEE that it will execute immediately.&lt;br /&gt;
	var firstTrack = trackList.getValue(0);&lt;br /&gt;
	var lastTrack = trackList.getValue(trackList.count - 1);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://www.mediamonkey.com/docs/api/classes/Native.SharedList.html#modifyAsync SharedList.modifyAsync()] enters a write lock. If you need to &#039;&#039;modify&#039;&#039; tracks in a list, use &amp;lt;code&amp;gt;modifyAsync()&amp;lt;/code&amp;gt;. Note: You &#039;&#039;are&#039;&#039; allowed to read values in a write lock. It will simply prevent other threads from reading that list until you are done.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
trackList.modifyAsync(function () {&lt;br /&gt;
	// This code will execute as soon as a write lock has been acquired.&lt;br /&gt;
	// There is NO GUARANTEE that it will execute immediately.&lt;br /&gt;
	var firstTrack = trackList.getValue(0);&lt;br /&gt;
	firstTrack.custom1 = &amp;quot;Hello World&amp;quot;;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you do not need to access list items with indices, use the more convenient [https://www.mediamonkey.com/docs/api/classes/Native.SharedList.html#forEach SharedList.forEach()] function. It will execute your callback for each item in the list, and it will automatically wait for a read lock.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
trackList.forEach(function (track) {&lt;br /&gt;
	// This code will execute as soon as a write lock has been acquired.&lt;br /&gt;
	// There is NO GUARANTEE that it will execute immediately.&lt;br /&gt;
	console.log(track.title);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods like [https://www.mediamonkey.com/docs/api/classes/Native.SharedList.html#clear clear()] and [https://www.mediamonkey.com/docs/api/classes/Native.SharedList.html#selectRangeAsync selectRangeAsync()] automatically enter write locks, so you do not need to call &amp;lt;code&amp;gt;modifyAsync()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For performance reasons, please use asynchronous methods (with &amp;quot;Async&amp;quot; at the end of the method name) as much as possible, &#039;&#039;&#039;especially if you are processing a lot of data&#039;&#039;&#039;. Unlike the native objects, JavaScript only has one thread, so if you do a lot of processing, it will block the rest of the UI. &lt;br /&gt;
&lt;br /&gt;
There is one exception to the above rule: If you need to retrieve all values of &#039;&#039;one particular property&#039;&#039; in a large list (For example: a list of all track titles), consider using the synchronous method [https://www.mediamonkey.com/docs/api/classes/Native.SharedList.html#getAllValues getAllValues()]. It is much faster than using forEach().&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var listOfTitles = trackList.getAllValues(&#039;title&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TL;DR:&#039;&#039; &lt;br /&gt;
# SharedLists work differently from normal JavaScript arrays and objects. &lt;br /&gt;
# For most cases, you can use &amp;lt;code&amp;gt;forEach()&amp;lt;/code&amp;gt; to get data from each item in the list.&lt;br /&gt;
# To modify contents of a list, use &amp;lt;code&amp;gt;modifyAsync()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Don&#039;t do tons of calculations / operations in a synchronous function; Make your code as asynchronous as possible.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;More coming soon&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=Working_with_Native_Objects_%26_Data&amp;diff=12025</id>
		<title>Working with Native Objects &amp; Data</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=Working_with_Native_Objects_%26_Data&amp;diff=12025"/>
		<updated>2025-07-29T20:49:23Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Read/Write Locks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In MediaMonkey 5, data from the database is managed by native objects called &#039;&#039;Shared Objects&#039;&#039;. Unless your addon requires heavy customization, you will not need to handle database calls yourself. &lt;br /&gt;
&lt;br /&gt;
=Concepts=&lt;br /&gt;
&lt;br /&gt;
==Shared==&lt;br /&gt;
These objects are not normal JavaScript objects with properties. They contain native (compiled) code and their properties are accessible from all windows. So unlike normal JS objects, changing one of their properties will cause it to be immediately updated everywhere else in the code. It&#039;s an advantage of the way MM5 was programmed - It lets us do all our intensive database operations in multithreaded native code, freeing up the JavaScript thread to just handle UI.&lt;br /&gt;
&lt;br /&gt;
If you open the Chromium dev tools (on a debug build, by right click &amp;gt; Inspect Element, and print out one of the shared objects to the console, you&#039;ll notice that it says &amp;quot;native code&amp;quot; instead of showing a JavaScript function declaration.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;gt; trackList.forEach&lt;br /&gt;
&amp;lt; ƒ forEach() { [native code] }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Read/Write Locks==&lt;br /&gt;
In order for these database operations to be multithreaded, we need to implement a concept called &#039;&#039;read locks&#039;&#039; and &#039;&#039;write locks&#039;&#039;. Consider what could happen if one thread attempted to write while another thread attempted to read data. The thread attempting a read will have no guarantee that the data is intact. It could be read either before the new value is written or after, or it could be read at the exact moment while the data is being overwritten, which would produce garbage data.&lt;br /&gt;
&lt;br /&gt;
How do we avoid that issue? We prevent reads and writes from happening at the same time. Before writing data, the thread will wait for all readers to finish, and then it writes. Conversely, before reading data, the thread will wait for a write to finish before starting. &lt;br /&gt;
Think of it like a stop light at a highway. Reads are like the highway with multiple lanes; Multiple read cars can pass at once, and while read cars are passing, write cars have to stop. Once the reads finish, the write car can pass through.&lt;br /&gt;
&lt;br /&gt;
[https://www.mediamonkey.com/docs/api/classes/Native.SharedBase.html#locked SharedList.locked()] enters a read lock. If you need to access individual items of a list, and need to work with indices, use &amp;lt;code&amp;gt;locked()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
trackList.locked(function () {&lt;br /&gt;
	// This code will execute as soon as a read lock has been acquired.&lt;br /&gt;
	// There is NO GUARANTEE that it will execute immediately.&lt;br /&gt;
	var firstTrack = trackList.getValue(0);&lt;br /&gt;
	var lastTrack = trackList.getValue(trackList.count - 1);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://www.mediamonkey.com/docs/api/classes/Native.SharedList.html#modifyAsync SharedList.modifyAsync()] enters a write lock. If you need to &#039;&#039;modify&#039;&#039; tracks in a list, use &amp;lt;code&amp;gt;modifyAsync()&amp;lt;/code&amp;gt;. Note: You &#039;&#039;are&#039;&#039; allowed to read values in a write lock. It will simply prevent other threads from reading that list until you are done.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
trackList.modifyAsync(function () {&lt;br /&gt;
	// This code will execute as soon as a write lock has been acquired.&lt;br /&gt;
	// There is NO GUARANTEE that it will execute immediately.&lt;br /&gt;
	var firstTrack = trackList.getValue(0);&lt;br /&gt;
	firstTrack.custom1 = &amp;quot;Hello World&amp;quot;;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you do not need to access list items with indices, use the more convenient [https://www.mediamonkey.com/docs/api/classes/Native.SharedList.html#forEach SharedList.forEach()] function. It will execute your callback for each item in the list, and it will automatically wait for a read lock.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
trackList.forEach(function (track) {&lt;br /&gt;
	// This code will execute as soon as a write lock has been acquired.&lt;br /&gt;
	// There is NO GUARANTEE that it will execute immediately.&lt;br /&gt;
	console.log(track.title);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods like [https://www.mediamonkey.com/docs/api/classes/SharedList.html#method_clear clear()] and [https://www.mediamonkey.com/docs/api/classes/Native.SharedList.html#selectRangeAsync selectRangeAsync()] automatically enter write locks, so you do not need to call &amp;lt;code&amp;gt;modifyAsync()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For performance reasons, please use asynchronous methods (with &amp;quot;Async&amp;quot; at the end of the method name) as much as possible, &#039;&#039;&#039;especially if you are processing a lot of data&#039;&#039;&#039;. Unlike the native objects, JavaScript only has one thread, so if you do a lot of processing, it will block the rest of the UI. &lt;br /&gt;
&lt;br /&gt;
There is one exception to the above rule: If you need to retrieve all values of &#039;&#039;one particular property&#039;&#039; in a large list (For example: a list of all track titles), consider using the synchronous method [https://www.mediamonkey.com/docs/api/classes/Native.SharedList.html#getAllValues getAllValues()]. It is much faster than using forEach().&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var listOfTitles = trackList.getAllValues(&#039;title&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TL;DR:&#039;&#039; &lt;br /&gt;
# SharedLists work differently from normal JavaScript arrays and objects. &lt;br /&gt;
# For most cases, you can use &amp;lt;code&amp;gt;forEach()&amp;lt;/code&amp;gt; to get data from each item in the list.&lt;br /&gt;
# To modify contents of a list, use &amp;lt;code&amp;gt;modifyAsync()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Don&#039;t do tons of calculations / operations in a synchronous function; Make your code as asynchronous as possible.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;More coming soon&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=Getting_Started_(Addons)&amp;diff=11035</id>
		<title>Getting Started (Addons)</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=Getting_Started_(Addons)&amp;diff=11035"/>
		<updated>2024-03-06T18:06:02Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* MediaMonkey folder structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;For a tutorial on developing addons for MediaMonkey 4, see [[Scripting (MM4)]]&lt;br /&gt;
&lt;br /&gt;
=Additional Links=&lt;br /&gt;
* The [https://www.mediamonkey.com/forum/viewtopic.php?f=27&amp;amp;t=81285 &#039;&#039;&#039;Developer Forum pinned post&#039;&#039;&#039;] provides a summary of the information provided here, plus a few additional notes.&lt;br /&gt;
* The [https://www.mediamonkey.com/docs/api/ &#039;&#039;&#039;API Reference&#039;&#039;&#039;] is a complete reference to all the functionality provided both by MM native code and JS libraries.&lt;br /&gt;
* [[Important Methods and Utilities (Addons)|&#039;&#039;&#039;Important Methods and Utilities&#039;&#039;&#039;]] provides a list of some of the most notable functionality provided.&lt;br /&gt;
* &#039;&#039;&#039;[[Methods_Added_Post_5.0|Methods added Post 5.0]]&#039;&#039;&#039; provides a list of methods that have been added &#039;&#039;after&#039;&#039; version 5.0.0, which you must be mindful of when publishing an addon.&lt;br /&gt;
* &#039;&#039;&#039;[[Working_with_Native_Objects_&amp;amp;_Data|Working with Native Objects &amp;amp; Data]]&#039;&#039;&#039; covers the concepts of data sources and native objects.&lt;br /&gt;
* The [https://www.mediamonkey.com/forum/viewforum.php?f=27 &#039;&#039;&#039;MM5 Developer Forum&#039;&#039;&#039;] is where you can find and ask questions related to developing MM5 addons.&lt;br /&gt;
* The [https://www.mediamonkey.com/wiki/Skinning_Guide &#039;&#039;&#039;Skinning Guide&#039;&#039;&#039;] provides information on how to create skins.&lt;br /&gt;
* [[Controlling MM5 from External Applications|&#039;&#039;&#039;Controlling MM5 from External Applications&#039;&#039;&#039;]] discusses the different methods of controlling MediaMonkey 5 from other applications.&lt;br /&gt;
&lt;br /&gt;
=Introduction to Making Addons in MediaMonkey 5=&lt;br /&gt;
&lt;br /&gt;
MediaMonkey 5 is a fully HTML-based desktop application which uses Chromium for rendering. This means that the entire UI is driven by a &#039;&#039;&#039;platform-independent&#039;&#039;&#039; HTML/CSS/JS stack, which is fully accessible to developers and skinners. JS in cooperation with native code drives the non-visual aspects, also fully controllable by developers. This gives unprecedented customization options to create beautiful skins, new or enhanced functionality and great addons in general.&lt;br /&gt;
&lt;br /&gt;
Scripting in MediaMonkey 5 differs greatly from MediaMonkey 4 and below, because it has been designed from the ground-up. It is not difficult to learn, especially if you are familiar with web programming. If you are coming from writing MediaMonkey 4 addons, you will get adjusted in no time at all.&lt;br /&gt;
&lt;br /&gt;
=Hello World example=&lt;br /&gt;
&lt;br /&gt;
Here is a basic Hello World example for a MediaMonkey 5 addon.&lt;br /&gt;
&lt;br /&gt;
Inside a new folder, create a file named info.json with the essential information about your addon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;title&amp;quot;: &amp;quot;My First Addon&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;myFirstAddon&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Hello world!&amp;quot;,&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;general&amp;quot;,&lt;br /&gt;
    &amp;quot;author&amp;quot;: &amp;quot;Jane Doe&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, create a file named mainwindow_add.js. This code will get added to the end of mainwindow.js, and it will run when MediaMonkey starts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Execute when the window is ready&lt;br /&gt;
window.whenReady(() =&amp;gt; {&lt;br /&gt;
    uitools.toastMessage.show(&#039;Hello world!&#039;, {&lt;br /&gt;
        disableUndo: true&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, select your two files and package them into a zip. Make sure that they are in the root of your zip archive and not inside a subfolder. Rename it to myFirstAddon.mmip.&lt;br /&gt;
&lt;br /&gt;
Inside MediaMonkey5, go to Tools &amp;gt; Addons, click Add, and select your addon. After it installs and you reload the window, you will get a popup &amp;quot;toast&amp;quot; message on the bottom of the screen.&lt;br /&gt;
&lt;br /&gt;
=MMIP (MediaMonkey Installer Packages)=&lt;br /&gt;
The center of all MediaMonkey add-ons is the MMIP. There is nothing special about the file format itself; it is just a ZIP archive with a different filename. You can use any standard method to zip the files, and then just rename it to a .mmip file.&lt;br /&gt;
&lt;br /&gt;
If you wish to automate the process of zipping the MMIP packages, you are in luck.&lt;br /&gt;
* There is a tool named pack-mmip which allows you to automatically package MMIPs from the command line. It is available here: https://github.com/JL102/pack-mmip&lt;br /&gt;
* If your code is on Github, you can use a pipeline to automatically package your addon whenever you commit changes: https://www.mediamonkey.com/forum/viewtopic.php?p=476534&lt;br /&gt;
&lt;br /&gt;
==Folder Structure==&lt;br /&gt;
&lt;br /&gt;
===Metadata (info.json)===&lt;br /&gt;
At the root of an MMIP, there must be a file named info.json. It includes all essential information about the addon. It cannot be in a subfolder. &lt;br /&gt;
&lt;br /&gt;
Here is an example info.json:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;title&amp;quot;: &amp;quot;My Addon Name&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;myFirstAddon&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;This is my first addon!&amp;quot;,&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;minAppVersion&amp;quot;: &amp;quot;5.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;general&amp;quot;,&lt;br /&gt;
    &amp;quot;author&amp;quot;: &amp;quot;Jane Doe&amp;quot;,&lt;br /&gt;
    &amp;quot;icon&amp;quot;: &amp;quot;icon.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here are the possible attributes info.json can contain:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;max-width: 800px;&amp;quot;&lt;br /&gt;
	|-&lt;br /&gt;
		! Attribute&lt;br /&gt;
		! Required?&lt;br /&gt;
		! Information&lt;br /&gt;
	|-&lt;br /&gt;
		| title&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| This is the name of your addon that is visible to the user.&lt;br /&gt;
	|-&lt;br /&gt;
		| id&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| This is the unique ID of your addon. It does not have to be identical to your title, but it is recommended that your addon&#039;s id be similar to its title for organizational purposes. The id can include the following characters: [a-zA-Z0-9 -_&#039;()]. As of 5.0.3, this format will be enforced. We recommend sticking to an alphanumeric string without spaces.&lt;br /&gt;
	|-&lt;br /&gt;
		| description&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| The description of your addon. Make sure your description is brief, yet conveys the meaning and usage of your addon to the user. You can create line breaks in the description with \n.&lt;br /&gt;
	|-&lt;br /&gt;
		| version&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| The version number of your addon. It must be in the format %d.%d.%d, which is three period-separated numbers.&lt;br /&gt;
	|-&lt;br /&gt;
		| minAppVersion&lt;br /&gt;
		| no*&lt;br /&gt;
		| The minimum compatible version of MediaMonkey for your addon. Please consult [[Methods_Added_Post_5.0]] to view whether your addon is incompatible with older versions of MediaMonkey.&lt;br /&gt;
	|-&lt;br /&gt;
		| type&lt;br /&gt;
		| no&lt;br /&gt;
		| The category of your addon. The existing categories are: general, skin, layout, sync, metadata, and visualization; but you can create your own categories. If unspecified, the type defaults to general.&lt;br /&gt;
	|-&lt;br /&gt;
		| author&lt;br /&gt;
		| no&lt;br /&gt;
		| The name of the addon&#039;s author.&lt;br /&gt;
	|-&lt;br /&gt;
		| icon&lt;br /&gt;
		| no&lt;br /&gt;
		| The filename of your addon&#039;s icon image. The image file must be in the root of the MMIP.&lt;br /&gt;
	|-&lt;br /&gt;
		| config&lt;br /&gt;
		| no&lt;br /&gt;
		| The filename of your addon&#039;s configuration script. See Adding Configurable Settings for more info.&lt;br /&gt;
	|-&lt;br /&gt;
		| updateURL&lt;br /&gt;
		| no&lt;br /&gt;
		| Link to a custom URL to check for app updates, for addons that are self-hosted. See: [[#Self-hosted addons|Self-hosted addons]]&lt;br /&gt;
	|-&lt;br /&gt;
		| installScript&lt;br /&gt;
		| no&lt;br /&gt;
		| The filename of your addon&#039;s install script. The script will run once when the addon is being installed. &amp;lt;/br&amp;gt;The variable &amp;lt;code&amp;gt;window.__currentAddonPath&amp;lt;/code&amp;gt; will be set, pointing to the filesystem folder into which the addon has been installed.&lt;br /&gt;
&lt;br /&gt;
	|-&lt;br /&gt;
		| uninstallScript&lt;br /&gt;
		| no&lt;br /&gt;
		| The filename of your addon&#039;s uninstall script. The script will run once when the addon is being uninstalled. &amp;lt;/br&amp;gt;The variable &amp;lt;code&amp;gt;window.__currentAddonPath&amp;lt;/code&amp;gt; will be set, pointing to the filesystem folder into which the addon has been installed.&lt;br /&gt;
	|-&lt;br /&gt;
		| files&lt;br /&gt;
		| no&lt;br /&gt;
		| This only applies to plugins (type: &amp;quot;plugin&amp;quot;). Contains an array of objects, listing plugin files to be added. &amp;quot;src&amp;quot; is the source file path relative to the root inside mmip and &amp;quot;tgt&amp;quot; is the target file path relative to the Plugins folder. It can only write under the Plugins folder.&amp;lt;/br&amp;gt;Example: &lt;br /&gt;
			&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;quot;files&amp;quot;: [{&lt;br /&gt;
			    &amp;quot;src&amp;quot;: &amp;quot;pluginDLL.dll&amp;quot;,&lt;br /&gt;
			    &amp;quot;tgt&amp;quot;: &amp;quot;pluginDLL.dll&amp;quot;&lt;br /&gt;
			})&lt;br /&gt;
			&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
	|-&lt;br /&gt;
		| showRestartPrompt&lt;br /&gt;
		| no&lt;br /&gt;
		| Default is &amp;quot;true&amp;quot;. Tells MediaMonkey whether to prompt a user for a restart. &amp;lt;/br&amp;gt; Possible values: &amp;quot;true&amp;quot;, &amp;quot;false&amp;quot;, &amp;quot;install&amp;quot;, and &amp;quot;uninstall&amp;quot;. &amp;lt;/br&amp;gt; If &amp;quot;true&amp;quot;, MM will prompt the user for a restart on both install and uninstall. &amp;lt;/br&amp;gt; If &amp;quot;install&amp;quot;, MM will only prompt on install. &amp;lt;/br&amp;gt; If &amp;quot;uninstall&amp;quot;, MM will only prompt on uninstall. &amp;lt;/br&amp;gt; If &amp;quot;false&amp;quot;, neither installing nor uninstalling will prompt a restart. &amp;lt;/br&amp;gt; &amp;lt;u&amp;gt;Must be a string if provided. Boolean true/false is not supported.&amp;lt;/u&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; May be required in the future.&lt;br /&gt;
&lt;br /&gt;
===License===&lt;br /&gt;
You can choose to include a license file in the root of your addon, named license.txt. If present, when the addon is being installed. the license agreement will be shown to the user, and they will be required to accept the terms before installing.&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
All the HTML/CSS/JS code that handles MM functionality is stored in a tree structure. As a developer, you can add new files, replace existing, or even extend functionality of the existing files. This is achieved by replication of the folder structure in Addons. For example, if a file controls\checkbox.js is present in the Addon, it completely replaces the default MM functionality of a checkbox. Similarly, an _add suffix in a filename extends functionality of an existing file. E.g. dialogs\dlgAbout_add.js can contain code that adds new controls to the layout of the About dialog.&lt;br /&gt;
&lt;br /&gt;
For information on how to load other files &amp;amp; scripts into your code, please see the sections on &amp;lt;code&amp;gt;requirejs&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;localRequirejs&amp;lt;/code&amp;gt; here: [[Important_Methods_and_Utilities_(Addons)#requirejs]]&lt;br /&gt;
&lt;br /&gt;
===init.js===&lt;br /&gt;
You can choose to include a script named init.js in the root of your addon. If present, the script will run at startup.&lt;br /&gt;
&lt;br /&gt;
===MediaMonkey folder structure===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Root&#039;&#039;&#039; - Contains mainly mminit.js, which has the basic MM JS routines, several other utility .js files, maincontent.html which contains the basic definition of the main window. Also important is viewHandlers.js, which defines the tree structure of MM and behaviour of the views.&lt;br /&gt;
** &#039;&#039;&#039;controls&#039;&#039;&#039; - Contains all the controls used in MM UI. This starts with very basic controls, like button.js or dropdown.js, and continues with more complex things like listview.js and goes all the way to the complex UI elements, like equalizer.js, player.js or autoPlaylistEditor.js.&lt;br /&gt;
** &#039;&#039;&#039;dialogs&#039;&#039;&#039; - All the dialogs reside here, e.g. dlgConvertFormat.html + dlgConvertFormat.js&lt;br /&gt;
*** &#039;&#039;&#039;dlgOptions&#039;&#039;&#039; - Panels for the Tools &amp;gt; Options menu reside here.&lt;br /&gt;
** &#039;&#039;&#039;helpers&#039;&#039;&#039; - Contains miscellaneous helper scripts that do not fit into the other categories. For example: butt services, tray icon menus, docking, etc. &lt;br /&gt;
** &#039;&#039;&#039;layouts&#039;&#039;&#039; - Subfolders contain individual layouts, i.e. something that can replace/modify the files in the default folder structure in order to achieve completely different layout of MM (e.g. &amp;quot;Touch mode&amp;quot; layout). Unlike skins, layouts are supposed to mainly modify dimensions, positions and types of UI elements, not their color, etc. See [[Layouts]] for more information.&lt;br /&gt;
** &#039;&#039;&#039;scripts&#039;&#039;&#039; - This contains all non-skin addons that are installed to MediaMonkey, including addons that are preinstalled. They are organized by id.&lt;br /&gt;
** &#039;&#039;&#039;skin&#039;&#039;&#039; - Contains basic skin definitions, mostly a set of LESS files (an extension to CSS). See http://lesscss.org for more information.&lt;br /&gt;
*** &#039;&#039;&#039;icon&#039;&#039;&#039; - Contains all the icons used by MM. They are in SVG format in order to scale nicely to any display resolution. As anything else, they can be easily replaced by any Addon (skin or script).&lt;br /&gt;
** &#039;&#039;&#039;skins&#039;&#039;&#039; - Subfolders contain individual skins, i.e. something that can replace/modify the files in the default folder structure in order to achieve completely different looks of MM. Unlike layouts, this is supposed to mainly modify colors, fonts, icons, etc. See [[Skinning_Guide]] for more information.&lt;br /&gt;
&lt;br /&gt;
Filetypes that can be overridden:&lt;br /&gt;
* JS (e.g. controls/artistGrid.js&lt;br /&gt;
* HTML (e.g. (root)/player.html)&lt;br /&gt;
* LESS (e.g. skin/skin_complete.less)&lt;br /&gt;
* SVG (e.g. skin/icon/about.svg)&lt;br /&gt;
Filetypes that can be added to:&lt;br /&gt;
* JS (e.g. (root)/actions_add.js)&lt;br /&gt;
* LESS (e.g. skin/skin_base_add.less)&lt;br /&gt;
Filetypes that can be added new:&lt;br /&gt;
* JS (e.g. dialogs/dlgOptions/pnl_myAddon.js)&lt;br /&gt;
* HTML (e.g. dialogs/dlgOptions/pnl_myAddon.html)&lt;br /&gt;
* LESS (e.g. skin/skin_somethingnew.less)&lt;br /&gt;
* SVG (e.g. skin/icon/newIcon.svg)&lt;br /&gt;
* CSS (e.g. dialogs/dlgOptions/myExtraStylesheet.css) (Not recommended)&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
The versioning of addons must be in the format of three period-separated numbers (for example 0.0.1, 1.2.34, etc.) We recommend using semantic versioning (see https://semver.org).&lt;br /&gt;
&lt;br /&gt;
MediaMonkey has a built-in updater for addons. When the user clicks &amp;quot;Find Updates&amp;quot; in the addons screen, it will check online if there are any updates for addons that are installed. If any are found, the user clicks the download button that appears, then it will download and install the updated addon.&lt;br /&gt;
&lt;br /&gt;
==Submitting an addon==&lt;br /&gt;
To submit an addon, you must first have an account on the MediaMonkey forum and be signed in.&lt;br /&gt;
# 	Go to https://www.mediamonkey.com/addons/ and click Submit Addon.&lt;br /&gt;
# 	Select the most appropriate sub-category under MediaMonkey 5 that describes your addon.&lt;br /&gt;
# 	Click Submit New Addon.&lt;br /&gt;
##		Name: Make sure it is the same as your addon&#039;s title, so that it does not confuse users after installing.&lt;br /&gt;
##		Description: This does not have to be the same as the description in info.json. You can be as descriptive as you like.&lt;br /&gt;
##		Support Link, Author Link, and License Type are optional.&lt;br /&gt;
##		Image is not required, but highly recommended. We recommend that it be a square image, and the same image as your addon&#039;s icon.&lt;br /&gt;
#	Click next. On this page, you will add the first version of your addon.&lt;br /&gt;
##		Either upload your MMIP file or specify an external download link.&lt;br /&gt;
##		Compatibility: Specify the MediaMonkey versions on which you have confirmed your addon works.&lt;br /&gt;
##		What&#039;s New is optional, but you can specify updates here in future versions. &lt;br /&gt;
#	Click Save. Review your changes, make sure everything is accurate, then click Finish.&lt;br /&gt;
#	Your addon will appear in red until it is approved by a moderator. When approved, it will appear on the main addons page.&lt;br /&gt;
To add a new version of your addon, simply click Add New Version and follow steps 4-5. Each additional version needs to be approved by a moderator.&lt;br /&gt;
&lt;br /&gt;
==Adding to scripts==&lt;br /&gt;
To add code to the end of a certain script, create a JS file in its appropriate location, with _add at the end of its name.&lt;br /&gt;
&lt;br /&gt;
For example, if you wish to make an addition to controls/navigationBar.js, make controls/navigationBar_add.js inside your MMIP. You can also entirely replace the file if you name it controls/navigationBar.js inside your MMIP.&lt;br /&gt;
&lt;br /&gt;
==Self-hosted addons==&lt;br /&gt;
For addons hosted on external sites, please provide a field &#039;&#039;&#039;updateURL&#039;&#039;&#039; in info.json to allow MediaMonkey to check for updates to your addon. The server must reply with info on the most recent version of the addon, in either XML or JSON format. More fields can be returned, but will be ignored by current versions of MediaMonkey. &lt;br /&gt;
&lt;br /&gt;
For a working example, see: https://www.happymonkeying.com/update.php?upd=300021&lt;br /&gt;
Please note that since the release of that addon, the MinVersionMajor - MaxVersionBuild fields have been replaced with MinAppVersion, as described below.&lt;br /&gt;
&lt;br /&gt;
===XML===&lt;br /&gt;
# The sequence of &#039;&#039;&#039;VersionMajor&#039;&#039;&#039;, &#039;&#039;&#039;VersionMinor&#039;&#039;&#039;, and &#039;&#039;&#039;VersionRelease&#039;&#039;&#039; form the standard version string; in the below example, it would be 3.0.6. &#039;&#039;&#039;VersionBuild&#039;&#039;&#039; also must be included but can be blank.&lt;br /&gt;
# &#039;&#039;&#039;UpdateURL&#039;&#039;&#039; is the link to download the addon as an MMIP.&lt;br /&gt;
# &#039;&#039;&#039;MinAppVersion&#039;&#039;&#039; refers to the minimum supported version of MediaMonkey. It is optional but highly recommended to include.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VersionMajor&amp;gt;3&amp;lt;/VersionMajor&amp;gt;&lt;br /&gt;
&amp;lt;VersionMinor&amp;gt;0&amp;lt;/VersionMinor&amp;gt;&lt;br /&gt;
&amp;lt;VersionRelease&amp;gt;6&amp;lt;/VersionRelease&amp;gt;&lt;br /&gt;
&amp;lt;VersionBuild&amp;gt;&amp;lt;/VersionBuild&amp;gt;&lt;br /&gt;
&amp;lt;MinAppVersion&amp;gt;5.0.2&amp;lt;/MinAppVersion&amp;gt;&lt;br /&gt;
&amp;lt;UpdateURL&amp;gt;http://myserver/myAddon.mmip&amp;lt;/UpdateURL&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===JSON===&lt;br /&gt;
In JSON, &#039;&#039;&#039;version&#039;&#039;&#039; is provided as a single string instead of the four separate VersionX fields.&lt;br /&gt;
&lt;br /&gt;
Example (equivalent to the XML above):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;version&amp;quot;: &amp;quot;3.0.6&amp;quot;,&lt;br /&gt;
&amp;quot;minAppVersion&amp;quot;: &amp;quot;5.0.2&amp;quot;,&lt;br /&gt;
&amp;quot;updateUrl&amp;quot;:&amp;quot;http://myserver/myAddon.mmip&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Important tips=&lt;br /&gt;
*	&#039;&#039;&#039;Minimize the amount of computation your addon does on startup.&#039;&#039;&#039; Most scripts in MM run as soon as the window loads, so make sure your addon does not take a long time doing synchronous calculations that can cause the window to take longer to load. Ways to help avoid this:&lt;br /&gt;
**		Use &#039;&#039;&#039;window.whenReady()&#039;&#039;&#039; when possible. Using window.whenReady() will cause your callback to only fire when all scripts are loaded, the whole DOM is processed by our parser, and all controls are initialized.&lt;br /&gt;
**		Use asynchronous code when possible (with either callbacks, Promises, or async/await). If you perform heavy calculations that are synchronous, then it will halt the UI. See https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await for more information.&lt;br /&gt;
* 	&#039;&#039;&#039;Put your _add scripts into an anonymous function.&#039;&#039;&#039; To prevent potential issues of variables with the same name being used across different scripts, we recommend putting most/all of your logic into an anonymous function. You can do it with arrow notation or function notation.&lt;br /&gt;
**		&amp;lt;code&amp;gt;(() =&amp;gt; { /* Do stuff */ })();&amp;lt;/code&amp;gt;&lt;br /&gt;
**		&amp;lt;code&amp;gt;(function() { /* Do stuff */ })();&amp;lt;/code&amp;gt;&lt;br /&gt;
*	&#039;&#039;&#039;Enable Developer Mode.&#039;&#039;&#039; Under Help &amp;gt; About, you can enable Developer Mode. This will prevent crash logs from being automatically sent to MediaMonkey staff.&lt;br /&gt;
**		Additionally, developer mode can be enabled in the code via &amp;lt;code&amp;gt;app.enabledDeveloperMode(true)&amp;lt;/code&amp;gt; during testing. But &#039;&#039;&#039;do not&#039;&#039;&#039; keep it in your published extension.&lt;br /&gt;
*	&#039;&#039;&#039;Use requestFrame and requestTimeout instead of requestAnimationFrame and setTimeout.&#039;&#039;&#039; The custom functions automatically check whether the window/control still exists, and do not call the callback when the window/control have already been destroyed, to prevent crashes.&lt;br /&gt;
&lt;br /&gt;
*	&#039;&#039;&#039;Do not spam console.log&#039;&#039;&#039; in your final addon that&#039;s distributed to users. While developing it, it is completely okay to use it as much as you want! However, the JavaScript console.log function is relatively computationally expensive, so if it spams logs, then it will degrade performance. If it just logs occasionally, for debugging purposes, it&#039;s okay. Just don&#039;t overdo it.&lt;br /&gt;
&lt;br /&gt;
* To avoid breaking for...in loops, do not add functions to Array.prototype with the syntax &amp;lt;code&amp;gt;Array.prototype.func = function () {}&amp;lt;/code&amp;gt;. Details here: https://www.ventismedia.com/mantis/view.php?id=18145&lt;br /&gt;
&lt;br /&gt;
=Actions, Hotkeys &amp;amp; Menus=&lt;br /&gt;
The MediaMonkey interface is controlled largely by actions, which are defined inside actions.js. Most UI elements are tied to actions, and all hotkeys are defined by actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Defining custom actions must be done in actions_add.js. Otherwise, MediaMonkey will not properly register the actions. &lt;br /&gt;
&lt;br /&gt;
==Defining actions==&lt;br /&gt;
Actions are defined in the global actions object. Each action contains the following attributes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;max-width: 800px;&amp;quot;&lt;br /&gt;
	|-&lt;br /&gt;
		! Attribute&lt;br /&gt;
		! Type&lt;br /&gt;
		! Required?&lt;br /&gt;
		! Information&lt;br /&gt;
	|-&lt;br /&gt;
		| title&lt;br /&gt;
		| function (string)&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| Function that returns the (string) title of the action. &lt;br /&gt;
	|-&lt;br /&gt;
		| execute&lt;br /&gt;
		| function &lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| Function that runs when the action is executed. &lt;br /&gt;
	|-&lt;br /&gt;
		| category&lt;br /&gt;
		| function (string)&lt;br /&gt;
		| no&lt;br /&gt;
		| Function that returns the (string) name of the action&#039;s category. Categories are defined in the global actionCategories object. Default is general.&lt;br /&gt;
	|-&lt;br /&gt;
		| hotkeyAble&lt;br /&gt;
		| boolean&lt;br /&gt;
		| no&lt;br /&gt;
		| Determines whether the action can be tied to a hotkey. Default is false.&lt;br /&gt;
	|-&lt;br /&gt;
		| icon&lt;br /&gt;
		| string&lt;br /&gt;
		| no&lt;br /&gt;
		| Icon that shows in menus that contain the action. The icon ids are located in skin/(iconname).svg.&lt;br /&gt;
	|-&lt;br /&gt;
		| visible&lt;br /&gt;
		| function (boolean)&lt;br /&gt;
		| no&lt;br /&gt;
		| Determines whether the action will show up in menus. This can be useful for integrating party mode, for example, by disabling your action when party mode is enabled with&lt;br /&gt;
			&amp;lt;code&amp;gt;visible: window.uitools.getCanEdit&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
Additionally, actions can contain any other custom attributes and methods.&lt;br /&gt;
&lt;br /&gt;
Defining your own custom action in actions_add.js:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
actions.myCustomAction = {&lt;br /&gt;
    title: &#039;My Custom Action&#039;,&lt;br /&gt;
    hotkeyAble: true,&lt;br /&gt;
    execute: function () {&lt;br /&gt;
        messageDlg(&#039;This action was created by hotkeyAction script.&#039;, &#039;information&#039;, [&#039;btnOK&#039;], {&lt;br /&gt;
            defaultButton: &#039;btnOK&#039;&lt;br /&gt;
        }, undefined);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assigning hotkeys to actions==&lt;br /&gt;
Assigning hotkeys is very simple. Hotkeys are handled by the global hotkeys object, and you can register a hotkey with the hotkeys.addHotkey method.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;hotkeys.addHotkey(hotkey, action, global);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;max-width: 800px;&amp;quot;&lt;br /&gt;
	|-&lt;br /&gt;
		! Attribute&lt;br /&gt;
		! Type&lt;br /&gt;
		! Required?&lt;br /&gt;
		! Information&lt;br /&gt;
	|-&lt;br /&gt;
		| hotkey&lt;br /&gt;
		| string&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| The hotkey to assign. See Tools &amp;gt; Options &amp;gt; Hotkeys for the right syntax.&lt;br /&gt;
	|-&lt;br /&gt;
		| action&lt;br /&gt;
		| string&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| The action (in window.actions) to execute. Caps sensitive.&lt;br /&gt;
	|-&lt;br /&gt;
		| global&lt;br /&gt;
		| boolean&lt;br /&gt;
		| no&lt;br /&gt;
		| Determines whether the hotkey is global (accessible outside the MM window). Default is false.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adding a hotkey to your custom action:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;hotkeys.addHotkey(&#039;Ctrl+Shift+Q&#039;, &#039;myCustomAction&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The addHotkey method automatically handles duplicates and deletions. So if a user deletes the hotkey, you don&#039;t have to worry about it showing up again every time the window reloads; and they can manually re-add it.&lt;br /&gt;
&lt;br /&gt;
To see the syntax that MediaMonkey uses for hotkeys, go to the Tools&amp;gt;Options&amp;gt;Hotkeys window and type in your desired hotkey.&lt;br /&gt;
&lt;br /&gt;
==Adding actions to menus==&lt;br /&gt;
MediaMonkey uses a structure for menus that allows infinitely nested sub-menus. The data structure of a menu item is as follows:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
menuItem = {&lt;br /&gt;
    action: {&lt;br /&gt;
        title: String,      // Required&lt;br /&gt;
        execute: Function,  // Usually required&lt;br /&gt;
        icon: String,&lt;br /&gt;
        visible: Boolean,&lt;br /&gt;
        disabled: Boolean,&lt;br /&gt;
        submenu: Array&lt;br /&gt;
    },&lt;br /&gt;
    order: Number,          // Required&lt;br /&gt;
    grouporder: Number     // Required&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;submenu&amp;lt;/code&amp;gt; field, which is optional, contains an array of as many other menu items as desired. The &amp;lt;code&amp;gt;grouporder&amp;lt;/code&amp;gt; field determines which group a menu item will belong to, and groups will be automatically sorted by the &amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt; field. Menu items defined in actions.js are intentionally given order and grouporder like 10, 20, 30, etc. to allow addons to insert menu items in between them as desired.&lt;br /&gt;
&lt;br /&gt;
Note: These fields can &#039;&#039;either&#039;&#039; be the datatype as described above &#039;&#039;or&#039;&#039; a function which returns the requested data type. At runtime, the global method &amp;lt;code&amp;gt;resolveToValue&amp;lt;/code&amp;gt; is called, which either returns the primitive type or calls the provided function. If you analyze the actions in actions.js, you&#039;ll see bits like &amp;lt;code&amp;gt;visible: window.uitools.getCanEdit&amp;lt;/code&amp;gt;. This is an example of a function which resolves to a boolean.&lt;br /&gt;
&lt;br /&gt;
There are two menu groups that you will most likely want to add items to: The main menu bar, and tracklist menus.&lt;br /&gt;
&lt;br /&gt;
===Main menu bar===&lt;br /&gt;
The File, Edit, View, etc. menus are defined in &amp;lt;code&amp;gt;window._menuItems&amp;lt;/code&amp;gt;, from actions.js. See actions.js or look in the devtools console to see all the possible submenus to which to add your action. &#039;&#039;&#039;You can only add to these menus inside actions_add.js.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example, if you wish to add an action to the &amp;quot;Tools &amp;gt; Edit tags&amp;quot; submenu, that is under &amp;lt;code&amp;gt;window._menuItems.editTags&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
window._menuItems.editTags.submenu.push({&lt;br /&gt;
    action: actions.myNewAction,&lt;br /&gt;
    order: 10,&lt;br /&gt;
    grouporder: 10&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tracklist menus===&lt;br /&gt;
Tracklist menus, which may also be called media menus, are the ones that contain &#039;&#039;Play now&#039;&#039;, &#039;&#039;Play next&#039;&#039;, &#039;&#039;Properties&#039;&#039;, etc. These are defined in &amp;lt;code&amp;gt;window.menus.tracklistMenuItems&amp;lt;/code&amp;gt;, from controls/trackListView.js. &#039;&#039;&#039;You should only add to these menus inside controls/trackListView_add.js.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example, if you wish to add an action below Cut, Copy, and Paste, but above Rename:&lt;br /&gt;
&lt;br /&gt;
* First, look in the definition of menus.tracklistMenuItems that Cut/Copy/Paste/Rename are in group 40, Paste&#039;s order is 30, and Rename&#039;s order is 35.&lt;br /&gt;
* This item must go in the same group and have an order between 30 and 35.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
window.menus.tracklistMenuItems.push({&lt;br /&gt;
    action: actions.myNewAction,&lt;br /&gt;
    order: 31,&lt;br /&gt;
    grouporder: 40&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Categories==&lt;br /&gt;
&#039;&#039;Coming soon&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Storing Data=&lt;br /&gt;
&lt;br /&gt;
==JSON==&lt;br /&gt;
When you wish to save data such as user preferences, the most effective method is to save values in persistent.json. The way you do this is through the app.setValue and app.getValue methods. &lt;br /&gt;
Both methods require two parameters.&lt;br /&gt;
&lt;br /&gt;
If retrieving a value that is primitive, set the second parameter as undefined.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
app.setValue(&#039;myExtension_foo&#039;, &#039;bar&#039;);&lt;br /&gt;
    &lt;br /&gt;
var foo = app.getValue(&#039;myExtension_foo&#039;, undefined);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When retrieving a value that is an object, you must provide the second parameter as an object. The function will take that object and populate each value if it exists, so you can easily manage default settings this way.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Saving settings&lt;br /&gt;
app.setValue(&#039;myExtension_settings&#039;, {&lt;br /&gt;
    option1: 0,&lt;br /&gt;
    option2: &#039;electric boogaloo&#039;&lt;br /&gt;
});&lt;br /&gt;
// Getting settings with hardcoded defaults&lt;br /&gt;
var settings = app.getValue(&#039;myExtension_settings&#039;, {&lt;br /&gt;
    option1: 0,&lt;br /&gt;
    option2: &#039;default&#039;&lt;br /&gt;
})&lt;br /&gt;
// Passing an empty object works too&lt;br /&gt;
var settings = app.getValue(&#039;myExtension_settings&#039;, {});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This data is automatically saved in persistent.json, which is saved in the user&#039;s AppData folder or the Portable subfolder; for non-portable and portable installations, respectively. Persistent.json is only deleted if the user manually deletes it or removes a portable installation.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Make sure the keys that you use are unique. Include the addon ID in the key, as demonstrated above, to ensure this.&lt;br /&gt;
&lt;br /&gt;
==Database==&lt;br /&gt;
If you need to manage more data, you can use the database. In MM5, you can access the database through the app.db object. For more information, see: https://www.mediamonkey.com/webhelp/MM5Preview/classes/DB.html.&lt;br /&gt;
&lt;br /&gt;
To execute queries that do not need return values, use app.db.executeQueryAsync:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
app.db.executeQueryAsync(&#039;CREATE TABLE IF NOT EXISTS myPlugin (_id INTEGER PRIMARY KEY, value TEXT UNIQUE NOT NULL)&#039;)&lt;br /&gt;
.then(() =&amp;gt; {&lt;br /&gt;
	app.db.executeQueryAsync(&#039;INSERT INTO myPlugin [. . .]&#039;);&lt;br /&gt;
})&lt;br /&gt;
.catch(err =&amp;gt; {&lt;br /&gt;
    console.error(err)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
To execute queries that need return values, use app.db.getQueryResultAsync:&lt;br /&gt;
app.db.getQueryResultAsync(&#039;SELECT * FROM Albums&#039;)&lt;br /&gt;
.then(result =&amp;gt; {&lt;br /&gt;
    // do stuff&lt;br /&gt;
})&lt;br /&gt;
.catch(err =&amp;gt; console.error(err));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method returns a QueryResults object, which is a linked list. See https://www.mediamonkey.com/webhelp/MM5Preview/classes/QueryResults.html.&lt;br /&gt;
&lt;br /&gt;
==Adding Configurable Settings to your Addon==&lt;br /&gt;
There are two ways to add configurable options to an addon: via the &amp;quot;config&amp;quot; option in info.json, or modifying the options dialog.&lt;br /&gt;
&lt;br /&gt;
===Addon Config===&lt;br /&gt;
The recommended way of adding configurable settings to an addon, if the settings are not directly related to an existing options panel, is to use the built-in addon configuration options. To do this, you must specify &amp;quot;config&amp;quot; in info.json:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&amp;quot;config&amp;quot;: &amp;quot;config.js&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside your configuration js file, you must define a window.configInfo object, with two functions: load and save.&lt;br /&gt;
&lt;br /&gt;
Load is executed during page load, and save is executed after &amp;quot;OK&amp;quot; is pressed. Both functions are passed two parameters: pnl and item.&lt;br /&gt;
* &amp;quot;pnl&amp;quot; (pnlDiv) is the HTML node of the panel&lt;br /&gt;
* &amp;quot;item&amp;quot; (addon) is an object that contains information about the addon, such as title, ext_id, description, version, installType, author, path, etc.&lt;br /&gt;
&lt;br /&gt;
You can opt to add a config HTML as well, by giving it the same base name as your config JS. For example, if it is named config.js, create config.html; if it is named MediaMonkeyRocks.js, create MediaMonkeyRocks.html.&lt;br /&gt;
&lt;br /&gt;
When a configuration script is provided for an addon, the panel will open once the addon is installed. Additionally, a button will appear in its listing to open the configuration panel.&lt;br /&gt;
&lt;br /&gt;
Example usage:&lt;br /&gt;
&lt;br /&gt;
config.html&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;uiRows&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-id=&amp;quot;chbOption1&amp;quot; data-control-class=&amp;quot;Checkbox&amp;quot; data-tip=&amp;quot;Option 1 tooltip&amp;quot;&amp;gt;Option 1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-id=&amp;quot;chbOption2&amp;quot; data-control-class=&amp;quot;Checkbox&amp;quot; data-tip=&amp;quot;Option 2 tooltip&amp;quot;&amp;gt;Option 1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
config.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
window.configInfo = {&lt;br /&gt;
    load: function (pnlDiv, addon) {&lt;br /&gt;
        // Load config with defaults&lt;br /&gt;
        this.config = app.getValue(&#039;myAddon_config&#039;, {&lt;br /&gt;
            option1: true,&lt;br /&gt;
            option2: false,&lt;br /&gt;
        });&lt;br /&gt;
        // Set checkboxes to the configuration settings&lt;br /&gt;
        var UI = getAllUIElements(pnlDiv);&lt;br /&gt;
        UI.chbOption1.controlClass.checked = this.config.option1;&lt;br /&gt;
        UI.chbOption2.controlClass.checked = this.config.option2;&lt;br /&gt;
    },&lt;br /&gt;
    save: function (pnlDiv, addon) {&lt;br /&gt;
        // Save settings according to the checkbox changes&lt;br /&gt;
        var UI = getAllUIElements(pnlDiv);&lt;br /&gt;
        this.config.option1 = UI.chbOption1.controlClass.checked;&lt;br /&gt;
        this.config.option2 = UI.chbOption2.controlClass.checked;&lt;br /&gt;
        app.setValue(&#039;myAddon_config&#039;, this.config);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Options Dialog===&lt;br /&gt;
When modifying the options dialog, you can either add to / modify an existing panel or create your own panel.&lt;br /&gt;
&lt;br /&gt;
====Adding to an existing panel====&lt;br /&gt;
Adding to an existing panel can be done with _add JS files. For more context, take a look at dialogs/dlgOptions.js.&lt;br /&gt;
&lt;br /&gt;
For example, if you wish to add to the General Options panel:&lt;br /&gt;
#	Create dialogs/dlgOptions/pnl_General_add.js&lt;br /&gt;
#	Override the optionPanels.pnl_General.load and optionPanels.pnl_General.save functions to add your own code&lt;br /&gt;
#	Use the divFromSimpleMenu function to automatically create styled checkboxes/radio buttons&lt;br /&gt;
#	Use app.getValue and app.setValue to retrieve and save the user settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; {&lt;br /&gt;
    var options = [&lt;br /&gt;
        {&lt;br /&gt;
            title: &#039;Option 1&#039;, // The label that appears on the checkbox/radio button&lt;br /&gt;
            radiogroup: &#039;myAddon_RadioOptions&#039;, // Self-explanatory&lt;br /&gt;
            execute: function() {state.RadioOptions = &#039;option1&#039;} // This function runs whenever the element is clicked&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            title: &#039;Option 2&#039;,&lt;br /&gt;
            radiogroup: &#039;myAddon_RadioOptions&#039;,&lt;br /&gt;
            execute: function() {state.RadioOptions = &#039;option2&#039;}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            title: &#039;My Checkbox&#039;,&lt;br /&gt;
            checkable: true, // Turns it into a checkbox&lt;br /&gt;
            execute: function() {state.Checkbox = this.checked;}&lt;br /&gt;
        },&lt;br /&gt;
    ]&lt;br /&gt;
    var state;&lt;br /&gt;
    &lt;br /&gt;
    optionPanels.pnl_General.override({&lt;br /&gt;
        load: function($super, sett, pnlDiv) {&lt;br /&gt;
            $super(sett, pnlDiv);&lt;br /&gt;
            console.log(&#039;yoyoyoyoyo&#039;)&lt;br /&gt;
            &lt;br /&gt;
            state = app.getValue(&#039;myAddon_settings&#039;, {&lt;br /&gt;
                RadioOptions: &#039;option1&#039;,&lt;br /&gt;
                Checkbox: false&lt;br /&gt;
            });&lt;br /&gt;
            // Update checkbox/radiobutton state from settings&lt;br /&gt;
            if (state.RadioOptions == &#039;option1&#039;) {options[0].checked = true; options[1].checked = false;} &lt;br /&gt;
            else {options[0].checked = false; options[1].checked = true}&lt;br /&gt;
            if (state.Checkbox == true) options[2].checked = true;&lt;br /&gt;
            // Create an HTML menu from the options&lt;br /&gt;
            divFromSimpleMenu(pnlDiv, options);&lt;br /&gt;
        },&lt;br /&gt;
        save: function($super, sett, pnlDiv) {&lt;br /&gt;
            $super(sett, pnlDiv);&lt;br /&gt;
            // Save settings&lt;br /&gt;
            app.setValue(&#039;myAddon_settings&#039;, state);&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Creating a new panel====&lt;br /&gt;
You can define your new panel inside dialogs/dlgOptions, and add it inside dialogs/dlgOptions_add.js.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Coming soon&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Plugins=&lt;br /&gt;
While most functionality can be reached in MediaMonkey 5 via addons using JS/HTML, it still supports the majority of the Winamp 2.0 API. Winamp plugin support for MediaMonkey 5 is the same as in MediaMonkey 4. See [[Winamp Plug-ins (MM4)]] for more details.&lt;br /&gt;
&lt;br /&gt;
==Packaging a Plugin==&lt;br /&gt;
To create an MMIP installer for a plugin, you need to include the information about your plugin&#039;s file[s] into info.json:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;type&amp;quot;: &amp;quot;plugin&amp;quot;,&lt;br /&gt;
&amp;quot;files&amp;quot;: [{&lt;br /&gt;
	&amp;quot;src&amp;quot;: &amp;quot;pluginDLL.dll&amp;quot;,&lt;br /&gt;
	&amp;quot;tgt&amp;quot;: &amp;quot;pluginDLL.dll&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It can contain more files. &amp;quot;src&amp;quot; is the source file path relative to the root inside mmip, and &amp;quot;tgt&amp;quot; is target file relative to the Plugins folder inside the MediaMonkey installation. It can write only under the Plugins folder.&lt;br /&gt;
&lt;br /&gt;
If needed, you can also include an installScript and uninstallScript:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;installScript&amp;quot;: &amp;quot;install.js&amp;quot;,&lt;br /&gt;
&amp;quot;uninstallScript&amp;quot;: &amp;quot;uninstall.js&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The install script will run during installation and uninstall script will run after uninstallation. &lt;br /&gt;
&lt;br /&gt;
Both will run inside the main window, allowing full access to the UI. Additionally, the variable &amp;lt;code&amp;gt;window.__currentAddonPath&amp;lt;/code&amp;gt; will be set, pointing to the filesystem folder into which the addon has been installed.&lt;br /&gt;
&lt;br /&gt;
=Accessing the main window object from other windows=&lt;br /&gt;
Sometimes, you may need to run functions  or access properties from the main window in the context of other windows. For example, performing live updates in an options panel. To do this, use the app.dialogs.getMainWindow() method.&lt;br /&gt;
&lt;br /&gt;
If you have a property &amp;quot;x&amp;quot; in the main window, this is how to access it from another window:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;app.dialogs.getMainWindow().getValue(&#039;x&#039;)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If you assign a property or method to &amp;quot;app&amp;quot;, you will need to do this to get the version of it that is attached to the main window.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;app.dialogs.getMainWindow().getValue(&#039;app&#039;).myObject.myMethod();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=UI Elements &amp;amp; Controls=&lt;br /&gt;
&lt;br /&gt;
==Icons==&lt;br /&gt;
Instead of bitmaps, MediaMonkey uses [https://en.wikipedia.org/wiki/Scalable_Vector_Graphics SVGs] for its icons. They are stored in the &amp;lt;code&amp;gt;skin/icon&amp;lt;/code&amp;gt; folder. This is because SVGs can be scaled to any size without appearing pixelated. See [[Skinning_Guide#Creating_Icons|Skinning Guide/Creating Icons]] for an introduction on how to create custom icons. &lt;br /&gt;
&lt;br /&gt;
There are three ways to load icons: The &amp;lt;code&amp;gt;data-icon&amp;lt;/code&amp;gt; HTML attribute; &amp;lt;code&amp;gt;loadIconFast()&amp;lt;/code&amp;gt;; and &amp;lt;code&amp;gt;loadIcon()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===data-icon===&lt;br /&gt;
Whenever HTML is loaded and/or classes are initialized, any and all elements with the attribute &amp;quot;data-icon&amp;quot; will automatically load the SVG files associated with the icon name provided. For details on how it works, check window.initializeControls in mminit.js. See this example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-control-class=&amp;quot;toolbutton&amp;quot; data-icon=&amp;quot;music&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This will create a ToolButton control with the icon from music.svg. Using the ToolButton control class is not required, but if you do not add any CSS to limit the size of the icon, it will appear very large.&lt;br /&gt;
&lt;br /&gt;
===loadIconFast===&lt;br /&gt;
If you wish to load an icon programmatically, use &amp;lt;code&amp;gt;loadIconFast()&amp;lt;/code&amp;gt;. For more details, see [https://www.mediamonkey.com/docs/api/classes/Window.html#method_loadIconFast loadIconFast].&lt;br /&gt;
&lt;br /&gt;
===loadIcon===&lt;br /&gt;
Only use &amp;lt;code&amp;gt;loadIcon()&amp;lt;/code&amp;gt; if you need to access the raw SVG code before adding it to the DOM. For more details, see [https://www.mediamonkey.com/docs/api/classes/Window.html#method_loadIcon loadIcon].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;More coming soon&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- todo: data-control-class and data-init-params --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=Skinning_Guide&amp;diff=11034</id>
		<title>Skinning Guide</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=Skinning_Guide&amp;diff=11034"/>
		<updated>2024-03-06T17:58:45Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Folder structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MediaMonkey 5 offers unprecedented flexibility with its skins and layouts. Skins and layouts can range anywhere from changing colors and text size to overhauling the entire interface. This guide will walk you through the basics of how to create a new skin.&lt;br /&gt;
&lt;br /&gt;
==Introduction to the Skinning Framework==&lt;br /&gt;
The structure of the MM5 user interface is controlled by HTML, and its styling (Colors, sizing, positioning, margins, padding, etc.) is controlled by CSS. The skinning framework uses a language extension called LESS. Skins are written in LESS, which is then compiled into CSS in runtime. It allows for cleaner and more modular styling, with extensive support for variables and combining classes. The full documentation is available at http://lesscss.org.&lt;br /&gt;
&lt;br /&gt;
===Folder structure===&lt;br /&gt;
All of the LESS styling can be found under the skin folder. The &amp;quot;main&amp;quot; skin file is skin_complete.less, which imports all of the other LESS files. The skinning framework is split into multiple different files for organizational purposes.&lt;br /&gt;
* Skin_base controls general properties such as colors;&lt;br /&gt;
* Skin_layout controls structural properties such as sizing and structure;&lt;br /&gt;
* Skin_animations controls definitions for animations;&lt;br /&gt;
* Skin_menu controls pop-up menus (Context menus and header menus);&lt;br /&gt;
* Skin_tabs controls tabs in the header;&lt;br /&gt;
* Skin_mainwindow controls the general window;&lt;br /&gt;
as well as others which are self-explanatory by name.&lt;br /&gt;
&lt;br /&gt;
Icons are held in the skin/icons subfolder. They must all be in SVG format. Icons are organized/named by filename,&lt;br /&gt;
(Tip: To more easily browse and preview the icons, check out tibold&#039;s &amp;quot;svgsee&amp;quot; program, which shows thumbnail previews of svg files: https://github.com/tibold/svg-explorer-extension/releases)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; When creating your own skin, use the &#039;_add&#039; suffix in the filename to not overwrite the base file. So instead of &#039;skin_base.less&#039; use &#039;skin_base_add.less&#039; and thus values/variables defined in &#039;skin_base_add.less&#039; is just complement to the base &#039;skin_base_add.less&#039;.  See other skin examples (e.g. unzip /skins/MeterialDesign.zip) to see and understand the structure.&lt;br /&gt;
&lt;br /&gt;
===Adding configurable settings to your skin===&lt;br /&gt;
As of 5.0.2, you do not have to write JavaScript code to add user-configurable settings to your skin. Simply add an item to your skin&#039;s info.json, titled &#039;&#039;&#039;skin_options&#039;&#039;&#039;, containing an array of options. We will write detailed information on the supported controls &amp;amp; syntax soon, but you can get started by following the examples of Material Design and Monkey Groove. Additionally, the specifications are described here: https://www.ventismedia.com/mantis/view.php?id=18449 &lt;br /&gt;
&lt;br /&gt;
Make sure your JSON syntax is valid. We recommend using an IDE that supports syntax checking, such as Visual Studio Code (however, it is not necessary).&lt;br /&gt;
&lt;br /&gt;
==Creating Icons==&lt;br /&gt;
&lt;br /&gt;
For creating icons, we recommend a program like [https://inkscape.org Inkscape], a free and open-source vector graphics software. If you use a program like Adobe Illustrator, more work must be done after exporting to clean up the SVG and make it display properly in MediaMonkey.&lt;br /&gt;
&lt;br /&gt;
For info on how to use icons in code, see [[Getting_Started_(Addons)#Icons|Getting Started (Addons)/Icons]].&lt;br /&gt;
&lt;br /&gt;
===Creating a Document===&lt;br /&gt;
Click File &amp;gt; New to create a new document.&lt;br /&gt;
To resize your icon to 100x100:&lt;br /&gt;
# open Document Properties (Ctrl + Shift + D)&lt;br /&gt;
# Change &#039;&#039;Display Units&#039;&#039; to px&lt;br /&gt;
# Under &#039;&#039;Custom Size&#039;&#039;, change Width and Height to 100 and Units to px.&lt;br /&gt;
&lt;br /&gt;
===Creating Shapes and Text===&lt;br /&gt;
It is important to convert any prebuilt shapes and text into pure paths, to ensure that the SVGs display properly on all systems. To do this:&lt;br /&gt;
# Right click the shape or text&lt;br /&gt;
# Click on Path &amp;gt; Object to Path&lt;br /&gt;
&lt;br /&gt;
===Colors===&lt;br /&gt;
It is important that icons display properly on all skins. Please do not include colors in your icons, so that the user gets a consistent experience for all icons. To do this:&lt;br /&gt;
# Select all objects in the document &lt;br /&gt;
# Open the Fill and Stroke menu (Ctrl + Shift + F)&lt;br /&gt;
# Under the Fill tab, ensure that &amp;quot;Unset paint&amp;quot; is selected (Usually looks like a question mark)&lt;br /&gt;
# Under the Stroke tab, ensure that &amp;quot;Unset paint&amp;quot; is selected (Usually looks like a question mark)&lt;br /&gt;
&lt;br /&gt;
===SVG Export===&lt;br /&gt;
To export SVGs correctly, change the export settings:&lt;br /&gt;
# Go to Edit &amp;gt; Preferences&lt;br /&gt;
# Navigate to Input/Output &amp;gt; SVG output&lt;br /&gt;
# Ensure that:&lt;br /&gt;
## &#039;&#039;Use named colors&#039;&#039; is unchecked &lt;br /&gt;
## &#039;&#039;XML formatting &amp;gt; Inline attributes&#039;&#039; is checked&lt;br /&gt;
&lt;br /&gt;
When saving:&lt;br /&gt;
# Click File &amp;gt; Save As...&lt;br /&gt;
# Instead of &amp;quot;Inkscape SVG&amp;quot;, select &amp;quot;Plain SVG&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===After saving the icon===&lt;br /&gt;
After saving, only one extra thing must be done to make sure the icon displays properly. &lt;br /&gt;
# Open the SVG icon in a text editor.&lt;br /&gt;
# Close to the top, you will see &amp;lt;code&amp;gt;&amp;lt;svg width=&amp;quot;100&amp;quot; height=&amp;quot;100&amp;quot; viewBox...&amp;lt;/code&amp;gt;&lt;br /&gt;
# Change &amp;lt;code&amp;gt;width=&amp;quot;100&amp;quot; height=&amp;quot;100&amp;quot;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;width=&amp;quot;100%&amp;quot; height=&amp;quot;100%&amp;quot;&amp;lt;/code&amp;gt;. This will prevent the icon from being sized incorrectly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;More coming soon&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=Getting_Started_(Addons)&amp;diff=11013</id>
		<title>Getting Started (Addons)</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=Getting_Started_(Addons)&amp;diff=11013"/>
		<updated>2023-08-16T12:58:07Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Adding actions to menus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;For a tutorial on developing addons for MediaMonkey 4, see [[Scripting (MM4)]]&lt;br /&gt;
&lt;br /&gt;
=Additional Links=&lt;br /&gt;
* The [https://www.mediamonkey.com/forum/viewtopic.php?f=27&amp;amp;t=81285 &#039;&#039;&#039;Developer Forum pinned post&#039;&#039;&#039;] provides a summary of the information provided here, plus a few additional notes.&lt;br /&gt;
* The [https://www.mediamonkey.com/docs/api/ &#039;&#039;&#039;API Reference&#039;&#039;&#039;] is a complete reference to all the functionality provided both by MM native code and JS libraries.&lt;br /&gt;
* [[Important Methods and Utilities (Addons)|&#039;&#039;&#039;Important Methods and Utilities&#039;&#039;&#039;]] provides a list of some of the most notable functionality provided.&lt;br /&gt;
* &#039;&#039;&#039;[[Methods_Added_Post_5.0|Methods added Post 5.0]]&#039;&#039;&#039; provides a list of methods that have been added &#039;&#039;after&#039;&#039; version 5.0.0, which you must be mindful of when publishing an addon.&lt;br /&gt;
* &#039;&#039;&#039;[[Working_with_Native_Objects_&amp;amp;_Data|Working with Native Objects &amp;amp; Data]]&#039;&#039;&#039; covers the concepts of data sources and native objects.&lt;br /&gt;
* The [https://www.mediamonkey.com/forum/viewforum.php?f=27 &#039;&#039;&#039;MM5 Developer Forum&#039;&#039;&#039;] is where you can find and ask questions related to developing MM5 addons.&lt;br /&gt;
* The [https://www.mediamonkey.com/wiki/Skinning_Guide &#039;&#039;&#039;Skinning Guide&#039;&#039;&#039;] provides information on how to create skins.&lt;br /&gt;
* [[Controlling MM5 from External Applications|&#039;&#039;&#039;Controlling MM5 from External Applications&#039;&#039;&#039;]] discusses the different methods of controlling MediaMonkey 5 from other applications.&lt;br /&gt;
&lt;br /&gt;
=Introduction to Making Addons in MediaMonkey 5=&lt;br /&gt;
&lt;br /&gt;
MediaMonkey 5 is a fully HTML-based desktop application which uses Chromium for rendering. This means that the entire UI is driven by a &#039;&#039;&#039;platform-independent&#039;&#039;&#039; HTML/CSS/JS stack, which is fully accessible to developers and skinners. JS in cooperation with native code drives the non-visual aspects, also fully controllable by developers. This gives unprecedented customization options to create beautiful skins, new or enhanced functionality and great addons in general.&lt;br /&gt;
&lt;br /&gt;
Scripting in MediaMonkey 5 differs greatly from MediaMonkey 4 and below, because it has been designed from the ground-up. It is not difficult to learn, especially if you are familiar with web programming. If you are coming from writing MediaMonkey 4 addons, you will get adjusted in no time at all.&lt;br /&gt;
&lt;br /&gt;
=Hello World example=&lt;br /&gt;
&lt;br /&gt;
Here is a basic Hello World example for a MediaMonkey 5 addon.&lt;br /&gt;
&lt;br /&gt;
Inside a new folder, create a file named info.json with the essential information about your addon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;title&amp;quot;: &amp;quot;My First Addon&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;myFirstAddon&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Hello world!&amp;quot;,&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;general&amp;quot;,&lt;br /&gt;
    &amp;quot;author&amp;quot;: &amp;quot;Jane Doe&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, create a file named mainwindow_add.js. This code will get added to the end of mainwindow.js, and it will run when MediaMonkey starts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Execute when the window is ready&lt;br /&gt;
window.whenReady(() =&amp;gt; {&lt;br /&gt;
    uitools.toastMessage.show(&#039;Hello world!&#039;, {&lt;br /&gt;
        disableUndo: true&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, select your two files and package them into a zip. Make sure that they are in the root of your zip archive and not inside a subfolder. Rename it to myFirstAddon.mmip.&lt;br /&gt;
&lt;br /&gt;
Inside MediaMonkey5, go to Tools &amp;gt; Addons, click Add, and select your addon. After it installs and you reload the window, you will get a popup &amp;quot;toast&amp;quot; message on the bottom of the screen.&lt;br /&gt;
&lt;br /&gt;
=MMIP (MediaMonkey Installer Packages)=&lt;br /&gt;
The center of all MediaMonkey add-ons is the MMIP. There is nothing special about the file format itself; it is just a ZIP archive with a different filename. You can use any standard method to zip the files, and then just rename it to a .mmip file.&lt;br /&gt;
&lt;br /&gt;
If you wish to automate the process of zipping the MMIP packages, you are in luck.&lt;br /&gt;
* There is a tool named pack-mmip which allows you to automatically package MMIPs from the command line. It is available here: https://github.com/JL102/pack-mmip&lt;br /&gt;
* If your code is on Github, you can use a pipeline to automatically package your addon whenever you commit changes: https://www.mediamonkey.com/forum/viewtopic.php?p=476534&lt;br /&gt;
&lt;br /&gt;
==Folder Structure==&lt;br /&gt;
&lt;br /&gt;
===Metadata (info.json)===&lt;br /&gt;
At the root of an MMIP, there must be a file named info.json. It includes all essential information about the addon. It cannot be in a subfolder. &lt;br /&gt;
&lt;br /&gt;
Here is an example info.json:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;title&amp;quot;: &amp;quot;My Addon Name&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;myFirstAddon&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;This is my first addon!&amp;quot;,&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;minAppVersion&amp;quot;: &amp;quot;5.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;general&amp;quot;,&lt;br /&gt;
    &amp;quot;author&amp;quot;: &amp;quot;Jane Doe&amp;quot;,&lt;br /&gt;
    &amp;quot;icon&amp;quot;: &amp;quot;icon.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here are the possible attributes info.json can contain:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;max-width: 800px;&amp;quot;&lt;br /&gt;
	|-&lt;br /&gt;
		! Attribute&lt;br /&gt;
		! Required?&lt;br /&gt;
		! Information&lt;br /&gt;
	|-&lt;br /&gt;
		| title&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| This is the name of your addon that is visible to the user.&lt;br /&gt;
	|-&lt;br /&gt;
		| id&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| This is the unique ID of your addon. It does not have to be identical to your title, but it is recommended that your addon&#039;s id be similar to its title for organizational purposes. The id can include the following characters: [a-zA-Z0-9 -_&#039;()]. As of 5.0.3, this format will be enforced. We recommend sticking to an alphanumeric string without spaces.&lt;br /&gt;
	|-&lt;br /&gt;
		| description&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| The description of your addon. Make sure your description is brief, yet conveys the meaning and usage of your addon to the user. You can create line breaks in the description with \n.&lt;br /&gt;
	|-&lt;br /&gt;
		| version&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| The version number of your addon. It must be in the format %d.%d.%d, which is three period-separated numbers.&lt;br /&gt;
	|-&lt;br /&gt;
		| minAppVersion&lt;br /&gt;
		| no*&lt;br /&gt;
		| The minimum compatible version of MediaMonkey for your addon. Please consult [[Methods_Added_Post_5.0]] to view whether your addon is incompatible with older versions of MediaMonkey.&lt;br /&gt;
	|-&lt;br /&gt;
		| type&lt;br /&gt;
		| no&lt;br /&gt;
		| The category of your addon. The existing categories are: general, skin, layout, sync, metadata, and visualization; but you can create your own categories. If unspecified, the type defaults to general.&lt;br /&gt;
	|-&lt;br /&gt;
		| author&lt;br /&gt;
		| no&lt;br /&gt;
		| The name of the addon&#039;s author.&lt;br /&gt;
	|-&lt;br /&gt;
		| icon&lt;br /&gt;
		| no&lt;br /&gt;
		| The filename of your addon&#039;s icon image. The image file must be in the root of the MMIP.&lt;br /&gt;
	|-&lt;br /&gt;
		| config&lt;br /&gt;
		| no&lt;br /&gt;
		| The filename of your addon&#039;s configuration script. See Adding Configurable Settings for more info.&lt;br /&gt;
	|-&lt;br /&gt;
		| updateURL&lt;br /&gt;
		| no&lt;br /&gt;
		| Link to a custom URL to check for app updates, for addons that are self-hosted. See: [[#Self-hosted addons|Self-hosted addons]]&lt;br /&gt;
	|-&lt;br /&gt;
		| installScript&lt;br /&gt;
		| no&lt;br /&gt;
		| The filename of your addon&#039;s install script. The script will run once when the addon is being installed. &amp;lt;/br&amp;gt;The variable &amp;lt;code&amp;gt;window.__currentAddonPath&amp;lt;/code&amp;gt; will be set, pointing to the filesystem folder into which the addon has been installed.&lt;br /&gt;
&lt;br /&gt;
	|-&lt;br /&gt;
		| uninstallScript&lt;br /&gt;
		| no&lt;br /&gt;
		| The filename of your addon&#039;s uninstall script. The script will run once when the addon is being uninstalled. &amp;lt;/br&amp;gt;The variable &amp;lt;code&amp;gt;window.__currentAddonPath&amp;lt;/code&amp;gt; will be set, pointing to the filesystem folder into which the addon has been installed.&lt;br /&gt;
	|-&lt;br /&gt;
		| files&lt;br /&gt;
		| no&lt;br /&gt;
		| This only applies to plugins (type: &amp;quot;plugin&amp;quot;). Contains an array of objects, listing plugin files to be added. &amp;quot;src&amp;quot; is the source file path relative to the root inside mmip and &amp;quot;tgt&amp;quot; is the target file path relative to the Plugins folder. It can only write under the Plugins folder.&amp;lt;/br&amp;gt;Example: &lt;br /&gt;
			&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;quot;files&amp;quot;: [{&lt;br /&gt;
			    &amp;quot;src&amp;quot;: &amp;quot;pluginDLL.dll&amp;quot;,&lt;br /&gt;
			    &amp;quot;tgt&amp;quot;: &amp;quot;pluginDLL.dll&amp;quot;&lt;br /&gt;
			})&lt;br /&gt;
			&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
	|-&lt;br /&gt;
		| showRestartPrompt&lt;br /&gt;
		| no&lt;br /&gt;
		| Default is &amp;quot;true&amp;quot;. Tells MediaMonkey whether to prompt a user for a restart. &amp;lt;/br&amp;gt; Possible values: &amp;quot;true&amp;quot;, &amp;quot;false&amp;quot;, &amp;quot;install&amp;quot;, and &amp;quot;uninstall&amp;quot;. &amp;lt;/br&amp;gt; If &amp;quot;true&amp;quot;, MM will prompt the user for a restart on both install and uninstall. &amp;lt;/br&amp;gt; If &amp;quot;install&amp;quot;, MM will only prompt on install. &amp;lt;/br&amp;gt; If &amp;quot;uninstall&amp;quot;, MM will only prompt on uninstall. &amp;lt;/br&amp;gt; If &amp;quot;false&amp;quot;, neither installing nor uninstalling will prompt a restart. &amp;lt;/br&amp;gt; &amp;lt;u&amp;gt;Must be a string if provided. Boolean true/false is not supported.&amp;lt;/u&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; May be required in the future.&lt;br /&gt;
&lt;br /&gt;
===License===&lt;br /&gt;
You can choose to include a license file in the root of your addon, named license.txt. If present, when the addon is being installed. the license agreement will be shown to the user, and they will be required to accept the terms before installing.&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
All the HTML/CSS/JS code that handles MM functionality is stored in a tree structure. As a developer, you can add new files, replace existing, or even extend functionality of the existing files. This is achieved by replication of the folder structure in Addons. For example, if a file controls\checkbox.js is present in the Addon, it completely replaces the default MM functionality of a checkbox. Similarly, an _add suffix in a filename extends functionality of an existing file. E.g. dialogs\dlgAbout_add.js can contain code that adds new controls to the layout of the About dialog.&lt;br /&gt;
&lt;br /&gt;
For information on how to load other files &amp;amp; scripts into your code, please see the sections on &amp;lt;code&amp;gt;requirejs&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;localRequirejs&amp;lt;/code&amp;gt; here: [[Important_Methods_and_Utilities_(Addons)#requirejs]]&lt;br /&gt;
&lt;br /&gt;
===init.js===&lt;br /&gt;
You can choose to include a script named init.js in the root of your addon. If present, the script will run at startup.&lt;br /&gt;
&lt;br /&gt;
===MediaMonkey folder structure===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Root&#039;&#039;&#039; - Contains mainly mminit.js, which has the basic MM JS routines, several other utility .js files, maincontent.html which contains the basic definition of the main window. Also important is viewHandlers.js, which defines the tree structure of MM and behaviour of the views.&lt;br /&gt;
** &#039;&#039;&#039;controls&#039;&#039;&#039; - Contains all the controls used in MM UI. This starts with very basic controls, like button.js or dropdown.js, and continues with more complex things like listview.js and goes all the way to the complex UI elements, like equalizer.js, player.js or autoPlaylistEditor.js.&lt;br /&gt;
** &#039;&#039;&#039;dialogs&#039;&#039;&#039; - All the dialogs reside here, e.g. dlgConvertFormat.html + dlgConvertFormat.js&lt;br /&gt;
*** &#039;&#039;&#039;dlgOptions&#039;&#039;&#039; - Panels for the Tools &amp;gt; Options menu reside here.&lt;br /&gt;
** &#039;&#039;&#039;helpers&#039;&#039;&#039; - Contains miscellaneous helper scripts that do not fit into the other categories. For example: butt services, tray icon menus, docking, etc. &lt;br /&gt;
** &#039;&#039;&#039;layouts&#039;&#039;&#039; - Subfolders contain individual layouts, i.e. something that can replace/modify the files in the default folder structure in order to achieve completely different layout of MM (e.g. &amp;quot;Touch mode&amp;quot; layout). Unlike skins, layouts are supposed to mainly modify dimensions, positions and types of UI elements, not their color, etc. See [[Layouts]] for more information.&lt;br /&gt;
** &#039;&#039;&#039;scripts&#039;&#039;&#039; - This contains all non-skin addons that are installed to MediaMonkey, including addons that are preinstalled. They are organized by id.&lt;br /&gt;
** &#039;&#039;&#039;skin&#039;&#039;&#039; - Contains basic skin definitions, mostly a set of LESS files (an extension to CSS). See http://lesscss.org for more information.&lt;br /&gt;
*** &#039;&#039;&#039;icon&#039;&#039;&#039; - Contains all the icons used by MM. They are in SVG format in order to scale nicely to any display resolution. As anything else, they can be easily replaced by any Addon (skin or script).&lt;br /&gt;
** &#039;&#039;&#039;skins&#039;&#039;&#039; - Subfolders contain individual skins, i.e. something that can replace/modify the files in the default folder structure in order to achieve completely different looks of MM. Unlike layouts, this is supposed to mainly modify colors, fonts, icons, etc. See [[Skinning]] for more information.&lt;br /&gt;
&lt;br /&gt;
Filetypes that can be overridden:&lt;br /&gt;
* JS (e.g. controls/artistGrid.js&lt;br /&gt;
* HTML (e.g. (root)/player.html)&lt;br /&gt;
* LESS (e.g. skin/skin_complete.less)&lt;br /&gt;
* SVG (e.g. skin/icon/about.svg)&lt;br /&gt;
Filetypes that can be added to:&lt;br /&gt;
* JS (e.g. (root)/actions_add.js)&lt;br /&gt;
* LESS (e.g. skin/skin_base_add.less)&lt;br /&gt;
Filetypes that can be added new:&lt;br /&gt;
* JS (e.g. dialogs/dlgOptions/pnl_myAddon.js)&lt;br /&gt;
* HTML (e.g. dialogs/dlgOptions/pnl_myAddon.html)&lt;br /&gt;
* LESS (e.g. skin/skin_somethingnew.less)&lt;br /&gt;
* SVG (e.g. skin/icon/newIcon.svg)&lt;br /&gt;
* CSS (e.g. dialogs/dlgOptions/myExtraStylesheet.css) (Not recommended)&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
The versioning of addons must be in the format of three period-separated numbers (for example 0.0.1, 1.2.34, etc.) We recommend using semantic versioning (see https://semver.org).&lt;br /&gt;
&lt;br /&gt;
MediaMonkey has a built-in updater for addons. When the user clicks &amp;quot;Find Updates&amp;quot; in the addons screen, it will check online if there are any updates for addons that are installed. If any are found, the user clicks the download button that appears, then it will download and install the updated addon.&lt;br /&gt;
&lt;br /&gt;
==Submitting an addon==&lt;br /&gt;
To submit an addon, you must first have an account on the MediaMonkey forum and be signed in.&lt;br /&gt;
# 	Go to https://www.mediamonkey.com/addons/ and click Submit Addon.&lt;br /&gt;
# 	Select the most appropriate sub-category under MediaMonkey 5 that describes your addon.&lt;br /&gt;
# 	Click Submit New Addon.&lt;br /&gt;
##		Name: Make sure it is the same as your addon&#039;s title, so that it does not confuse users after installing.&lt;br /&gt;
##		Description: This does not have to be the same as the description in info.json. You can be as descriptive as you like.&lt;br /&gt;
##		Support Link, Author Link, and License Type are optional.&lt;br /&gt;
##		Image is not required, but highly recommended. We recommend that it be a square image, and the same image as your addon&#039;s icon.&lt;br /&gt;
#	Click next. On this page, you will add the first version of your addon.&lt;br /&gt;
##		Either upload your MMIP file or specify an external download link.&lt;br /&gt;
##		Compatibility: Specify the MediaMonkey versions on which you have confirmed your addon works.&lt;br /&gt;
##		What&#039;s New is optional, but you can specify updates here in future versions. &lt;br /&gt;
#	Click Save. Review your changes, make sure everything is accurate, then click Finish.&lt;br /&gt;
#	Your addon will appear in red until it is approved by a moderator. When approved, it will appear on the main addons page.&lt;br /&gt;
To add a new version of your addon, simply click Add New Version and follow steps 4-5. Each additional version needs to be approved by a moderator.&lt;br /&gt;
&lt;br /&gt;
==Adding to scripts==&lt;br /&gt;
To add code to the end of a certain script, create a JS file in its appropriate location, with _add at the end of its name.&lt;br /&gt;
&lt;br /&gt;
For example, if you wish to make an addition to controls/navigationBar.js, make controls/navigationBar_add.js inside your MMIP. You can also entirely replace the file if you name it controls/navigationBar.js inside your MMIP.&lt;br /&gt;
&lt;br /&gt;
==Self-hosted addons==&lt;br /&gt;
For addons hosted on external sites, please provide a field &#039;&#039;&#039;updateURL&#039;&#039;&#039; in info.json to allow MediaMonkey to check for updates to your addon. The server must reply with info on the most recent version of the addon, in either XML or JSON format. More fields can be returned, but will be ignored by current versions of MediaMonkey. &lt;br /&gt;
&lt;br /&gt;
For a working example, see: https://www.happymonkeying.com/update.php?upd=300021&lt;br /&gt;
Please note that since the release of that addon, the MinVersionMajor - MaxVersionBuild fields have been replaced with MinAppVersion, as described below.&lt;br /&gt;
&lt;br /&gt;
===XML===&lt;br /&gt;
# The sequence of &#039;&#039;&#039;VersionMajor&#039;&#039;&#039;, &#039;&#039;&#039;VersionMinor&#039;&#039;&#039;, and &#039;&#039;&#039;VersionRelease&#039;&#039;&#039; form the standard version string; in the below example, it would be 3.0.6. &#039;&#039;&#039;VersionBuild&#039;&#039;&#039; also must be included but can be blank.&lt;br /&gt;
# &#039;&#039;&#039;UpdateURL&#039;&#039;&#039; is the link to download the addon as an MMIP.&lt;br /&gt;
# &#039;&#039;&#039;MinAppVersion&#039;&#039;&#039; refers to the minimum supported version of MediaMonkey. It is optional but highly recommended to include.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VersionMajor&amp;gt;3&amp;lt;/VersionMajor&amp;gt;&lt;br /&gt;
&amp;lt;VersionMinor&amp;gt;0&amp;lt;/VersionMinor&amp;gt;&lt;br /&gt;
&amp;lt;VersionRelease&amp;gt;6&amp;lt;/VersionRelease&amp;gt;&lt;br /&gt;
&amp;lt;VersionBuild&amp;gt;&amp;lt;/VersionBuild&amp;gt;&lt;br /&gt;
&amp;lt;MinAppVersion&amp;gt;5.0.2&amp;lt;/MinAppVersion&amp;gt;&lt;br /&gt;
&amp;lt;UpdateURL&amp;gt;http://myserver/myAddon.mmip&amp;lt;/UpdateURL&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===JSON===&lt;br /&gt;
In JSON, &#039;&#039;&#039;version&#039;&#039;&#039; is provided as a single string instead of the four separate VersionX fields.&lt;br /&gt;
&lt;br /&gt;
Example (equivalent to the XML above):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;version&amp;quot;: &amp;quot;3.0.6&amp;quot;,&lt;br /&gt;
&amp;quot;minAppVersion&amp;quot;: &amp;quot;5.0.2&amp;quot;,&lt;br /&gt;
&amp;quot;updateUrl&amp;quot;:&amp;quot;http://myserver/myAddon.mmip&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Important tips=&lt;br /&gt;
*	&#039;&#039;&#039;Minimize the amount of computation your addon does on startup.&#039;&#039;&#039; Most scripts in MM run as soon as the window loads, so make sure your addon does not take a long time doing synchronous calculations that can cause the window to take longer to load. Ways to help avoid this:&lt;br /&gt;
**		Use &#039;&#039;&#039;window.whenReady()&#039;&#039;&#039; when possible. Using window.whenReady() will cause your callback to only fire when all scripts are loaded, the whole DOM is processed by our parser, and all controls are initialized.&lt;br /&gt;
**		Use asynchronous code when possible (with either callbacks, Promises, or async/await). If you perform heavy calculations that are synchronous, then it will halt the UI. See https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await for more information.&lt;br /&gt;
* 	&#039;&#039;&#039;Put your _add scripts into an anonymous function.&#039;&#039;&#039; To prevent potential issues of variables with the same name being used across different scripts, we recommend putting most/all of your logic into an anonymous function. You can do it with arrow notation or function notation.&lt;br /&gt;
**		&amp;lt;code&amp;gt;(() =&amp;gt; { /* Do stuff */ })();&amp;lt;/code&amp;gt;&lt;br /&gt;
**		&amp;lt;code&amp;gt;(function() { /* Do stuff */ })();&amp;lt;/code&amp;gt;&lt;br /&gt;
*	&#039;&#039;&#039;Enable Developer Mode.&#039;&#039;&#039; Under Help &amp;gt; About, you can enable Developer Mode. This will prevent crash logs from being automatically sent to MediaMonkey staff.&lt;br /&gt;
**		Additionally, developer mode can be enabled in the code via &amp;lt;code&amp;gt;app.enabledDeveloperMode(true)&amp;lt;/code&amp;gt; during testing. But &#039;&#039;&#039;do not&#039;&#039;&#039; keep it in your published extension.&lt;br /&gt;
*	&#039;&#039;&#039;Use requestFrame and requestTimeout instead of requestAnimationFrame and setTimeout.&#039;&#039;&#039; The custom functions automatically check whether the window/control still exists, and do not call the callback when the window/control have already been destroyed, to prevent crashes.&lt;br /&gt;
&lt;br /&gt;
*	&#039;&#039;&#039;Do not spam console.log&#039;&#039;&#039; in your final addon that&#039;s distributed to users. While developing it, it is completely okay to use it as much as you want! However, the JavaScript console.log function is relatively computationally expensive, so if it spams logs, then it will degrade performance. If it just logs occasionally, for debugging purposes, it&#039;s okay. Just don&#039;t overdo it.&lt;br /&gt;
&lt;br /&gt;
* To avoid breaking for...in loops, do not add functions to Array.prototype with the syntax &amp;lt;code&amp;gt;Array.prototype.func = function () {}&amp;lt;/code&amp;gt;. Details here: https://www.ventismedia.com/mantis/view.php?id=18145&lt;br /&gt;
&lt;br /&gt;
=Actions, Hotkeys &amp;amp; Menus=&lt;br /&gt;
The MediaMonkey interface is controlled largely by actions, which are defined inside actions.js. Most UI elements are tied to actions, and all hotkeys are defined by actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Defining custom actions must be done in actions_add.js. Otherwise, MediaMonkey will not properly register the actions. &lt;br /&gt;
&lt;br /&gt;
==Defining actions==&lt;br /&gt;
Actions are defined in the global actions object. Each action contains the following attributes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;max-width: 800px;&amp;quot;&lt;br /&gt;
	|-&lt;br /&gt;
		! Attribute&lt;br /&gt;
		! Type&lt;br /&gt;
		! Required?&lt;br /&gt;
		! Information&lt;br /&gt;
	|-&lt;br /&gt;
		| title&lt;br /&gt;
		| function (string)&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| Function that returns the (string) title of the action. &lt;br /&gt;
	|-&lt;br /&gt;
		| execute&lt;br /&gt;
		| function &lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| Function that runs when the action is executed. &lt;br /&gt;
	|-&lt;br /&gt;
		| category&lt;br /&gt;
		| function (string)&lt;br /&gt;
		| no&lt;br /&gt;
		| Function that returns the (string) name of the action&#039;s category. Categories are defined in the global actionCategories object. Default is general.&lt;br /&gt;
	|-&lt;br /&gt;
		| hotkeyAble&lt;br /&gt;
		| boolean&lt;br /&gt;
		| no&lt;br /&gt;
		| Determines whether the action can be tied to a hotkey. Default is false.&lt;br /&gt;
	|-&lt;br /&gt;
		| icon&lt;br /&gt;
		| string&lt;br /&gt;
		| no&lt;br /&gt;
		| Icon that shows in menus that contain the action. The icon ids are located in skin/(iconname).svg.&lt;br /&gt;
	|-&lt;br /&gt;
		| visible&lt;br /&gt;
		| function (boolean)&lt;br /&gt;
		| no&lt;br /&gt;
		| Determines whether the action will show up in menus. This can be useful for integrating party mode, for example, by disabling your action when party mode is enabled with&lt;br /&gt;
			&amp;lt;code&amp;gt;visible: window.uitools.getCanEdit&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
Additionally, actions can contain any other custom attributes and methods.&lt;br /&gt;
&lt;br /&gt;
Defining your own custom action in actions_add.js:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
actions.myCustomAction = {&lt;br /&gt;
    title: &#039;My Custom Action&#039;,&lt;br /&gt;
    hotkeyAble: true,&lt;br /&gt;
    execute: function () {&lt;br /&gt;
        messageDlg(&#039;This action was created by hotkeyAction script.&#039;, &#039;information&#039;, [&#039;btnOK&#039;], {&lt;br /&gt;
            defaultButton: &#039;btnOK&#039;&lt;br /&gt;
        }, undefined);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assigning hotkeys to actions==&lt;br /&gt;
Assigning hotkeys is very simple. Hotkeys are handled by the global hotkeys object, and you can register a hotkey with the hotkeys.addHotkey method.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;hotkeys.addHotkey(hotkey, action, global);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;max-width: 800px;&amp;quot;&lt;br /&gt;
	|-&lt;br /&gt;
		! Attribute&lt;br /&gt;
		! Type&lt;br /&gt;
		! Required?&lt;br /&gt;
		! Information&lt;br /&gt;
	|-&lt;br /&gt;
		| hotkey&lt;br /&gt;
		| string&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| The hotkey to assign. See Tools &amp;gt; Options &amp;gt; Hotkeys for the right syntax.&lt;br /&gt;
	|-&lt;br /&gt;
		| action&lt;br /&gt;
		| string&lt;br /&gt;
		| &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
		| The action (in window.actions) to execute. Caps sensitive.&lt;br /&gt;
	|-&lt;br /&gt;
		| global&lt;br /&gt;
		| boolean&lt;br /&gt;
		| no&lt;br /&gt;
		| Determines whether the hotkey is global (accessible outside the MM window). Default is false.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adding a hotkey to your custom action:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;hotkeys.addHotkey(&#039;Ctrl+Shift+Q&#039;, &#039;myCustomAction&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The addHotkey method automatically handles duplicates and deletions. So if a user deletes the hotkey, you don&#039;t have to worry about it showing up again every time the window reloads; and they can manually re-add it.&lt;br /&gt;
&lt;br /&gt;
To see the syntax that MediaMonkey uses for hotkeys, go to the Tools&amp;gt;Options&amp;gt;Hotkeys window and type in your desired hotkey.&lt;br /&gt;
&lt;br /&gt;
==Adding actions to menus==&lt;br /&gt;
MediaMonkey uses a structure for menus that allows infinitely nested sub-menus. The data structure of a menu item is as follows:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
menuItem = {&lt;br /&gt;
    action: {&lt;br /&gt;
        title: String,      // Required&lt;br /&gt;
        execute: Function,  // Usually required&lt;br /&gt;
        icon: String,&lt;br /&gt;
        visible: Boolean,&lt;br /&gt;
        disabled: Boolean,&lt;br /&gt;
        submenu: Array&lt;br /&gt;
    },&lt;br /&gt;
    order: Number,          // Required&lt;br /&gt;
    grouporder: Number     // Required&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;submenu&amp;lt;/code&amp;gt; field, which is optional, contains an array of as many other menu items as desired. The &amp;lt;code&amp;gt;grouporder&amp;lt;/code&amp;gt; field determines which group a menu item will belong to, and groups will be automatically sorted by the &amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt; field. Menu items defined in actions.js are intentionally given order and grouporder like 10, 20, 30, etc. to allow addons to insert menu items in between them as desired.&lt;br /&gt;
&lt;br /&gt;
Note: These fields can &#039;&#039;either&#039;&#039; be the datatype as described above &#039;&#039;or&#039;&#039; a function which returns the requested data type. At runtime, the global method &amp;lt;code&amp;gt;resolveToValue&amp;lt;/code&amp;gt; is called, which either returns the primitive type or calls the provided function. If you analyze the actions in actions.js, you&#039;ll see bits like &amp;lt;code&amp;gt;visible: window.uitools.getCanEdit&amp;lt;/code&amp;gt;. This is an example of a function which resolves to a boolean.&lt;br /&gt;
&lt;br /&gt;
There are two menu groups that you will most likely want to add items to: The main menu bar, and tracklist menus.&lt;br /&gt;
&lt;br /&gt;
===Main menu bar===&lt;br /&gt;
The File, Edit, View, etc. menus are defined in &amp;lt;code&amp;gt;window._menuItems&amp;lt;/code&amp;gt;, from actions.js. See actions.js or look in the devtools console to see all the possible submenus to which to add your action. &#039;&#039;&#039;You can only add to these menus inside actions_add.js.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example, if you wish to add an action to the &amp;quot;Tools &amp;gt; Edit tags&amp;quot; submenu, that is under &amp;lt;code&amp;gt;window._menuItems.editTags&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
window._menuItems.editTags.submenu.push({&lt;br /&gt;
    action: actions.myNewAction,&lt;br /&gt;
    order: 10,&lt;br /&gt;
    grouporder: 10&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tracklist menus===&lt;br /&gt;
Tracklist menus, which may also be called media menus, are the ones that contain &#039;&#039;Play now&#039;&#039;, &#039;&#039;Play next&#039;&#039;, &#039;&#039;Properties&#039;&#039;, etc. These are defined in &amp;lt;code&amp;gt;window.menus.tracklistMenuItems&amp;lt;/code&amp;gt;, from controls/trackListView.js. &#039;&#039;&#039;You should only add to these menus inside controls/trackListView_add.js.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example, if you wish to add an action below Cut, Copy, and Paste, but above Rename:&lt;br /&gt;
&lt;br /&gt;
* First, look in the definition of menus.tracklistMenuItems that Cut/Copy/Paste/Rename are in group 40, Paste&#039;s order is 30, and Rename&#039;s order is 35.&lt;br /&gt;
* This item must go in the same group and have an order between 30 and 35.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
window.menus.tracklistMenuItems.push({&lt;br /&gt;
    action: actions.myNewAction,&lt;br /&gt;
    order: 31,&lt;br /&gt;
    grouporder: 40&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Categories==&lt;br /&gt;
&#039;&#039;Coming soon&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Storing Data=&lt;br /&gt;
&lt;br /&gt;
==JSON==&lt;br /&gt;
When you wish to save data such as user preferences, the most effective method is to save values in persistent.json. The way you do this is through the app.setValue and app.getValue methods. &lt;br /&gt;
Both methods require two parameters.&lt;br /&gt;
&lt;br /&gt;
If retrieving a value that is primitive, set the second parameter as undefined.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
app.setValue(&#039;myExtension_foo&#039;, &#039;bar&#039;);&lt;br /&gt;
    &lt;br /&gt;
var foo = app.getValue(&#039;myExtension_foo&#039;, undefined);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When retrieving a value that is an object, you must provide the second parameter as an object. The function will take that object and populate each value if it exists, so you can easily manage default settings this way.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Saving settings&lt;br /&gt;
app.setValue(&#039;myExtension_settings&#039;, {&lt;br /&gt;
    option1: 0,&lt;br /&gt;
    option2: &#039;electric boogaloo&#039;&lt;br /&gt;
});&lt;br /&gt;
// Getting settings with hardcoded defaults&lt;br /&gt;
var settings = app.getValue(&#039;myExtension_settings&#039;, {&lt;br /&gt;
    option1: 0,&lt;br /&gt;
    option2: &#039;default&#039;&lt;br /&gt;
})&lt;br /&gt;
// Passing an empty object works too&lt;br /&gt;
var settings = app.getValue(&#039;myExtension_settings&#039;, {});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This data is automatically saved in persistent.json, which is saved in the user&#039;s AppData folder or the Portable subfolder; for non-portable and portable installations, respectively. Persistent.json is only deleted if the user manually deletes it or removes a portable installation.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Make sure the keys that you use are unique. Include the addon ID in the key, as demonstrated above, to ensure this.&lt;br /&gt;
&lt;br /&gt;
==Database==&lt;br /&gt;
If you need to manage more data, you can use the database. In MM5, you can access the database through the app.db object. For more information, see: https://www.mediamonkey.com/webhelp/MM5Preview/classes/DB.html.&lt;br /&gt;
&lt;br /&gt;
To execute queries that do not need return values, use app.db.executeQueryAsync:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
app.db.executeQueryAsync(&#039;CREATE TABLE IF NOT EXISTS myPlugin (_id INTEGER PRIMARY KEY, value TEXT UNIQUE NOT NULL)&#039;)&lt;br /&gt;
.then(() =&amp;gt; {&lt;br /&gt;
	app.db.executeQueryAsync(&#039;INSERT INTO myPlugin [. . .]&#039;);&lt;br /&gt;
})&lt;br /&gt;
.catch(err =&amp;gt; {&lt;br /&gt;
    console.error(err)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
To execute queries that need return values, use app.db.getQueryResultAsync:&lt;br /&gt;
app.db.getQueryResultAsync(&#039;SELECT * FROM Albums&#039;)&lt;br /&gt;
.then(result =&amp;gt; {&lt;br /&gt;
    // do stuff&lt;br /&gt;
})&lt;br /&gt;
.catch(err =&amp;gt; console.error(err));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method returns a QueryResults object, which is a linked list. See https://www.mediamonkey.com/webhelp/MM5Preview/classes/QueryResults.html.&lt;br /&gt;
&lt;br /&gt;
==Adding Configurable Settings to your Addon==&lt;br /&gt;
There are two ways to add configurable options to an addon: via the &amp;quot;config&amp;quot; option in info.json, or modifying the options dialog.&lt;br /&gt;
&lt;br /&gt;
===Addon Config===&lt;br /&gt;
The recommended way of adding configurable settings to an addon, if the settings are not directly related to an existing options panel, is to use the built-in addon configuration options. To do this, you must specify &amp;quot;config&amp;quot; in info.json:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&amp;quot;config&amp;quot;: &amp;quot;config.js&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside your configuration js file, you must define a window.configInfo object, with two functions: load and save.&lt;br /&gt;
&lt;br /&gt;
Load is executed during page load, and save is executed after &amp;quot;OK&amp;quot; is pressed. Both functions are passed two parameters: pnl and item.&lt;br /&gt;
* &amp;quot;pnl&amp;quot; (pnlDiv) is the HTML node of the panel&lt;br /&gt;
* &amp;quot;item&amp;quot; (addon) is an object that contains information about the addon, such as title, ext_id, description, version, installType, author, path, etc.&lt;br /&gt;
&lt;br /&gt;
You can opt to add a config HTML as well, by giving it the same base name as your config JS. For example, if it is named config.js, create config.html; if it is named MediaMonkeyRocks.js, create MediaMonkeyRocks.html.&lt;br /&gt;
&lt;br /&gt;
When a configuration script is provided for an addon, the panel will open once the addon is installed. Additionally, a button will appear in its listing to open the configuration panel.&lt;br /&gt;
&lt;br /&gt;
Example usage:&lt;br /&gt;
&lt;br /&gt;
config.html&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;uiRows&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-id=&amp;quot;chbOption1&amp;quot; data-control-class=&amp;quot;Checkbox&amp;quot; data-tip=&amp;quot;Option 1 tooltip&amp;quot;&amp;gt;Option 1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-id=&amp;quot;chbOption2&amp;quot; data-control-class=&amp;quot;Checkbox&amp;quot; data-tip=&amp;quot;Option 2 tooltip&amp;quot;&amp;gt;Option 1&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
config.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
window.configInfo = {&lt;br /&gt;
    load: function (pnlDiv, addon) {&lt;br /&gt;
        // Load config with defaults&lt;br /&gt;
        this.config = app.getValue(&#039;myAddon_config&#039;, {&lt;br /&gt;
            option1: true,&lt;br /&gt;
            option2: false,&lt;br /&gt;
        });&lt;br /&gt;
        // Set checkboxes to the configuration settings&lt;br /&gt;
        var UI = getAllUIElements(pnlDiv);&lt;br /&gt;
        UI.chbOption1.controlClass.checked = this.config.option1;&lt;br /&gt;
        UI.chbOption2.controlClass.checked = this.config.option2;&lt;br /&gt;
    },&lt;br /&gt;
    save: function (pnlDiv, addon) {&lt;br /&gt;
        // Save settings according to the checkbox changes&lt;br /&gt;
        var UI = getAllUIElements(pnlDiv);&lt;br /&gt;
        this.config.option1 = UI.chbOption1.controlClass.checked;&lt;br /&gt;
        this.config.option2 = UI.chbOption2.controlClass.checked;&lt;br /&gt;
        app.setValue(&#039;myAddon_config&#039;, this.config);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Options Dialog===&lt;br /&gt;
When modifying the options dialog, you can either add to / modify an existing panel or create your own panel.&lt;br /&gt;
&lt;br /&gt;
====Adding to an existing panel====&lt;br /&gt;
Adding to an existing panel can be done with _add JS files. For more context, take a look at dialogs/dlgOptions.js.&lt;br /&gt;
&lt;br /&gt;
For example, if you wish to add to the General Options panel:&lt;br /&gt;
#	Create dialogs/dlgOptions/pnl_General_add.js&lt;br /&gt;
#	Override the optionPanels.pnl_General.load and optionPanels.pnl_General.save functions to add your own code&lt;br /&gt;
#	Use the divFromSimpleMenu function to automatically create styled checkboxes/radio buttons&lt;br /&gt;
#	Use app.getValue and app.setValue to retrieve and save the user settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; {&lt;br /&gt;
    var options = [&lt;br /&gt;
        {&lt;br /&gt;
            title: &#039;Option 1&#039;, // The label that appears on the checkbox/radio button&lt;br /&gt;
            radiogroup: &#039;myAddon_RadioOptions&#039;, // Self-explanatory&lt;br /&gt;
            execute: function() {state.RadioOptions = &#039;option1&#039;} // This function runs whenever the element is clicked&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            title: &#039;Option 2&#039;,&lt;br /&gt;
            radiogroup: &#039;myAddon_RadioOptions&#039;,&lt;br /&gt;
            execute: function() {state.RadioOptions = &#039;option2&#039;}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            title: &#039;My Checkbox&#039;,&lt;br /&gt;
            checkable: true, // Turns it into a checkbox&lt;br /&gt;
            execute: function() {state.Checkbox = this.checked;}&lt;br /&gt;
        },&lt;br /&gt;
    ]&lt;br /&gt;
    var state;&lt;br /&gt;
    &lt;br /&gt;
    optionPanels.pnl_General.override({&lt;br /&gt;
        load: function($super, sett, pnlDiv) {&lt;br /&gt;
            $super(sett, pnlDiv);&lt;br /&gt;
            console.log(&#039;yoyoyoyoyo&#039;)&lt;br /&gt;
            &lt;br /&gt;
            state = app.getValue(&#039;myAddon_settings&#039;, {&lt;br /&gt;
                RadioOptions: &#039;option1&#039;,&lt;br /&gt;
                Checkbox: false&lt;br /&gt;
            });&lt;br /&gt;
            // Update checkbox/radiobutton state from settings&lt;br /&gt;
            if (state.RadioOptions == &#039;option1&#039;) {options[0].checked = true; options[1].checked = false;} &lt;br /&gt;
            else {options[0].checked = false; options[1].checked = true}&lt;br /&gt;
            if (state.Checkbox == true) options[2].checked = true;&lt;br /&gt;
            // Create an HTML menu from the options&lt;br /&gt;
            divFromSimpleMenu(pnlDiv, options);&lt;br /&gt;
        },&lt;br /&gt;
        save: function($super, sett, pnlDiv) {&lt;br /&gt;
            $super(sett, pnlDiv);&lt;br /&gt;
            // Save settings&lt;br /&gt;
            app.setValue(&#039;myAddon_settings&#039;, state);&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Creating a new panel====&lt;br /&gt;
You can define your new panel inside dialogs/dlgOptions, and add it inside dialogs/dlgOptions_add.js.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Coming soon&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Plugins=&lt;br /&gt;
While most functionality can be reached in MediaMonkey 5 via addons using JS/HTML, it still supports the majority of the Winamp 2.0 API. Winamp plugin support for MediaMonkey 5 is the same as in MediaMonkey 4. See [[Winamp Plug-ins (MM4)]] for more details.&lt;br /&gt;
&lt;br /&gt;
==Packaging a Plugin==&lt;br /&gt;
To create an MMIP installer for a plugin, you need to include the information about your plugin&#039;s file[s] into info.json:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;type&amp;quot;: &amp;quot;plugin&amp;quot;,&lt;br /&gt;
&amp;quot;files&amp;quot;: [{&lt;br /&gt;
	&amp;quot;src&amp;quot;: &amp;quot;pluginDLL.dll&amp;quot;,&lt;br /&gt;
	&amp;quot;tgt&amp;quot;: &amp;quot;pluginDLL.dll&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It can contain more files. &amp;quot;src&amp;quot; is the source file path relative to the root inside mmip, and &amp;quot;tgt&amp;quot; is target file relative to the Plugins folder inside the MediaMonkey installation. It can write only under the Plugins folder.&lt;br /&gt;
&lt;br /&gt;
If needed, you can also include an installScript and uninstallScript:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;installScript&amp;quot;: &amp;quot;install.js&amp;quot;,&lt;br /&gt;
&amp;quot;uninstallScript&amp;quot;: &amp;quot;uninstall.js&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The install script will run during installation and uninstall script will run after uninstallation. &lt;br /&gt;
&lt;br /&gt;
Both will run inside the main window, allowing full access to the UI. Additionally, the variable &amp;lt;code&amp;gt;window.__currentAddonPath&amp;lt;/code&amp;gt; will be set, pointing to the filesystem folder into which the addon has been installed.&lt;br /&gt;
&lt;br /&gt;
=Accessing the main window object from other windows=&lt;br /&gt;
Sometimes, you may need to run functions  or access properties from the main window in the context of other windows. For example, performing live updates in an options panel. To do this, use the app.dialogs.getMainWindow() method.&lt;br /&gt;
&lt;br /&gt;
If you have a property &amp;quot;x&amp;quot; in the main window, this is how to access it from another window:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;app.dialogs.getMainWindow().getValue(&#039;x&#039;)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If you assign a property or method to &amp;quot;app&amp;quot;, you will need to do this to get the version of it that is attached to the main window.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;app.dialogs.getMainWindow().getValue(&#039;app&#039;).myObject.myMethod();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=UI Elements &amp;amp; Controls=&lt;br /&gt;
&lt;br /&gt;
==Icons==&lt;br /&gt;
Instead of bitmaps, MediaMonkey uses [https://en.wikipedia.org/wiki/Scalable_Vector_Graphics SVGs] for its icons. They are stored in the &amp;lt;code&amp;gt;skin/icon&amp;lt;/code&amp;gt; folder. This is because SVGs can be scaled to any size without appearing pixelated. See [[Skinning_Guide#Creating_Icons|Skinning Guide/Creating Icons]] for an introduction on how to create custom icons. &lt;br /&gt;
&lt;br /&gt;
There are three ways to load icons: The &amp;lt;code&amp;gt;data-icon&amp;lt;/code&amp;gt; HTML attribute; &amp;lt;code&amp;gt;loadIconFast()&amp;lt;/code&amp;gt;; and &amp;lt;code&amp;gt;loadIcon()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===data-icon===&lt;br /&gt;
Whenever HTML is loaded and/or classes are initialized, any and all elements with the attribute &amp;quot;data-icon&amp;quot; will automatically load the SVG files associated with the icon name provided. For details on how it works, check window.initializeControls in mminit.js. See this example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-control-class=&amp;quot;toolbutton&amp;quot; data-icon=&amp;quot;music&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This will create a ToolButton control with the icon from music.svg. Using the ToolButton control class is not required, but if you do not add any CSS to limit the size of the icon, it will appear very large.&lt;br /&gt;
&lt;br /&gt;
===loadIconFast===&lt;br /&gt;
If you wish to load an icon programmatically, use &amp;lt;code&amp;gt;loadIconFast()&amp;lt;/code&amp;gt;. For more details, see [https://www.mediamonkey.com/docs/api/classes/Window.html#method_loadIconFast loadIconFast].&lt;br /&gt;
&lt;br /&gt;
===loadIcon===&lt;br /&gt;
Only use &amp;lt;code&amp;gt;loadIcon()&amp;lt;/code&amp;gt; if you need to access the raw SVG code before adding it to the DOM. For more details, see [https://www.mediamonkey.com/docs/api/classes/Window.html#method_loadIcon loadIcon].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;More coming soon&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- todo: data-control-class and data-init-params --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=WebHelp:Cloud_Services/5.0&amp;diff=10519</id>
		<title>WebHelp:Cloud Services/5.0</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=WebHelp:Cloud_Services/5.0&amp;diff=10519"/>
		<updated>2021-06-04T20:06:12Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Sync from MediaMonkey to Cloud Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page|Wiki Home]] &amp;amp;gt; [[{{WebHelp:Links|Content}}|MediaMonkey 5 Help]] &amp;amp;gt; [[{{WebHelp:Links|Sharing Content and Data from your Library}}|Sharing Content and Data from your Library]] &amp;amp;gt; Cloud Services&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{WebHelpHeader|Cloud Services}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
MediaMonkey can connect with several Cloud Service providers:&lt;br /&gt;
* &#039;&#039;&#039;Dropbox/Dropbox (app folder)&#039;&#039;&#039;, whereas Dropbox gives access to all of your Dropbox, Dropbox (app folder) limits the access to to &#039;&#039;/Apps/MediaMonkey app/&#039;&#039; folder on Dropbox.&lt;br /&gt;
* &#039;&#039;&#039;Google Drive&#039;&#039;&#039;, MediaMonkey can only access files on Google Drive uploaded by MediaMonkey.&lt;br /&gt;
* &#039;&#039;&#039;OneDrive&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;[[{{WebHelp:Links|My Computer}}#Devices_.26_Services|Devices &amp;amp; Services]]&#039;&#039;&#039; in the Media Tree use the &#039;&#039;&#039;+&#039;&#039;&#039; next to &#039;&#039;Storage and Services&#039;&#039; to add a Cloud Service connection to MediaMonkey. Using this will take you to the Cloud Service providers website where you need to log in to your account and set the permissions for MediaMonkey to access your cloud account.&lt;br /&gt;
&lt;br /&gt;
The Cloud Service is designed to be used to work with media files uploaded by MediaMonkey. When MediaMonkey uploads media files it also updates a database of media file info on the Cloud Service. This will be missing if you connect MediaMonkey with a Cloud Service that had files uploaded through other means.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Playback from a Cloud Service ==&lt;br /&gt;
&lt;br /&gt;
MediaMonkey can play files from Cloud Services. Select any file through the &#039;&#039;Remote Content&#039;&#039; tab of the Service Profile under &#039;&#039;&#039;[[{{WebHelp:Links|My Computer}}#Devices_.26_Services|Devices &amp;amp; Services]]&#039;&#039;&#039; node in the Media Tree to [[{{WebHelp:Links|Playing_Audio_Tracks}}#Selecting_Files_to_Play|play]] the file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sync from MediaMonkey to Cloud Service ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;It&#039;s recommended (required for Google Drive) to use MediaMonkey to upload files to the Cloud Service as MediaMonkey creates its own database with the media file&#039;s tags. This metadata will be missing if you upload files to the Cloud Service outside of MediaMonkey.&#039;&#039;&#039; You can select what content from the MediaMonkey Library and set how this content is synced to the Cloud Service:&lt;br /&gt;
* On the &#039;&#039;Library content&#039;&#039; tab of the Service Profile you can select what content from your MediaMonkey Library should be synced to the Cloud Service. The settings are the same as for Syncing to Devices as discussed here: [[{{WebHelp:Links|Exporting_Tracks}}#Sync_List_.28Library_--.3E_Device.29|Sync List (Library --&amp;gt; Device)]].&lt;br /&gt;
* On the &#039;&#039;Sync Profile&#039;&#039; tab of the Service Profile you can select how MediaMonkey syncs the selected content to the Cloud Service. The settings are the same as for Syncing to Devices as discussed here: [[{{WebHelp:Links|Exporting_Tracks}}#Sync_Profile|Sync Profile]].&lt;br /&gt;
&lt;br /&gt;
== Sync from Cloud Service to MediaMonkey ==&lt;br /&gt;
&lt;br /&gt;
There are 5 settings controlling how MediaMonkey syncs from a Cloud Service to MediaMonkey on the &#039;&#039;Remote Content&#039;&#039; tab of the Service Profile:&lt;br /&gt;
* &#039;&#039;Scan &amp;amp;#39;Cloud Service&amp;amp;#39; content to the local database&#039;&#039; will add files stored on the Cloud Service to the MediaMonkey Library.&lt;br /&gt;
* &#039;&#039;Only include content that matches files already in the database&#039;&#039; will limit this to files from cloud service to files matched  based on metadata with files on your PC in the MediaMonkey Library. If disabled the media file is added as remote file with a cloud only icon in the Source column.&lt;br /&gt;
* &#039;&#039;Download &amp;amp;#39;Cloud Service&amp;amp;#39; content that is not accessible locally&#039;&#039; will download any files on the Cloud Service that aren&#039;t in the MediaMonkey Library the local device.&lt;br /&gt;
* &#039;&#039;Sync &amp;amp;#39;Cloud Service&amp;amp;#39; metadata to Library&#039;&#039; &lt;br /&gt;
* &#039;&#039;Sync schedule&#039;&#039; allows you to set when MediaMonkey will automatically Sync between the Cloud Service and MediaMonkey.&lt;br /&gt;
&lt;br /&gt;
You can access files Synced from the Cloud Service to the MediaMonkey Library in the &#039;&#039;&#039;[[{{WebHelp:Links|Library}}|Collections]] &amp;amp;gt; [[{{WebHelp:Links|Library}}#Location|Location]]&#039;&#039;&#039; node in the Media Tree.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related ==&lt;br /&gt;
&lt;br /&gt;
* [[{{WebHelp:Links|Using Playlists}}|Playlists]]&lt;br /&gt;
* [[{{WebHelp:Links|Using AutoPlaylists}}|AutoPlaylists]]&lt;br /&gt;
&lt;br /&gt;
{{WebHelpFooter}}&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=Sample_AMG_Search_script&amp;diff=8877</id>
		<title>Sample AMG Search script</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=Sample_AMG_Search_script&amp;diff=8877"/>
		<updated>2018-01-19T09:29:14Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Attention==&lt;br /&gt;
&#039;&#039;&#039;Maybe this script should be changed to one using a website that allows this kind of action. &#039;&#039;AMG does not.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
This script demonstrates how to plug-in into MediaMonkey Web Search dialog. It searches AMG web a lets user tag some basic fields. Don&#039;t forget that it&#039;s rather a sample of what [[Search scripts]] can do than fully working script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It currently searches AllMusic&#039;s website for the given album, presents user results found and lets tag these fields:&lt;br /&gt;
* Album&lt;br /&gt;
* Artist&lt;br /&gt;
* Track titles&lt;br /&gt;
* Album art&lt;br /&gt;
* Release year&lt;br /&gt;
* Genres&lt;br /&gt;
* Styles&lt;br /&gt;
* Moods&lt;br /&gt;
* Themes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There&#039;s a lot that could be improved, namely:&lt;br /&gt;
* Error handling - currently many possible problems aren&#039;t solved&lt;br /&gt;
* More fields could be tagged&lt;br /&gt;
* Results could be formatted using custom HTML page (not the downloaded one)&lt;br /&gt;
* Many others...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It&#039;s quite well documented, and so it can help in creation of your own Search scripts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
&#039; Sample AMG Search script&lt;br /&gt;
&#039;&lt;br /&gt;
&#039; This script demonstrates how to plug-in into MediaMonkey Web Search dialog. You should save it to Scripts folder as&lt;br /&gt;
&#039; SearchAMG.vbs. It has to be in Scripts.ini file, where entries can be as follows:&lt;br /&gt;
&#039;&lt;br /&gt;
&#039; [SearchAMG]&lt;br /&gt;
&#039; FileName=SearchAMG.vbs&lt;br /&gt;
&#039; Order=10&lt;br /&gt;
&#039; DisplayName=Search All Music Guide&lt;br /&gt;
&#039; Language=VBScript&lt;br /&gt;
&#039; ScriptType=3&lt;br /&gt;
&lt;br /&gt;
Dim WB, WB2&lt;br /&gt;
Dim FoundLinks&lt;br /&gt;
Dim Tmr&lt;br /&gt;
&lt;br /&gt;
&#039; MediaMonkey calls this method whenever a search is started using this script&lt;br /&gt;
Sub StartSearch(Panel, SearchTerm, SearchArtist, SearchAlbum)&lt;br /&gt;
  Set UI = SDB.UI&lt;br /&gt;
&lt;br /&gt;
  &#039; This is a web browser that we use to present results to the user&lt;br /&gt;
  Set WB = UI.NewActiveX(Panel, &amp;quot;Shell.Explorer&amp;quot;)&lt;br /&gt;
  WB.Common.Align = 5      &#039; Fill whole client rectangle&lt;br /&gt;
  WB.Common.ControlName = &amp;quot;WB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  &#039; This is a hidden browser that we use to find results (a better solution can be used, but this seems to be the easiest...)&lt;br /&gt;
  Set WB2 = UI.NewActiveX(Panel, &amp;quot;Shell.Explorer&amp;quot;)&lt;br /&gt;
  WB2.Common.ControlName = &amp;quot;WB2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  WB.Common.BringToFront&lt;br /&gt;
&lt;br /&gt;
  &#039; The following HTML is taken from AMG web pages - so that we don&#039;t have to load the search page and can post the query directly&lt;br /&gt;
  &#039; The following line will probably need some better way of retrieving server name from AMG. Using www.allmusicguide.com doesn&#039;t work at this moment.&lt;br /&gt;
  html = &amp;quot;&amp;lt;form name=&amp;quot;&amp;quot;search&amp;quot;&amp;quot; action=&amp;quot;&amp;quot;http://wm08.allmusic.com/cg/amg.dll&amp;quot;&amp;quot; method=&amp;quot;&amp;quot;post&amp;quot;&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
  html = html &amp;amp; &amp;quot;&amp;lt;input type=&amp;quot;&amp;quot;hidden&amp;quot;&amp;quot; name=&amp;quot;&amp;quot;P&amp;quot;&amp;quot; value=&amp;quot;&amp;quot;amg&amp;quot;&amp;quot; /&amp;gt;&amp;quot;&lt;br /&gt;
  html = html &amp;amp; &amp;quot;&amp;lt;p&amp;gt;&amp;lt;input type=&amp;quot;&amp;quot;text&amp;quot;&amp;quot; name=&amp;quot;&amp;quot;sql&amp;quot;&amp;quot; id=&amp;quot;&amp;quot;search_txt&amp;quot;&amp;quot; /&amp;gt;&amp;quot;&lt;br /&gt;
  html = html &amp;amp; &amp;quot;&amp;lt;input type=&amp;quot;&amp;quot;image&amp;quot;&amp;quot; src=&amp;quot;&amp;quot;/i/pages/wide/go.gif&amp;quot;&amp;quot; id=&amp;quot;&amp;quot;search_button&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  html = html &amp;amp; &amp;quot;&amp;lt;p&amp;gt;&amp;lt;select name=&amp;quot;&amp;quot;opt1&amp;quot;&amp;quot; id=&amp;quot;&amp;quot;search_opt&amp;quot;&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
  html = html &amp;amp; &amp;quot;  &amp;lt;option value=&amp;quot;&amp;quot;1&amp;quot;&amp;quot; selected=&amp;quot;&amp;quot;selected&amp;quot;&amp;quot;&amp;gt;Artist/Group&amp;lt;/option&amp;gt;&amp;quot;&lt;br /&gt;
  html = html &amp;amp; &amp;quot;  &amp;lt;option value=&amp;quot;&amp;quot;2&amp;quot;&amp;quot;&amp;gt;Album&amp;lt;/option&amp;gt;&amp;quot;&lt;br /&gt;
  html = html &amp;amp; &amp;quot;  &amp;lt;option value=&amp;quot;&amp;quot;3&amp;quot;&amp;quot;&amp;gt;Song&amp;lt;/option&amp;gt;&amp;quot;&lt;br /&gt;
  html = html &amp;amp; &amp;quot;  &amp;lt;option value=&amp;quot;&amp;quot;55&amp;quot;&amp;quot;&amp;gt;Classical Work&amp;lt;/option&amp;gt;&amp;quot;&lt;br /&gt;
  html = html &amp;amp; &amp;quot;&amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  html = html &amp;amp; &amp;quot;&amp;lt;/form&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Set WB2Intf = WB2.Interf&lt;br /&gt;
  WB2Intf.Visible = false&lt;br /&gt;
&lt;br /&gt;
  WB2.SetHTMLDocument html&lt;br /&gt;
&lt;br /&gt;
  Set Doc2 = WB2Intf.Document&lt;br /&gt;
  Set SrchTxt = Doc2.getElementById(&amp;quot;search_txt&amp;quot;)&lt;br /&gt;
  If SearchAlbum &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;br /&gt;
    SrchTxt.Value = SearchAlbum&lt;br /&gt;
  Else&lt;br /&gt;
    SrchTxt.Value = SearchTerm&lt;br /&gt;
  End If&lt;br /&gt;
&lt;br /&gt;
  Set SrchType = Doc2.getElementById(&amp;quot;search_opt&amp;quot;)&lt;br /&gt;
  SrchType.selectedIndex = 1  &#039; Search for an album&lt;br /&gt;
&lt;br /&gt;
  Set SrchButton = Doc2.getElementById(&amp;quot;search_button&amp;quot;)&lt;br /&gt;
  SrchButton.Click&lt;br /&gt;
&lt;br /&gt;
  Set Tmr = SDB.CreateTimer(40)&lt;br /&gt;
  Script.RegisterEvent Tmr, &amp;quot;OnTimer&amp;quot;, &amp;quot;ContinueSearch&amp;quot;&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
&#039; We use this procedure as a callback using Timer, so that we can present results as soon as they are downloaded&lt;br /&gt;
Sub ContinueSearch(Timer)&lt;br /&gt;
  Script.UnregisterEvents Tmr&lt;br /&gt;
  Set Tmr = Nothing&lt;br /&gt;
&lt;br /&gt;
  Set WB2Intf = WB2.Interf&lt;br /&gt;
&lt;br /&gt;
  If Len(WB2Intf.LocationURL) &amp;lt; 10 Then        &#039; A trick - wait until navigation to the search results page starts&lt;br /&gt;
    Set Tmr = SDB.CreateTimer(40)&lt;br /&gt;
    Script.RegisterEvent Tmr, &amp;quot;OnTimer&amp;quot;, &amp;quot;ContinueSearch&amp;quot;&lt;br /&gt;
    Exit Sub&lt;br /&gt;
  End If&lt;br /&gt;
&lt;br /&gt;
  If WB2Intf.ReadyState = 1 Or WB2Intf.Busy Then&lt;br /&gt;
    Set Tmr = SDB.CreateTimer(40)&lt;br /&gt;
    Script.RegisterEvent Tmr, &amp;quot;OnTimer&amp;quot;, &amp;quot;ContinueSearch&amp;quot;&lt;br /&gt;
    Exit Sub&lt;br /&gt;
  End If&lt;br /&gt;
&lt;br /&gt;
  Set Doc2 = WB2Intf.Document&lt;br /&gt;
&lt;br /&gt;
  Set DivResults = Doc2.body&lt;br /&gt;
&lt;br /&gt;
  Set Results = SDB.NewStringList&lt;br /&gt;
  Set FoundLinks = SDB.NewStringList&lt;br /&gt;
  If IsObject(DivResults) And Not IsNull(DivResults) Then&lt;br /&gt;
    Set AColl = DivResults.getElementsByTagName(&amp;quot;A&amp;quot;)&lt;br /&gt;
    For Each itm In AColl&lt;br /&gt;
      Set Imgs = itm.getElementsByTagName(&amp;quot;img&amp;quot;)&lt;br /&gt;
      pos = InStr(CStr(itm.href), &amp;quot;.com/&amp;quot;)&lt;br /&gt;
      If pos &amp;gt; 0 Then&lt;br /&gt;
        href = Mid(itm.href, pos)&lt;br /&gt;
        If Left(href,Len(&amp;quot;.com/cg/amg.dll?p=amg&amp;amp;sql=10:&amp;quot;)) = &amp;quot;.com/cg/amg.dll?p=amg&amp;amp;sql=10:&amp;quot; And Imgs.length = 0 Then&lt;br /&gt;
          Results.Add itm.innerText&lt;br /&gt;
          FoundLinks.Add itm.href&lt;br /&gt;
        End If&lt;br /&gt;
      End If&lt;br /&gt;
    Next&lt;br /&gt;
&lt;br /&gt;
    SDB.Tools.WebSearch.SetSearchResults Results&lt;br /&gt;
    If Results.Count &amp;gt; 0 Then&lt;br /&gt;
      SDB.Tools.WebSearch.ResultIndex = 0&lt;br /&gt;
    End If&lt;br /&gt;
  Else&lt;br /&gt;
    WB.SetHTMLDocument = Doc2.documentElement.innerHTML&lt;br /&gt;
  End If&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
&#039; This procedure is called by MediaMonkey when user selects some of search results&lt;br /&gt;
Sub ShowResult(ResultID)&lt;br /&gt;
  If ResultID &amp;gt;= 0 And ResultID &amp;lt; FoundLinks.Count Then&lt;br /&gt;
    SDB.Tools.WebSearch.ClearTracksData   &#039; Tell MM to disregard any previously set tracks&#039; data&lt;br /&gt;
    WB.SetHTMLDocument &amp;quot;&amp;quot;                 &#039; To prevent usage of this data&lt;br /&gt;
    WB.Interf.Navigate FoundLinks.Item(ResultID)&lt;br /&gt;
&lt;br /&gt;
    Set Tmr = SDB.CreateTimer(500)&lt;br /&gt;
    Script.RegisterEvent Tmr, &amp;quot;OnTimer&amp;quot;, &amp;quot;ResultFullyLoaded&amp;quot;&lt;br /&gt;
  End If&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
&#039; This is a callback handled by a timer, so that we can respond as soon as album results are loaded&lt;br /&gt;
Sub ResultFullyLoaded(Timer)&lt;br /&gt;
  Script.UnregisterEvents Tmr&lt;br /&gt;
  Set Tmr = Nothing&lt;br /&gt;
&lt;br /&gt;
  Set Tracks = SDB.NewStringList&lt;br /&gt;
&lt;br /&gt;
  Set Doc = WB.Interf.Document&lt;br /&gt;
&lt;br /&gt;
  If IsObject(Doc) Then&lt;br /&gt;
    &#039; Get track titles&lt;br /&gt;
    Set AColl = Doc.getElementsByTagName(&amp;quot;A&amp;quot;)&lt;br /&gt;
    For Each itm In AColl&lt;br /&gt;
      Set Imgs = itm.getElementsByTagName(&amp;quot;img&amp;quot;)&lt;br /&gt;
      pos = InStr(CStr(itm.href), &amp;quot;.com/&amp;quot;)&lt;br /&gt;
      If pos &amp;gt; 0 Then&lt;br /&gt;
        href = Mid(itm.href, pos)&lt;br /&gt;
        If Left(href,Len(&amp;quot;.com/cg/amg.dll?p=amg&amp;amp;sql=33:&amp;quot;)) = &amp;quot;.com/cg/amg.dll?p=amg&amp;amp;sql=33:&amp;quot; And Imgs.length = 0 Then&lt;br /&gt;
          Tracks.Add itm.innerText&lt;br /&gt;
        End If&lt;br /&gt;
      End If&lt;br /&gt;
      If itm.className = &amp;quot;subtitle&amp;quot; Then&lt;br /&gt;
        ArtistTitle = itm.innerText&lt;br /&gt;
      End If&lt;br /&gt;
    Next&lt;br /&gt;
&lt;br /&gt;
    &#039; Get album title&lt;br /&gt;
    Set SpanColl = Doc.getElementsByTagName(&amp;quot;Span&amp;quot;)&lt;br /&gt;
    For Each itm in SpanColl&lt;br /&gt;
      If itm.className = &amp;quot;title&amp;quot; Then&lt;br /&gt;
        AlbumTitle = itm.innerText&lt;br /&gt;
      End If&lt;br /&gt;
    Next&lt;br /&gt;
&lt;br /&gt;
    &#039; Get Album art URL&lt;br /&gt;
    Set ImgColl = Doc.getElementsByTagName(&amp;quot;Img&amp;quot;)&lt;br /&gt;
    For Each itm in ImgColl&lt;br /&gt;
      If Left(itm.src,Len(&amp;quot;http://image.allmusic.com/&amp;quot;)) = &amp;quot;http://image.allmusic.com/&amp;quot; Then&lt;br /&gt;
        SDB.Tools.WebSearch.AlbumArtURL = itm.src&lt;br /&gt;
      End If&lt;br /&gt;
    Next&lt;br /&gt;
&lt;br /&gt;
    &#039; Get release year&lt;br /&gt;
    Set SpanColl = Doc.getElementsByTagName(&amp;quot;span&amp;quot;)&lt;br /&gt;
    For Each itm In SpanColl&lt;br /&gt;
      pos = InStr(itm.innerText, &amp;quot;Release Date&amp;quot;)&lt;br /&gt;
      If pos &amp;gt; 0 Then&lt;br /&gt;
        Set Parnt = itm.parentNode.parentNode.parentNode.parentNode&lt;br /&gt;
        Set TDColl = Parnt.getElementsByTagName(&amp;quot;td&amp;quot;)&lt;br /&gt;
        For Each itm2 In TDColl&lt;br /&gt;
          If itm2.className = &amp;quot;sub-text&amp;quot; Then&lt;br /&gt;
            ReleaseYear = Right(itm2.innerText, 4)&lt;br /&gt;
            Exit For&lt;br /&gt;
          End If&lt;br /&gt;
        Next&lt;br /&gt;
        Exit For&lt;br /&gt;
      End If&lt;br /&gt;
    Next&lt;br /&gt;
    &lt;br /&gt;
    &#039; Get genres/styles/moods/themes&lt;br /&gt;
    ListCnt = 0&lt;br /&gt;
    Set DivColl = Doc.getElementsByTagName(&amp;quot;div&amp;quot;)&lt;br /&gt;
    For Each itm In DivColl&lt;br /&gt;
      pos = InStr(itm.id, &amp;quot;left-sidebar-list&amp;quot;)&lt;br /&gt;
      If pos &amp;gt; 0 Then&lt;br /&gt;
        Set AColl = itm.getElementsByTagName(&amp;quot;a&amp;quot;)&lt;br /&gt;
        MyList = &amp;quot;&amp;quot;&lt;br /&gt;
        For Each itm2 In AColl&lt;br /&gt;
          If MyList &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then MyList = MyList &amp;amp; &amp;quot;;&amp;quot;&lt;br /&gt;
          MyList = MyList &amp;amp; itm2.innerText&lt;br /&gt;
        Next&lt;br /&gt;
        ListCnt = ListCnt + 1&lt;br /&gt;
        Select Case ListCnt&lt;br /&gt;
          Case 1&lt;br /&gt;
            Genres = MyList&lt;br /&gt;
          Case 2&lt;br /&gt;
            Styles = MyList&lt;br /&gt;
          Case 3&lt;br /&gt;
            Moods = MyList&lt;br /&gt;
          Case 4&lt;br /&gt;
            Themes = MyList&lt;br /&gt;
        End Select&lt;br /&gt;
      End If&lt;br /&gt;
    Next&lt;br /&gt;
  End If&lt;br /&gt;
&lt;br /&gt;
  If Tracks.Count = 0 Then&lt;br /&gt;
    &#039; Nothing found yet, wait some more time&lt;br /&gt;
    Set Tmr = SDB.CreateTimer(500)&lt;br /&gt;
    Script.RegisterEvent Tmr, &amp;quot;OnTimer&amp;quot;, &amp;quot;ResultFullyLoaded&amp;quot;&lt;br /&gt;
  Else&lt;br /&gt;
    &#039; Some results were found, notify MediaMonkey&lt;br /&gt;
    SDB.Tools.WebSearch.SmartUpdateTracks Tracks&lt;br /&gt;
    For i = 0 To SDB.Tools.WebSearch.NewTracks.Count - 1&lt;br /&gt;
      SDB.Tools.WebSearch.NewTracks.Item(i).ArtistName = ArtistTitle&lt;br /&gt;
      SDB.Tools.WebSearch.NewTracks.Item(i).AlbumName = AlbumTitle&lt;br /&gt;
      SDB.Tools.WebSearch.NewTracks.Item(i).Year = ReleaseYear&lt;br /&gt;
      SDB.Tools.WebSearch.NewTracks.Item(i).Genre = Genres&lt;br /&gt;
      SDB.Tools.WebSearch.NewTracks.Item(i).Custom1 = Styles&lt;br /&gt;
      SDB.Tools.WebSearch.NewTracks.Item(i).Custom2 = Moods&lt;br /&gt;
      SDB.Tools.WebSearch.NewTracks.Item(i).Custom3 = Themes&lt;br /&gt;
    Next&lt;br /&gt;
    SDB.Tools.WebSearch.RefreshViews   &#039; Tell MM that we have made some changes&lt;br /&gt;
  End If&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
&#039; This does the final clean up, so that our script doesn&#039;t leave any unwanted traces&lt;br /&gt;
Sub FinishSearch(Panel)&lt;br /&gt;
  &#039; Correctly terminate all the actions we have started&lt;br /&gt;
  WB.Common.DestroyControl      &#039; Destroy the external control&lt;br /&gt;
  WB2.Common.DestroyControl     &#039;    &amp;quot;     &amp;quot;     &amp;quot;        &amp;quot;&lt;br /&gt;
  Set WB = Nothing              &#039; Release global variable&lt;br /&gt;
  Set WB2 = Nothing             &#039;    &amp;quot;      &amp;quot;        &amp;quot;&lt;br /&gt;
  Set FoundLinks = Nothing      &#039;    &amp;quot;      &amp;quot;        &amp;quot;&lt;br /&gt;
  If IsObject(Tmr) Then&lt;br /&gt;
    Script.UnregisterEvents Tmr &#039; Unregister timer events&lt;br /&gt;
    Set Tmr = Nothing           &#039; Release global variable&lt;br /&gt;
  End If&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=Compatible_Devices&amp;diff=8800</id>
		<title>Compatible Devices</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=Compatible_Devices&amp;diff=8800"/>
		<updated>2016-01-06T23:30:48Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of devices with known compatibility (i.e. these devices have been tested by users) with the current version of MediaMonkey.  If you know of additional devices with MediaMonkey compatibility, please add them to this list.  Devices are listed by their manufacturer.  Click on any device to find any specific settings that are necessary to sync with the device.&lt;br /&gt;
&lt;br /&gt;
==Android devices==&lt;br /&gt;
:[[GenericMTP|Any Android device]] over USB/MTP with MediaMonkey 4.0.7&lt;br /&gt;
:[[Android device running Android 2.3+]] via [[Sync MediaMonkey with an Android device|Wi-Fi sync]] between MediaMonkey for Android and MediaMonkey for Windows 4.1&lt;br /&gt;
&lt;br /&gt;
==Apple==&lt;br /&gt;
:[[iPhone|iOS 4.0 - 6]] as of MediaMonkey 4.0.7&lt;br /&gt;
:[[iPhone|iOS 7]] as of MediaMonkey 4.1&lt;br /&gt;
:[[iPhone|iOS 8]] as of MediaMonkey 4.1.5&lt;br /&gt;
:[[iPhone|iOS 9]] as of MediaMonkey 4.1.10&lt;br /&gt;
:[[iPod]] (including 5th Gen)&lt;br /&gt;
:[[iPod Classic]]&lt;br /&gt;
:[[iPod Video]]&lt;br /&gt;
:[[iPod Mini|iPod Mini]] (1st and 2nd Gen)&lt;br /&gt;
:[[iPod Nano]] (1st, 2nd, 3rd, 4th, 5th, 6th, and 7th Gen)*&lt;br /&gt;
:[[iPod Photo]]&lt;br /&gt;
:[[iPod Shuffle]] (1st, 2nd, 3rd and 4th Gen)&lt;br /&gt;
:[[iPod Touch]] (1st, 2nd, 3rd, 4th and 5th Gen)&lt;br /&gt;
:[[iPhone|iPhone]] (iPhone 2G, iPhone 3G, iPhone 3GS, iPhone 4, iPhone 4s, iPhone 5, iPhone 5c, iPhone 6)&lt;br /&gt;
:[[iPhone|iPad]] (1st, 2nd, 3rd Gen)&lt;br /&gt;
:[[iTunes|iTunes]] (iTunes 6 to 11.1)&lt;br /&gt;
&lt;br /&gt;
Apple Device Sync Help: http://www.mediamonkey.com/wiki/index.php/WebHelp:iPod_Synchronization/4.0&lt;br /&gt;
&lt;br /&gt;
Note: iPad 4th gen, iPad mini don&#039;t have confirmed support yet.&lt;br /&gt;
&lt;br /&gt;
==Archos==&lt;br /&gt;
:[[GenericMTP|Archos 5]]&lt;br /&gt;
:[[GenericMTP|Archos 605 Wifi]]&lt;br /&gt;
:[[USBmass|Archos 604/504]]&lt;br /&gt;
:[[GenericMTP|Archos 7]]&lt;br /&gt;
:[[GenericMTP|Archos Gemini 200]]&lt;br /&gt;
:[[GenericMTP|Archos Gmini (all versions)]]&lt;br /&gt;
&lt;br /&gt;
==Audiovox==&lt;br /&gt;
:[[GenericMTP|Audiovox SMP3-xxx]]&lt;br /&gt;
&lt;br /&gt;
==Cowon==&lt;br /&gt;
:[[USBmass|iAudio X5]]&lt;br /&gt;
:[[USBmass|Cowon Q5W]]&lt;br /&gt;
:[[USBmass|Cowon iAudio 7]]&lt;br /&gt;
:[[USBmass|Cowon iAudio D2]]&lt;br /&gt;
:[[USBmass|Cowon S9]] Both MSC and MTP.&lt;br /&gt;
&lt;br /&gt;
==Creative==&lt;br /&gt;
:[[MTPZen|Zen Micro (2.20.05 firmware)]]&lt;br /&gt;
:[[MTPZen|Zen Nano]]&lt;br /&gt;
:[[MTPZen|Zen Neeon]]&lt;br /&gt;
:[[MTPZen|Zen Sleek]]&lt;br /&gt;
:[[MTPZen|Zen Stone]]&lt;br /&gt;
:[[MTPZen|Zen Touch (with &#039;Plays for Sure&#039; MTP firmware update)]]&lt;br /&gt;
:[[MTPZen|Zen Vision]]&lt;br /&gt;
:[[MTPZen|Zen Vision:M]]&lt;br /&gt;
:[[MTPZen|Zen xtra (&#039;Plays for Sure&#039; firmware update)]]&lt;br /&gt;
&lt;br /&gt;
Compatible, with workaround:&lt;br /&gt;
:[[MTPZen|ZEN MX]] - see http://www.mediamonkey.com/forum/viewtopic.php?f=12&amp;amp;t=44192 http://www.mediamonkey.com/forum/viewtopic.php?f=12&amp;amp;t=44192&lt;br /&gt;
&lt;br /&gt;
Compatible, with restriction:&lt;br /&gt;
:[[MTPZen|ZEN]] - see [http://www.mediamonkey.com/forum/viewtopic.php?f=6&amp;amp;t=39965 here]&lt;br /&gt;
&lt;br /&gt;
==Dell==&lt;br /&gt;
:[[USBmass|Dell DJ (mostly works--need logs to debug playlist problem)]]&lt;br /&gt;
&lt;br /&gt;
==Eiger labs==&lt;br /&gt;
:[[USBmass|MPMan MP-F57]]&lt;br /&gt;
&lt;br /&gt;
==Finis==&lt;br /&gt;
:[[USBmass|Finis SwiMP3]]&lt;br /&gt;
&lt;br /&gt;
==HTC==&lt;br /&gt;
:HTC Touch Diamond 2&lt;br /&gt;
&lt;br /&gt;
==iRiver==&lt;br /&gt;
:[[GenericMTP|iRiver Clix 2nd Gen (MTP mode)]]&lt;br /&gt;
:iRiver H10&lt;br /&gt;
:iRiver H120/H320/H340&lt;br /&gt;
:iRiver ifp-8xx&lt;br /&gt;
:[[USBmass|iRiver iFP-9xx]]&lt;br /&gt;
:iRiver N-xx&lt;br /&gt;
:iRiver PMP-1xx&lt;br /&gt;
:iRiver PMC-120&lt;br /&gt;
&lt;br /&gt;
==Motorola==&lt;br /&gt;
:[[Motorola RIZR Z3]]&lt;br /&gt;
:[[Motorola Q 9 Global]]&lt;br /&gt;
&lt;br /&gt;
==Nokia==&lt;br /&gt;
:[[GenericMTP|Nokia 5310]]&lt;br /&gt;
:[[GenericMTP|Nokia N8]]&lt;br /&gt;
&lt;br /&gt;
==Palm==&lt;br /&gt;
:[[Palm Pre]]&lt;br /&gt;
&lt;br /&gt;
==Phillips==&lt;br /&gt;
:[[GenericMTP|Philips HDD6320]] (partial support--need logs to debug)&lt;br /&gt;
&lt;br /&gt;
==Pioneer==&lt;br /&gt;
:INNO  GEX-INNO2BK (same as Samsung Helix YX-M1Z)&lt;br /&gt;
&lt;br /&gt;
==RCA==&lt;br /&gt;
:[[USBmass|Lyra 2780]]&lt;br /&gt;
&lt;br /&gt;
==Samsung==&lt;br /&gt;
:[[GenericMTP|Samsung YP-XX]]&lt;br /&gt;
:[[GenericMTP|Samsung YP-XXX]]&lt;br /&gt;
:[[GenericMTP|Samsung Galaxy Nexus]]&lt;br /&gt;
:[[GenericMTP|Samsung Galaxy S2]]&lt;br /&gt;
:[[GenericMTP|Samsung Galaxy S3]]&lt;br /&gt;
:[[GenericMTP|Samsung Galaxy S4]]&lt;br /&gt;
:[[GenericMTP|Samsung Galaxy Note]]&lt;br /&gt;
:[[GenericMTP|Samsung Galaxy Note 3 (Android 5 lollipop)]]&lt;br /&gt;
&lt;br /&gt;
==SanDisk==&lt;br /&gt;
:[[MTPSansa|Sansa eXXX]]&lt;br /&gt;
:[[MTPSansa|Sansa Fuze]]&lt;br /&gt;
:[[MTPSansa|Sansa M250]]&lt;br /&gt;
:[[MTPSansa|Sandisk Sansa]]&lt;br /&gt;
:[[MTPSansa|Sandisk Connect 4Gb]]&lt;br /&gt;
:[[MTPSansa|Sandisk Sansa Clip]]&lt;br /&gt;
:[[MTPSansa|Sandisk Sansa Clip Zip]]&lt;br /&gt;
:[[MTPSansa|Sandisk Clip Sport]]&lt;br /&gt;
:[[MTPSansa|Sandisk E250]]&lt;br /&gt;
:[[MTPSansa|Sandisk Cruzer Edge]]&lt;br /&gt;
:[[MTPSansa#SanDisk_64GB_Mobile_Ultra_MicroSDXC|SanDisk 64GB Mobile Ultra MicroSDXC]]&lt;br /&gt;
&lt;br /&gt;
==Toshiba==&lt;br /&gt;
:[[GenericMTP|Toshiba Gigabeat (works but firmware bug limits synch speed)]]&lt;br /&gt;
&lt;br /&gt;
==Trekstor==&lt;br /&gt;
:[[TrekstorVibez|Vibez]] (Set as either [[GenericMTP|MTP Device]] or as [[USBmass|MSC Device]])&lt;br /&gt;
&lt;br /&gt;
==Sony==&lt;br /&gt;
:[[USBmass|Sony Ericsson W302]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W600]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W800i]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W880i]]&lt;br /&gt;
:[[GenericMTP|Sony Walkman NWZ-A829]]&lt;br /&gt;
:[[GenericMTP|Sony Walkman NWZ-S638]]&lt;br /&gt;
:[[GenericMTP|Sony Walkman NWZ-E385]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::GetSyncProgress&amp;diff=8787</id>
		<title>ISDBDevice::GetSyncProgress</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::GetSyncProgress&amp;diff=8787"/>
		<updated>2015-10-25T15:34:23Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Method description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Property Get GetSyncProgress(DeviceHandle As Long)}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |DeviceHandle |Long |Handle of the device}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Gets progress of sync/copy task (value between 0 and 1).&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1.10}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;       &lt;br /&gt;
Option Explicit&lt;br /&gt;
 &lt;br /&gt;
Dim UI  : Set UI = SDB.UI&lt;br /&gt;
 &lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim mnuTest&lt;br /&gt;
    Set mnuTest = SDB.UI.AddMenuItem(SDB.UI.Menu_Edit, 0, 0)&lt;br /&gt;
    mnuTest.Caption = SDB.Localize(&amp;quot;Get sync progress&amp;quot;)&lt;br /&gt;
    mnuTest.OnClickFunc = &amp;quot;SDBOnClick&amp;quot;&lt;br /&gt;
    mnuTest.UseScript = Script.ScriptPath    &lt;br /&gt;
End Sub&lt;br /&gt;
   &lt;br /&gt;
Sub SDBOnClick(Item)   &lt;br /&gt;
  Dim DeviceHandle : DeviceHandle = -1&lt;br /&gt;
  Dim Devices : Set Devices = SDB.Device.ActiveDeviceList(&amp;quot;VID_05AC&amp;amp;PID_129E&amp;quot;)&lt;br /&gt;
  Dim i : i = 0 &lt;br /&gt;
  For i = 0 To Devices.Count-1&lt;br /&gt;
	   If Devices.DeviceHandle(i) &amp;lt;&amp;gt; -1 Then&lt;br /&gt;
		   DeviceHandle = Devices.DeviceHandle(i)&lt;br /&gt;
	   End If&lt;br /&gt;
  Next&lt;br /&gt;
    &lt;br /&gt;
  MsgBox( SDB.Device.GetSyncProgress( DeviceHandle))&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see how to handle copy result see example in CopyFile() method&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::GetSyncProgress&amp;diff=8786</id>
		<title>ISDBDevice::GetSyncProgress</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::GetSyncProgress&amp;diff=8786"/>
		<updated>2015-10-25T15:33:54Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Method description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Property Get GetSyncProgress(DeviceHandle As Long)}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |DeviceHandle |Long |Handle of the device}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Gets progress of sync/copy task (value between 0 and 1).&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1.1}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;       &lt;br /&gt;
Option Explicit&lt;br /&gt;
 &lt;br /&gt;
Dim UI  : Set UI = SDB.UI&lt;br /&gt;
 &lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim mnuTest&lt;br /&gt;
    Set mnuTest = SDB.UI.AddMenuItem(SDB.UI.Menu_Edit, 0, 0)&lt;br /&gt;
    mnuTest.Caption = SDB.Localize(&amp;quot;Get sync progress&amp;quot;)&lt;br /&gt;
    mnuTest.OnClickFunc = &amp;quot;SDBOnClick&amp;quot;&lt;br /&gt;
    mnuTest.UseScript = Script.ScriptPath    &lt;br /&gt;
End Sub&lt;br /&gt;
   &lt;br /&gt;
Sub SDBOnClick(Item)   &lt;br /&gt;
  Dim DeviceHandle : DeviceHandle = -1&lt;br /&gt;
  Dim Devices : Set Devices = SDB.Device.ActiveDeviceList(&amp;quot;VID_05AC&amp;amp;PID_129E&amp;quot;)&lt;br /&gt;
  Dim i : i = 0 &lt;br /&gt;
  For i = 0 To Devices.Count-1&lt;br /&gt;
	   If Devices.DeviceHandle(i) &amp;lt;&amp;gt; -1 Then&lt;br /&gt;
		   DeviceHandle = Devices.DeviceHandle(i)&lt;br /&gt;
	   End If&lt;br /&gt;
  Next&lt;br /&gt;
    &lt;br /&gt;
  MsgBox( SDB.Device.GetSyncProgress( DeviceHandle))&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see how to handle copy result see example in CopyFile() method&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBIniFile::Path&amp;diff=8665</id>
		<title>ISDBIniFile::Path</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBIniFile::Path&amp;diff=8665"/>
		<updated>2014-06-30T16:35:24Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;{{MethodDeclaration|SDBIniFile|ISDBIniFile|Property Get Path As String}}  ===Property description===  Gets full filename path of the MediaMonkey.ini conf. file  [[Category:Script...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBIniFile|ISDBIniFile|Property Get Path As String}}&lt;br /&gt;
&lt;br /&gt;
===Property description===&lt;br /&gt;
&lt;br /&gt;
Gets full filename path of the MediaMonkey.ini conf. file&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBIniFile|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBIniFile|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBIniFile&amp;diff=8664</id>
		<title>SDBIniFile</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBIniFile&amp;diff=8664"/>
		<updated>2014-06-30T16:33:21Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* ISDBIniFile members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBIniFile ==&lt;br /&gt;
&lt;br /&gt;
Object for working with inifiles.&lt;br /&gt;
&lt;br /&gt;
=== ISDBIniFile members ===&lt;br /&gt;
   &lt;br /&gt;
{{MethodsList &lt;br /&gt;
|[[ISDBIniFile::BoolValue|BoolValue]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBIniFile::DeleteKey|DeleteKey]] |Method |  &lt;br /&gt;
|[[ISDBIniFile::DeleteSection|DeleteSection]] |Method |  &lt;br /&gt;
|[[ISDBIniFile::Flush|Flush]] |Method |  &lt;br /&gt;
|[[ISDBIniFile::Apply|Apply]] |Method | From v4.0&lt;br /&gt;
|[[ISDBIniFile::IntValue|IntValue]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBIniFile::Keys|Keys]] |Property Get |  &lt;br /&gt;
|[[ISDBIniFile::Sections|Sections]] |Property Get |  &lt;br /&gt;
|[[ISDBIniFile::StringValue|StringValue]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBIniFile::ValueExists|ValueExists]] |Property Get |  &lt;br /&gt;
|[[ISDBIniFile::Path|Path]] |Property Get | From v4.1.4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBIniFile|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::HandledDeviceList&amp;diff=8630</id>
		<title>ISDBDevice::HandledDeviceList</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::HandledDeviceList&amp;diff=8630"/>
		<updated>2014-03-31T17:54:34Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Property Get HandledDeviceList As ISDBDeviceList}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Property description===&lt;br /&gt;
&lt;br /&gt;
Returns list of devices connected to the computer as [[SDBDeviceList]]&lt;br /&gt;
&lt;br /&gt;
But inlike ActiveDeviceList it returns only devices that are already handled by a device plugin and thus their DeviceHandle is always valid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1.1}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
Option Explicit&lt;br /&gt;
 &lt;br /&gt;
Dim UI  : Set UI = SDB.UI&lt;br /&gt;
 &lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim mnuTest&lt;br /&gt;
    Set mnuTest = SDB.UI.AddMenuItem(SDB.UI.Menu_Edit, 0, 0)&lt;br /&gt;
    mnuTest.Caption = SDB.Localize(&amp;quot;Get devices&amp;quot;)&lt;br /&gt;
    mnuTest.OnClickFunc = &amp;quot;SDBOnClick&amp;quot;&lt;br /&gt;
    mnuTest.UseScript = Script.ScriptPath    &lt;br /&gt;
End Sub&lt;br /&gt;
   &lt;br /&gt;
Sub SDBOnClick(Item)   &lt;br /&gt;
   &lt;br /&gt;
  Dim list : Set list = SDB.Device.HandledDeviceList&lt;br /&gt;
  If list.Count = 0 Then&lt;br /&gt;
    Call SDB.MessageBox( &amp;quot;No connected device&amp;quot;, mtError, Array(mbOk))&lt;br /&gt;
    Exit Sub&lt;br /&gt;
  End If&lt;br /&gt;
    &lt;br /&gt;
  Dim txt&lt;br /&gt;
  Dim i : i = 0&lt;br /&gt;
  For i = 0 To list.Count-1    &lt;br /&gt;
    txt = SDB.Device.Caption( list.DeviceHandle(i))&lt;br /&gt;
    Call SDB.MessageBox( txt, mtInformation, Array(mbOk))&lt;br /&gt;
  Next &lt;br /&gt;
      &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::Caption&amp;diff=8629</id>
		<title>ISDBDevice::Caption</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::Caption&amp;diff=8629"/>
		<updated>2014-03-31T17:49:31Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;{{MethodDeclaration|SDBDevice|ISDBDevice|Property Get Caption(DeviceHandle As Long)}}  ===Parameters===  {{MethodParameters   |DeviceHandle |Long |Handle of the device}}  ===Meth...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Property Get Caption(DeviceHandle As Long)}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |DeviceHandle |Long |Handle of the device}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Gets caption of the device as seen in the MediaMonkey interface&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1.1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBDevice&amp;diff=8628</id>
		<title>SDBDevice</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBDevice&amp;diff=8628"/>
		<updated>2014-03-31T17:48:17Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBDevice ==&lt;br /&gt;
&lt;br /&gt;
Mainly for usage in device plug-ins for controling several aspects of portable device functionality.&lt;br /&gt;
&lt;br /&gt;
=== ISDBDevice members ===&lt;br /&gt;
   &lt;br /&gt;
{{MethodsList &lt;br /&gt;
|[[ISDBDevice::ActiveDeviceList|ActiveDeviceList]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::HandledDeviceList|HandledDeviceList]] |Property Get |  From 4.1.1&lt;br /&gt;
|[[ISDBDevice::AddDeviceNode|AddDeviceNode]] |Method |  &lt;br /&gt;
|[[ISDBDevice::canEjectDevice|canEjectDevice]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::CreateDeviceNode|CreateDeviceNode]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceEject|DeviceEject]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceIcon|DeviceIcon]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBDevice::DeviceMenuIcon|DeviceMenuIcon]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBDevice::DeviceStart|DeviceStart]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceStartEx|DeviceStartEx]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceStop|DeviceStop]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceThreadedEject|DeviceThreadedEject]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DriveLetterFree|DriveLetterFree]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::FreeSpace|FreeSpace]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::GetTrackIDSynchStatus|GetTrackIDSynchStatus]] |Method |  &lt;br /&gt;
|[[ISDBDevice::GetTrackSynchStatus|GetTrackSynchStatus]] |Method |  &lt;br /&gt;
|[[ISDBDevice::GetDeviceContent|GetDeviceContent]] |Method |  From 4.1&lt;br /&gt;
|[[ISDBDevice::ChangeDeviceCaption|ChangeDeviceCaption]] |Method |  &lt;br /&gt;
|[[ISDBDevice::ChangeDeviceID|ChangeDeviceID]] |Method |  &lt;br /&gt;
|[[ISDBDevice::isPlaylistForSynch|isPlaylistForSynch]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBDevice::IsVisible|IsVisible]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::LockPlugin|LockPlugin]] |Method |  &lt;br /&gt;
|[[ISDBDevice::RegisterTreeNode|RegisterTreeNode]] |Method |  &lt;br /&gt;
|[[ISDBDevice::ShowDeviceConfig|ShowDeviceConfig]] |Method |  &lt;br /&gt;
|[[ISDBDevice::StartSynch|StartSynch]] |Method |  &lt;br /&gt;
|[[ISDBDevice::StartAutoSynch|StartAutoSynch]] |Method |  From 4.1&lt;br /&gt;
|[[ISDBDevice::SynchTerminating|SynchTerminating]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::TotalSpace|TotalSpace]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::UnlockPlugin|UnlockPlugin]] |Method |  &lt;br /&gt;
|[[ISDBDevice::TerminateThreads|TerminateThreads]] |Method | From 4.0 &lt;br /&gt;
|[[ISDBDevice::GetDeviceProfileXML|GetDeviceProfileXML]] |Property Get| From 4.0.3&lt;br /&gt;
|[[ISDBDevice::CopyFile|CopyFile]] |Property Get| From 4.1.1&lt;br /&gt;
|[[ISDBDevice::CopyFiles|CopyFiles]] |Property Get| From 4.1.1&lt;br /&gt;
|[[ISDBDevice::DeleteFiles|DeleteFiles]] |Property Get| From 4.1.1&lt;br /&gt;
|[[ISDBDevice::GetSyncProgress|GetSyncProgress]] |Property Get| From 4.1.1&lt;br /&gt;
|[[ISDBDevice::Caption|Caption]] |Property Get| From 4.1.1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::HandledDeviceList&amp;diff=8627</id>
		<title>ISDBDevice::HandledDeviceList</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::HandledDeviceList&amp;diff=8627"/>
		<updated>2014-03-31T17:46:32Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Property Get HandledDeviceList As ISDBDeviceList}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Property description===&lt;br /&gt;
&lt;br /&gt;
Returns list of devices connected to the computer as [[SDBDeviceList]]&lt;br /&gt;
&lt;br /&gt;
But inlike ActiveDeviceList it returns only devices that are already handled by a device plugin and thus their DeviceHandle is always valid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1.1}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
Option Explicit&lt;br /&gt;
 &lt;br /&gt;
Dim UI  : Set UI = SDB.UI&lt;br /&gt;
 &lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim mnuTest&lt;br /&gt;
    Set mnuTest = SDB.UI.AddMenuItem(SDB.UI.Menu_Edit, 0, 0)&lt;br /&gt;
    mnuTest.Caption = SDB.Localize(&amp;quot;Get devices&amp;quot;)&lt;br /&gt;
    mnuTest.OnClickFunc = &amp;quot;SDBOnClick&amp;quot;&lt;br /&gt;
    mnuTest.UseScript = Script.ScriptPath    &lt;br /&gt;
End Sub&lt;br /&gt;
   &lt;br /&gt;
Sub SDBOnClick(Item)   &lt;br /&gt;
   &lt;br /&gt;
  Dim list : Set list = SDB.Device.HandledDeviceList&lt;br /&gt;
  If list.Count = 0 Then&lt;br /&gt;
    Call SDB.MessageBox( &amp;quot;No connected device&amp;quot;, mtError, Array(mbOk))&lt;br /&gt;
    Exit Sub&lt;br /&gt;
  End If&lt;br /&gt;
    &lt;br /&gt;
  Dim txt&lt;br /&gt;
  Dim i : i = 0&lt;br /&gt;
  For i = 0 To list.Count-1    &lt;br /&gt;
    txt = SDB.Device.Caption( list.DeviceHandle(i))&lt;br /&gt;
    Call SDB.MessageBox( txt, mtInformation, Array(mbOk))&lt;br /&gt;
    Exit Sub       &lt;br /&gt;
  Next &lt;br /&gt;
      &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::HandledDeviceList&amp;diff=8626</id>
		<title>ISDBDevice::HandledDeviceList</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::HandledDeviceList&amp;diff=8626"/>
		<updated>2014-03-31T17:45:29Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;{{MethodDeclaration|SDBDevice|ISDBDevice|Property Get HandledDeviceList As ISDBDeviceList}}   ===Property description===  Returns list of devices connected to the computer as [[S...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Property Get HandledDeviceList As ISDBDeviceList}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Property description===&lt;br /&gt;
&lt;br /&gt;
Returns list of devices connected to the computer as [[SDBDeviceList]]&lt;br /&gt;
&lt;br /&gt;
But inlike ActiveDeviceList it returns only devices that are already handled by a device plugin and thus their DeviceHandle is always valid.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
Option Explicit&lt;br /&gt;
 &lt;br /&gt;
Dim UI  : Set UI = SDB.UI&lt;br /&gt;
 &lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim mnuTest&lt;br /&gt;
    Set mnuTest = SDB.UI.AddMenuItem(SDB.UI.Menu_Edit, 0, 0)&lt;br /&gt;
    mnuTest.Caption = SDB.Localize(&amp;quot;Get devices&amp;quot;)&lt;br /&gt;
    mnuTest.OnClickFunc = &amp;quot;SDBOnClick&amp;quot;&lt;br /&gt;
    mnuTest.UseScript = Script.ScriptPath    &lt;br /&gt;
End Sub&lt;br /&gt;
   &lt;br /&gt;
Sub SDBOnClick(Item)   &lt;br /&gt;
   &lt;br /&gt;
  Dim list : Set list = SDB.Device.HandledDeviceList&lt;br /&gt;
  If list.Count = 0 Then&lt;br /&gt;
    Call SDB.MessageBox( &amp;quot;No connected device&amp;quot;, mtError, Array(mbOk))&lt;br /&gt;
    Exit Sub&lt;br /&gt;
  End If&lt;br /&gt;
    &lt;br /&gt;
  Dim txt&lt;br /&gt;
  Dim i : i = 0&lt;br /&gt;
  For i = 0 To list.Count-1    &lt;br /&gt;
    txt = SDB.Device.Caption( list.DeviceHandle(i))&lt;br /&gt;
    Call SDB.MessageBox( txt, mtInformation, Array(mbOk))&lt;br /&gt;
    Exit Sub       &lt;br /&gt;
  Next &lt;br /&gt;
      &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBDevice&amp;diff=8625</id>
		<title>SDBDevice</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBDevice&amp;diff=8625"/>
		<updated>2014-03-31T17:41:14Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBDevice ==&lt;br /&gt;
&lt;br /&gt;
Mainly for usage in device plug-ins for controling several aspects of portable device functionality.&lt;br /&gt;
&lt;br /&gt;
=== ISDBDevice members ===&lt;br /&gt;
   &lt;br /&gt;
{{MethodsList &lt;br /&gt;
|[[ISDBDevice::ActiveDeviceList|ActiveDeviceList]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::HandledDeviceList|HandledDeviceList]] |Property Get |  From 4.1.1&lt;br /&gt;
|[[ISDBDevice::AddDeviceNode|AddDeviceNode]] |Method |  &lt;br /&gt;
|[[ISDBDevice::canEjectDevice|canEjectDevice]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::CreateDeviceNode|CreateDeviceNode]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceEject|DeviceEject]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceIcon|DeviceIcon]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBDevice::DeviceMenuIcon|DeviceMenuIcon]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBDevice::DeviceStart|DeviceStart]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceStartEx|DeviceStartEx]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceStop|DeviceStop]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceThreadedEject|DeviceThreadedEject]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DriveLetterFree|DriveLetterFree]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::FreeSpace|FreeSpace]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::GetTrackIDSynchStatus|GetTrackIDSynchStatus]] |Method |  &lt;br /&gt;
|[[ISDBDevice::GetTrackSynchStatus|GetTrackSynchStatus]] |Method |  &lt;br /&gt;
|[[ISDBDevice::GetDeviceContent|GetDeviceContent]] |Method |  From 4.1&lt;br /&gt;
|[[ISDBDevice::ChangeDeviceCaption|ChangeDeviceCaption]] |Method |  &lt;br /&gt;
|[[ISDBDevice::ChangeDeviceID|ChangeDeviceID]] |Method |  &lt;br /&gt;
|[[ISDBDevice::isPlaylistForSynch|isPlaylistForSynch]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBDevice::IsVisible|IsVisible]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::LockPlugin|LockPlugin]] |Method |  &lt;br /&gt;
|[[ISDBDevice::RegisterTreeNode|RegisterTreeNode]] |Method |  &lt;br /&gt;
|[[ISDBDevice::ShowDeviceConfig|ShowDeviceConfig]] |Method |  &lt;br /&gt;
|[[ISDBDevice::StartSynch|StartSynch]] |Method |  &lt;br /&gt;
|[[ISDBDevice::StartAutoSynch|StartAutoSynch]] |Method |  From 4.1&lt;br /&gt;
|[[ISDBDevice::SynchTerminating|SynchTerminating]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::TotalSpace|TotalSpace]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::UnlockPlugin|UnlockPlugin]] |Method |  &lt;br /&gt;
|[[ISDBDevice::TerminateThreads|TerminateThreads]] |Method | From 4.0 &lt;br /&gt;
|[[ISDBDevice::GetDeviceProfileXML|GetDeviceProfileXML]] |Property Get| From 4.0.3&lt;br /&gt;
|[[ISDBDevice::CopyFile|CopyFile]] |Property Get| From 4.1.1&lt;br /&gt;
|[[ISDBDevice::CopyFiles|CopyFiles]] |Property Get| From 4.1.1&lt;br /&gt;
|[[ISDBDevice::DeleteFiles|DeleteFiles]] |Property Get| From 4.1.1&lt;br /&gt;
|[[ISDBDevice::GetSyncProgress|GetSyncProgress]] |Property Get| From 4.1.1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::CopyFile&amp;diff=8624</id>
		<title>ISDBDevice::CopyFile</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::CopyFile&amp;diff=8624"/>
		<updated>2014-03-31T12:56:37Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Sub CopyFile(DeviceHandle As Long, Source As String, Destination as String)}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |DeviceHandle |Long |Handle of the device&lt;br /&gt;
 |Source| String | Source file path on PC&lt;br /&gt;
 |Destination| String | Destination file path on the device}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Copies file to device.&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1.1}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
Option Explicit&lt;br /&gt;
 &lt;br /&gt;
Dim UI  : Set UI = SDB.UI&lt;br /&gt;
 &lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim mnuTest&lt;br /&gt;
    Set mnuTest = SDB.UI.AddMenuItem(SDB.UI.Menu_Edit, 0, 0)&lt;br /&gt;
    mnuTest.Caption = SDB.Localize(&amp;quot;Copy file to iPhone&amp;quot;)&lt;br /&gt;
    mnuTest.OnClickFunc = &amp;quot;SDBOnClick&amp;quot;&lt;br /&gt;
    mnuTest.UseScript = Script.ScriptPath&lt;br /&gt;
    Script.RegisterEvent SDB, &amp;quot;OnDeviceFileCopied&amp;quot;, &amp;quot;SDBDeviceFileCopied&amp;quot;    &lt;br /&gt;
End Sub&lt;br /&gt;
   &lt;br /&gt;
Dim DeviceHandle : DeviceHandle = -1   &lt;br /&gt;
   &lt;br /&gt;
Sub SDBOnClick(Item)     &lt;br /&gt;
  Dim Devices : Set Devices = SDB.Device.ActiveDeviceList(&amp;quot;VID_05AC&amp;amp;PID_129E&amp;quot;)&lt;br /&gt;
  Dim i : i = 0 &lt;br /&gt;
  For i = 0 To Devices.Count-1&lt;br /&gt;
	   If Devices.DeviceHandle(i) &amp;lt;&amp;gt; -1 Then&lt;br /&gt;
		   DeviceHandle = Devices.DeviceHandle(i)&lt;br /&gt;
	   End If&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  SDB.Device.CopyFile DeviceHandle, &amp;quot;C:\Temp\MyFile.wmv&amp;quot;, &amp;quot;/Temp/MyFile.wmv&amp;quot;&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub SDBDeviceFileCopied( DeviceHandle, Src, Dest, Success)&lt;br /&gt;
    if Success then&lt;br /&gt;
      MsgBox(&amp;quot;File copied successfuly from &amp;quot;&amp;amp;Src&amp;amp;&amp;quot; to &amp;quot;&amp;amp;Dest)&lt;br /&gt;
    else&lt;br /&gt;
      MsgBox(&amp;quot;File failed to copy from &amp;quot;&amp;amp;Src&amp;amp;&amp;quot; to &amp;quot;&amp;amp;Dest)&lt;br /&gt;
    end if    &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::CopyFiles&amp;diff=8623</id>
		<title>ISDBDevice::CopyFiles</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::CopyFiles&amp;diff=8623"/>
		<updated>2014-03-31T12:55:55Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Sub CopyFiles(DeviceHandle As Long, Sources As [[SDBStringList]], Destinations as [[SDBStringList]])}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |DeviceHandle |Long |Handle of the device&lt;br /&gt;
 |Sources| String | Source file paths on PC&lt;br /&gt;
 |Destinations| String | Destination file paths on the device}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Copies file to device.&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1.1}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
    Dim Sources&lt;br /&gt;
    Set Sources= SDB.NewStringList &lt;br /&gt;
    Sources.Add &amp;quot;C:\Temp\MyFile.wmv&amp;quot;&lt;br /&gt;
    Sources.Add &amp;quot;C:\Temp\MyFile2.wmv&amp;quot;&lt;br /&gt;
    Dim Destinations&lt;br /&gt;
    Set Destinations= SDB.NewStringList &lt;br /&gt;
    Destinations.Add &amp;quot;/Temp/MyFile.wmv&amp;quot;&lt;br /&gt;
    Destinations.Add &amp;quot;/Temp/MyFile2.wmv&amp;quot;&lt;br /&gt;
    SDB.Device.CopyFiles DeviceHandle, Sources, Destinations&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see how to handle copy result see example in CopyFile() method&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::GetSyncProgress&amp;diff=8622</id>
		<title>ISDBDevice::GetSyncProgress</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::GetSyncProgress&amp;diff=8622"/>
		<updated>2014-03-31T12:55:26Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Property Get GetSyncProgress(DeviceHandle As Long)}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |DeviceHandle |Long |Handle of the device}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Gets progress percentage of sync/copy task.&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1.1}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;       &lt;br /&gt;
Option Explicit&lt;br /&gt;
 &lt;br /&gt;
Dim UI  : Set UI = SDB.UI&lt;br /&gt;
 &lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim mnuTest&lt;br /&gt;
    Set mnuTest = SDB.UI.AddMenuItem(SDB.UI.Menu_Edit, 0, 0)&lt;br /&gt;
    mnuTest.Caption = SDB.Localize(&amp;quot;Get sync progress&amp;quot;)&lt;br /&gt;
    mnuTest.OnClickFunc = &amp;quot;SDBOnClick&amp;quot;&lt;br /&gt;
    mnuTest.UseScript = Script.ScriptPath    &lt;br /&gt;
End Sub&lt;br /&gt;
   &lt;br /&gt;
Sub SDBOnClick(Item)   &lt;br /&gt;
  Dim DeviceHandle : DeviceHandle = -1&lt;br /&gt;
  Dim Devices : Set Devices = SDB.Device.ActiveDeviceList(&amp;quot;VID_05AC&amp;amp;PID_129E&amp;quot;)&lt;br /&gt;
  Dim i : i = 0 &lt;br /&gt;
  For i = 0 To Devices.Count-1&lt;br /&gt;
	   If Devices.DeviceHandle(i) &amp;lt;&amp;gt; -1 Then&lt;br /&gt;
		   DeviceHandle = Devices.DeviceHandle(i)&lt;br /&gt;
	   End If&lt;br /&gt;
  Next&lt;br /&gt;
    &lt;br /&gt;
  MsgBox( SDB.Device.GetSyncProgress( DeviceHandle))&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see how to handle copy result see example in CopyFile() method&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::DeleteFiles&amp;diff=8621</id>
		<title>ISDBDevice::DeleteFiles</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::DeleteFiles&amp;diff=8621"/>
		<updated>2014-03-31T12:55:04Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Sub CopyFiles(DeviceHandle As Long, Files As [[SDBStringList]])}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |DeviceHandle |Long |Handle of the device&lt;br /&gt;
 |Files| String | Destination file paths on the device}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Deletes file(s) from device.&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1.1}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;       &lt;br /&gt;
    Dim Files&lt;br /&gt;
    Set Files = SDB.NewStringList &lt;br /&gt;
    Files.Add &amp;quot;/Temp/MyFile.wmv&amp;quot;&lt;br /&gt;
    SDB.Device.DeleteFiles DeviceHandle, Files&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see how to handle copy result see example in CopyFile() method&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBApplicationEvents::OnDeviceFileCopied&amp;diff=8620</id>
		<title>ISDBApplicationEvents::OnDeviceFileCopied</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBApplicationEvents::OnDeviceFileCopied&amp;diff=8620"/>
		<updated>2014-03-31T12:54:26Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Example code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBApplication|ISDBApplicationEvents|Sub OnDeviceFileCopied(Source as String, Destination as String, Success as Boolean)}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |Source |String | Source path on PC&lt;br /&gt;
 |Destination |String | Path on device&lt;br /&gt;
 |Success |Boolean | Copy was successful (true), failed (false)  }}&lt;br /&gt;
&lt;br /&gt;
===Event description===&lt;br /&gt;
&lt;br /&gt;
Is called whenever a file copy to device finishes.&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1.1}}&lt;br /&gt;
&lt;br /&gt;
===Example code===                    &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option Explicit&lt;br /&gt;
 &lt;br /&gt;
Dim UI  : Set UI = SDB.UI&lt;br /&gt;
 &lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim mnuTest&lt;br /&gt;
    Set mnuTest = SDB.UI.AddMenuItem(SDB.UI.Menu_Edit, 0, 0)&lt;br /&gt;
    mnuTest.Caption = SDB.Localize(&amp;quot;Copy file to iPhone&amp;quot;)&lt;br /&gt;
    mnuTest.OnClickFunc = &amp;quot;SDBOnClick&amp;quot;&lt;br /&gt;
    mnuTest.UseScript = Script.ScriptPath&lt;br /&gt;
    Script.RegisterEvent SDB, &amp;quot;OnDeviceFileCopied&amp;quot;, &amp;quot;SDBDeviceFileCopied&amp;quot;    &lt;br /&gt;
End Sub&lt;br /&gt;
   &lt;br /&gt;
Dim DeviceHandle : DeviceHandle = -1   &lt;br /&gt;
   &lt;br /&gt;
Sub SDBOnClick(Item)     &lt;br /&gt;
  Dim Devices : Set Devices = SDB.Device.ActiveDeviceList(&amp;quot;VID_05AC&amp;amp;PID_129E&amp;quot;)&lt;br /&gt;
  Dim i : i = 0 &lt;br /&gt;
  For i = 0 To Devices.Count-1&lt;br /&gt;
	   If Devices.DeviceHandle(i) &amp;lt;&amp;gt; -1 Then&lt;br /&gt;
		   DeviceHandle = Devices.DeviceHandle(i)&lt;br /&gt;
	   End If&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  SDB.Device.CopyFile DeviceHandle, &amp;quot;C:\Temp\MyFile.wmv&amp;quot;, &amp;quot;/Temp/MyFile.wmv&amp;quot;&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub SDBDeviceFileCopied( DeviceHandle, Src, Dest, Success)&lt;br /&gt;
    if Success then&lt;br /&gt;
      MsgBox(&amp;quot;File copied successfuly from &amp;quot;&amp;amp;Src&amp;amp;&amp;quot; to &amp;quot;&amp;amp;Dest)&lt;br /&gt;
    else&lt;br /&gt;
      MsgBox(&amp;quot;File failed to copy from &amp;quot;&amp;amp;Src&amp;amp;&amp;quot; to &amp;quot;&amp;amp;Dest)&lt;br /&gt;
    end if    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBApplication|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBApplicationEvents|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBApplicationEvents::OnDeviceFileCopied&amp;diff=8619</id>
		<title>ISDBApplicationEvents::OnDeviceFileCopied</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBApplicationEvents::OnDeviceFileCopied&amp;diff=8619"/>
		<updated>2014-03-31T12:54:08Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;{{MethodDeclaration|SDBApplication|ISDBApplicationEvents|Sub OnDeviceFileCopied(Source as String, Destination as String, Success as Boolean)}}  ===Parameters===  {{MethodParamete...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBApplication|ISDBApplicationEvents|Sub OnDeviceFileCopied(Source as String, Destination as String, Success as Boolean)}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |Source |String | Source path on PC&lt;br /&gt;
 |Destination |String | Path on device&lt;br /&gt;
 |Success |Boolean | Copy was successful (true), failed (false)  }}&lt;br /&gt;
&lt;br /&gt;
===Event description===&lt;br /&gt;
&lt;br /&gt;
Is called whenever a file copy to device finishes.&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1.1}}&lt;br /&gt;
&lt;br /&gt;
===Example code===                    &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option Explicit&lt;br /&gt;
 &lt;br /&gt;
Dim UI  : Set UI = SDB.UI&lt;br /&gt;
 &lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim mnuTest&lt;br /&gt;
    Set mnuTest = SDB.UI.AddMenuItem(SDB.UI.Menu_Edit, 0, 0)&lt;br /&gt;
    mnuTest.Caption = SDB.Localize(&amp;quot;Copy file to iPhone&amp;quot;)&lt;br /&gt;
    mnuTest.OnClickFunc = &amp;quot;SDBOnClick&amp;quot;&lt;br /&gt;
    mnuTest.UseScript = Script.ScriptPath&lt;br /&gt;
    Script.RegisterEvent SDB, &amp;quot;OnDeviceFileCopied&amp;quot;, &amp;quot;SDBDeviceFileCopied&amp;quot;    &lt;br /&gt;
End Sub&lt;br /&gt;
   &lt;br /&gt;
Dim DeviceHandle : DeviceHandle = -1   &lt;br /&gt;
   &lt;br /&gt;
Sub SDBOnClick(Item)     &lt;br /&gt;
  Dim Devices : Set Devices = SDB.Device.ActiveDeviceList(&amp;quot;VID_05AC&amp;amp;PID_129E&amp;quot;)&lt;br /&gt;
  Dim i : i = 0 &lt;br /&gt;
  For i = 0 To Devices.Count-1&lt;br /&gt;
	   If Devices.DeviceHandle(i) &amp;lt;&amp;gt; -1 Then&lt;br /&gt;
		   DeviceHandle = Devices.DeviceHandle(i)&lt;br /&gt;
	   End If&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  SDB.Device.CopyFile DeviceHandle, &amp;quot;C:\Temp\MyFile.wmv&amp;quot;, &amp;quot;/Temp/MyFile.wmv&amp;quot;&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub SDBDeviceFileCopied( DeviceHandle, Src, Dest, Success)&lt;br /&gt;
    if Success then&lt;br /&gt;
      MsgBox(&amp;quot;File copied successfuly from &amp;quot;&amp;amp;Src&amp;amp;&amp;quot; to &amp;quot;&amp;amp;Dest)&lt;br /&gt;
    else&lt;br /&gt;
      MsgBox(&amp;quot;File failed to copy from &amp;quot;&amp;amp;Src&amp;amp;&amp;quot; to &amp;quot;&amp;amp;Dest)&lt;br /&gt;
    end if  &lt;br /&gt;
    &lt;br /&gt;
    Dim Files&lt;br /&gt;
    Set Files = SDB.NewStringList &lt;br /&gt;
    Files.Add &amp;quot;/Temp/MyFile.wmv&amp;quot;&lt;br /&gt;
    SDB.Device.DeleteFiles DeviceHandle, Files&lt;br /&gt;
  &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBApplication|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBApplicationEvents|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBApplication&amp;diff=8618</id>
		<title>SDBApplication</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBApplication&amp;diff=8618"/>
		<updated>2014-03-31T12:50:16Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* ISDBApplicationEvents members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBApplication ==&lt;br /&gt;
&lt;br /&gt;
This is the main MediaMonkey scripting object that you initially have accessible as global &amp;lt;tt&amp;gt;SDB&amp;lt;/tt&amp;gt; variable in your scripts launched from MediaMonkey. All your communication with MediaMonkey should start here, you can get references to other objects from properties of this object. &lt;br /&gt;
&lt;br /&gt;
Object is exposed to ActiveX under name &amp;lt;tt&amp;gt;SongsDB.SDBApplication&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Another global variable also accessibl in scripts is &amp;lt;tt&amp;gt;Script&amp;lt;/tt&amp;gt;, pointing to [[SDBScriptControl]] object.&lt;br /&gt;
&lt;br /&gt;
=== ISDBApplication members ===&lt;br /&gt;
   &lt;br /&gt;
{{MethodsList &lt;br /&gt;
|[[ISDBApplication::AllVisibleSongList|AllVisibleSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::ApplicationPath|ApplicationPath]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::EqualizerPath|EqualizerPath]] |Property Get | From 3.1 beta 1&lt;br /&gt;
|[[ISDBApplication::IconsPath|IconsPath]] |Property Get | From 3.1 beta 1&lt;br /&gt;
|[[ISDBApplication::PluginsPath|PluginsPath]] |Property Get | From 3.1 beta 1 &lt;br /&gt;
|[[ISDBApplication::CurrentAddonInstallRoot|CurrentAddonInstallRoot]] |Property Get |  From 4.0&lt;br /&gt;
|[[ISDBApplication::ScriptsPath|ScriptsPath]] |Property Get | From 3.1 beta 1 &lt;br /&gt;
|[[ISDBApplication::SkinsPath|SkinsPath]] |Property Get | From 3.1 beta 1&lt;br /&gt;
|[[ISDBApplication::CommonDialog|CommonDialog]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::CreateTimer|CreateTimer]] |Method |  &lt;br /&gt;
|[[ISDBApplication::CurrentSongList|CurrentSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::CursorType|CursorType]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::Database|Database]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::Device|Device]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::Format|Format]] |Method |  &lt;br /&gt;
|[[ISDBApplication::IniFile|IniFile]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::IsKnownFiletype|IsKnownFiletype]] |Method | From 3.0&lt;br /&gt;
|[[ISDBApplication::IsRunning|IsRunning]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::InPartyMode|InPartyMode]] |Property Get |  From 4.1&lt;br /&gt;
|[[ISDBApplication::RunningAsService|RunningAsService]] |Property Get |  From 4.1&lt;br /&gt;
|[[ISDBApplication::Localize|Localize]] |Method |  &lt;br /&gt;
|[[ISDBApplication::LocalizedFormat|LocalizedFormat]] |Method |  &lt;br /&gt;
|[[ISDBApplication::LocalizeGen|LocalizeGen]] |Method |  &lt;br /&gt;
|[[ISDBApplication::MainTracksWindow|MainTracksWindow]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::MainTree|MainTree]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::MessageBox|MessageBox]] |Method |  &lt;br /&gt;
|[[ISDBApplication::MyMusicPath|MyMusicPath]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::NewSongData|NewSongData]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::NewSongList|NewSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::NewStringList|NewStringList]] |Property Get | From 3.0 &lt;br /&gt;
|[[ISDBApplication::Objects|Objects]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::Player|Player]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::PlaylistByTitle|PlaylistByTitle]] |Property Get |&lt;br /&gt;
|[[ISDBApplication::PlaylistByID|PlaylistByID]] |Property Get | From 4.0  &lt;br /&gt;
|[[ISDBApplication::ProcessMessages|ProcessMessages]] |Method |  &lt;br /&gt;
|[[ISDBApplication::Progress|Progress]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::RefreshScriptItems|RefreshScriptItems]] |Method | From 3.0&lt;br /&gt;
|[[ISDBApplication::RegisterIcon|RegisterIcon]] |Method |  &lt;br /&gt;
|[[ISDBApplication::RegisterIconHandle|RegisterIconHandle]] |Method |  &lt;br /&gt;
|[[ISDBApplication::Registry|Registry]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::SelectedSongList|SelectedSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::SelectFolder|SelectFolder]] |Method |  &lt;br /&gt;
|[[ISDBApplication::ShutdownAfterDisconnect|ShutdownAfterDisconnect]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::TemporaryFolder|TemporaryFolder]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::toASCII|toASCII]] |Method |  &lt;br /&gt;
|[[ISDBApplication::Tools|Tools]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::UI|UI]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionBuild|VersionBuild]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionHi|VersionHi]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionLo|VersionLo]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionRelease|VersionRelease]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionString|VersionString]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::ComServerUIActive|ComServerUIActive]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::WebControl|WebControl]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::Downloader|Downloader]] |Property Get | From 4.0 &lt;br /&gt;
|[[ISDBApplication::Collections|Collections]] |Property Get | From 4.0 &lt;br /&gt;
|[[ISDBApplication::VisibleCollectionsCount|VisibleCollectionsCount]] |Property Get | From 4.0&lt;br /&gt;
|[[ISDBApplication::VisibleCollectionID|VisibleCollectionID]] |Property Get | From 4.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== ISDBApplicationEvents members ===&lt;br /&gt;
   &lt;br /&gt;
{{MethodsList &lt;br /&gt;
|[[ISDBApplicationEvents::OnBeforeTracksMove|OnBeforeTracksMove]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnChangedSelection|OnChangedSelection]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnCompletePlaybackEnd|OnCompletePlaybackEnd]] |Event | From 4.0  &lt;br /&gt;
|[[ISDBApplicationEvents::OnDownloadFinished|OnDownloadFinished]] |Event | From 4.0&lt;br /&gt;
|[[ISDBApplicationEvents::OnFilterChange|OnFilterChange]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnIdle|OnIdle]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnNowPlayingModified|OnNowPlayingModified]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnNowPlayingSelectionChanged|OnNowPlayingSelectionChanged]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnOptionsChange|OnOptionsChange]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnPause|OnPause]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlay|OnPlay]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaybackEnd|OnPlaybackEnd]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnRepeatClicked|OnRepeatClicked]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnSeek|OnSeek]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnShuffleClicked|OnShuffleClicked]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnShutdown|OnShutdown]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnStop|OnStop]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackAdded|OnTrackAdded]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackConverted|OnTrackConverted]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackDeleting|OnTrackDeleting]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackDoubleClick|OnTrackDoubleClick]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackEnd|OnTrackEnd]] |Event | From 3.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListFilled|OnTrackListFilled]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListFilling|OnTrackListFilling]] |Event | From 3.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListModified|OnTrackListModified]] |Event | From 4.0  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListSelectionChanged|OnTrackListSelectionChanged]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackProperties|OnTrackProperties]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackSkipped|OnTrackSkipped]] |Event | From 4.0 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPartyModeEnabled|OnPartyModeEnabled]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnDeviceSyncStarted|OnDeviceSyncStarted]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnDeviceSyncCompleted|OnDeviceSyncCompleted]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaylistAdded|OnPlaylistAdded]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaylistRemoved|OnPlaylistRemoved]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaylistChanged|OnPlaylistChanged]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnDeviceFileCopied|OnDeviceFileCopied]] |Event | From 4.1.1 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBApplication|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::GetSyncProgress&amp;diff=8617</id>
		<title>ISDBDevice::GetSyncProgress</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::GetSyncProgress&amp;diff=8617"/>
		<updated>2014-03-31T12:47:18Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;{{MethodDeclaration|SDBDevice|ISDBDevice|Property Get GetSyncProgress(DeviceHandle As Long)}}  ===Parameters===  {{MethodParameters   |DeviceHandle |Long |Handle of the device}} ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Property Get GetSyncProgress(DeviceHandle As Long)}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |DeviceHandle |Long |Handle of the device}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Gets progress percentage of sync/copy task.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;       &lt;br /&gt;
Option Explicit&lt;br /&gt;
 &lt;br /&gt;
Dim UI  : Set UI = SDB.UI&lt;br /&gt;
 &lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim mnuTest&lt;br /&gt;
    Set mnuTest = SDB.UI.AddMenuItem(SDB.UI.Menu_Edit, 0, 0)&lt;br /&gt;
    mnuTest.Caption = SDB.Localize(&amp;quot;Get sync progress&amp;quot;)&lt;br /&gt;
    mnuTest.OnClickFunc = &amp;quot;SDBOnClick&amp;quot;&lt;br /&gt;
    mnuTest.UseScript = Script.ScriptPath    &lt;br /&gt;
End Sub&lt;br /&gt;
   &lt;br /&gt;
Sub SDBOnClick(Item)   &lt;br /&gt;
  Dim DeviceHandle : DeviceHandle = -1&lt;br /&gt;
  Dim Devices : Set Devices = SDB.Device.ActiveDeviceList(&amp;quot;VID_05AC&amp;amp;PID_129E&amp;quot;)&lt;br /&gt;
  Dim i : i = 0 &lt;br /&gt;
  For i = 0 To Devices.Count-1&lt;br /&gt;
	   If Devices.DeviceHandle(i) &amp;lt;&amp;gt; -1 Then&lt;br /&gt;
		   DeviceHandle = Devices.DeviceHandle(i)&lt;br /&gt;
	   End If&lt;br /&gt;
  Next&lt;br /&gt;
    &lt;br /&gt;
  MsgBox( SDB.Device.GetSyncProgress( DeviceHandle))&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see how to handle copy result see example in CopyFile() method&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::DeleteFiles&amp;diff=8616</id>
		<title>ISDBDevice::DeleteFiles</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::DeleteFiles&amp;diff=8616"/>
		<updated>2014-03-31T12:45:22Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;{{MethodDeclaration|SDBDevice|ISDBDevice|Sub CopyFiles(DeviceHandle As Long, Files As SDBStringList)}}  ===Parameters===  {{MethodParameters   |DeviceHandle |Long |Handle of ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Sub CopyFiles(DeviceHandle As Long, Files As [[SDBStringList]])}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |DeviceHandle |Long |Handle of the device&lt;br /&gt;
 |Files| String | Destination file paths on the device}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Deletes file(s) from device.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;       &lt;br /&gt;
    Dim Files&lt;br /&gt;
    Set Files = SDB.NewStringList &lt;br /&gt;
    Files.Add &amp;quot;/Temp/MyFile.wmv&amp;quot;&lt;br /&gt;
    SDB.Device.DeleteFiles DeviceHandle, Files&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see how to handle copy result see example in CopyFile() method&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::CopyFiles&amp;diff=8615</id>
		<title>ISDBDevice::CopyFiles</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::CopyFiles&amp;diff=8615"/>
		<updated>2014-03-31T12:43:58Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;{{MethodDeclaration|SDBDevice|ISDBDevice|Sub CopyFiles(DeviceHandle As Long, Sources As SDBStringList, Destinations as SDBStringList)}}  ===Parameters===  {{MethodParamet...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Sub CopyFiles(DeviceHandle As Long, Sources As [[SDBStringList]], Destinations as [[SDBStringList]])}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |DeviceHandle |Long |Handle of the device&lt;br /&gt;
 |Sources| String | Source file paths on PC&lt;br /&gt;
 |Destinations| String | Destination file paths on the device}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Copies file to device.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
    Dim Sources&lt;br /&gt;
    Set Sources= SDB.NewStringList &lt;br /&gt;
    Sources.Add &amp;quot;C:\Temp\MyFile.wmv&amp;quot;&lt;br /&gt;
    Sources.Add &amp;quot;C:\Temp\MyFile2.wmv&amp;quot;&lt;br /&gt;
    Dim Destinations&lt;br /&gt;
    Set Destinations= SDB.NewStringList &lt;br /&gt;
    Destinations.Add &amp;quot;/Temp/MyFile.wmv&amp;quot;&lt;br /&gt;
    Destinations.Add &amp;quot;/Temp/MyFile2.wmv&amp;quot;&lt;br /&gt;
    SDB.Device.CopyFiles DeviceHandle, Sources, Destinations&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see how to handle copy result see example in CopyFile() method&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::CopyFile&amp;diff=8614</id>
		<title>ISDBDevice::CopyFile</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBDevice::CopyFile&amp;diff=8614"/>
		<updated>2014-03-31T12:36:18Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;{{MethodDeclaration|SDBDevice|ISDBDevice|Sub CopyFile(DeviceHandle As Long, Source As String, Destination as String)}}  ===Parameters===  {{MethodParameters   |DeviceHandle |Long...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBDevice|ISDBDevice|Sub CopyFile(DeviceHandle As Long, Source As String, Destination as String)}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |DeviceHandle |Long |Handle of the device&lt;br /&gt;
 |Source| String | Source file path on PC&lt;br /&gt;
 |Destination| String | Destination file path on the device}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Copies file to device.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
Option Explicit&lt;br /&gt;
 &lt;br /&gt;
Dim UI  : Set UI = SDB.UI&lt;br /&gt;
 &lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim mnuTest&lt;br /&gt;
    Set mnuTest = SDB.UI.AddMenuItem(SDB.UI.Menu_Edit, 0, 0)&lt;br /&gt;
    mnuTest.Caption = SDB.Localize(&amp;quot;Copy file to iPhone&amp;quot;)&lt;br /&gt;
    mnuTest.OnClickFunc = &amp;quot;SDBOnClick&amp;quot;&lt;br /&gt;
    mnuTest.UseScript = Script.ScriptPath&lt;br /&gt;
    Script.RegisterEvent SDB, &amp;quot;OnDeviceFileCopied&amp;quot;, &amp;quot;SDBDeviceFileCopied&amp;quot;    &lt;br /&gt;
End Sub&lt;br /&gt;
   &lt;br /&gt;
Dim DeviceHandle : DeviceHandle = -1   &lt;br /&gt;
   &lt;br /&gt;
Sub SDBOnClick(Item)     &lt;br /&gt;
  Dim Devices : Set Devices = SDB.Device.ActiveDeviceList(&amp;quot;VID_05AC&amp;amp;PID_129E&amp;quot;)&lt;br /&gt;
  Dim i : i = 0 &lt;br /&gt;
  For i = 0 To Devices.Count-1&lt;br /&gt;
	   If Devices.DeviceHandle(i) &amp;lt;&amp;gt; -1 Then&lt;br /&gt;
		   DeviceHandle = Devices.DeviceHandle(i)&lt;br /&gt;
	   End If&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  SDB.Device.CopyFile DeviceHandle, &amp;quot;C:\Temp\MyFile.wmv&amp;quot;, &amp;quot;/Temp/MyFile.wmv&amp;quot;&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub SDBDeviceFileCopied( DeviceHandle, Src, Dest, Success)&lt;br /&gt;
    if Success then&lt;br /&gt;
      MsgBox(&amp;quot;File copied successfuly from &amp;quot;&amp;amp;Src&amp;amp;&amp;quot; to &amp;quot;&amp;amp;Dest)&lt;br /&gt;
    else&lt;br /&gt;
      MsgBox(&amp;quot;File failed to copy from &amp;quot;&amp;amp;Src&amp;amp;&amp;quot; to &amp;quot;&amp;amp;Dest)&lt;br /&gt;
    end if    &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBDevice&amp;diff=8613</id>
		<title>SDBDevice</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBDevice&amp;diff=8613"/>
		<updated>2014-03-31T12:29:45Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* ISDBDevice members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBDevice ==&lt;br /&gt;
&lt;br /&gt;
Mainly for usage in device plug-ins for controling several aspects of portable device functionality.&lt;br /&gt;
&lt;br /&gt;
=== ISDBDevice members ===&lt;br /&gt;
   &lt;br /&gt;
{{MethodsList &lt;br /&gt;
|[[ISDBDevice::ActiveDeviceList|ActiveDeviceList]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::AddDeviceNode|AddDeviceNode]] |Method |  &lt;br /&gt;
|[[ISDBDevice::canEjectDevice|canEjectDevice]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::CreateDeviceNode|CreateDeviceNode]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceEject|DeviceEject]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceIcon|DeviceIcon]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBDevice::DeviceMenuIcon|DeviceMenuIcon]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBDevice::DeviceStart|DeviceStart]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceStartEx|DeviceStartEx]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceStop|DeviceStop]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DeviceThreadedEject|DeviceThreadedEject]] |Method |  &lt;br /&gt;
|[[ISDBDevice::DriveLetterFree|DriveLetterFree]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::FreeSpace|FreeSpace]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::GetTrackIDSynchStatus|GetTrackIDSynchStatus]] |Method |  &lt;br /&gt;
|[[ISDBDevice::GetTrackSynchStatus|GetTrackSynchStatus]] |Method |  &lt;br /&gt;
|[[ISDBDevice::GetDeviceContent|GetDeviceContent]] |Method |  From 4.1&lt;br /&gt;
|[[ISDBDevice::ChangeDeviceCaption|ChangeDeviceCaption]] |Method |  &lt;br /&gt;
|[[ISDBDevice::ChangeDeviceID|ChangeDeviceID]] |Method |  &lt;br /&gt;
|[[ISDBDevice::isPlaylistForSynch|isPlaylistForSynch]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBDevice::IsVisible|IsVisible]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::LockPlugin|LockPlugin]] |Method |  &lt;br /&gt;
|[[ISDBDevice::RegisterTreeNode|RegisterTreeNode]] |Method |  &lt;br /&gt;
|[[ISDBDevice::ShowDeviceConfig|ShowDeviceConfig]] |Method |  &lt;br /&gt;
|[[ISDBDevice::StartSynch|StartSynch]] |Method |  &lt;br /&gt;
|[[ISDBDevice::StartAutoSynch|StartAutoSynch]] |Method |  From 4.1&lt;br /&gt;
|[[ISDBDevice::SynchTerminating|SynchTerminating]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::TotalSpace|TotalSpace]] |Property Get |  &lt;br /&gt;
|[[ISDBDevice::UnlockPlugin|UnlockPlugin]] |Method |  &lt;br /&gt;
|[[ISDBDevice::TerminateThreads|TerminateThreads]] |Method | From 4.0 &lt;br /&gt;
|[[ISDBDevice::GetDeviceProfileXML|GetDeviceProfileXML]] |Property Get| From 4.0.3&lt;br /&gt;
|[[ISDBDevice::CopyFile|CopyFile]] |Property Get| From 4.1.1&lt;br /&gt;
|[[ISDBDevice::CopyFiles|CopyFiles]] |Property Get| From 4.1.1&lt;br /&gt;
|[[ISDBDevice::DeleteFiles|DeleteFiles]] |Property Get| From 4.1.1&lt;br /&gt;
|[[ISDBDevice::GetSyncProgress|GetSyncProgress]] |Property Get| From 4.1.1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBDevice|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=Compatible_Devices&amp;diff=8451</id>
		<title>Compatible Devices</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=Compatible_Devices&amp;diff=8451"/>
		<updated>2013-10-31T21:05:07Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Samsung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of devices with known compatibility (i.e. these devices have been tested by users) with the current version of MediaMonkey.  If you know of additional devices with MediaMonkey compatibility, please add them to this list.  Devices are listed by their manufacturer.  Click on any device to find any specific settings that are necessary to sync with the device.&lt;br /&gt;
&lt;br /&gt;
==Android devices==&lt;br /&gt;
:[[GenericMTP|Any Android device]] over USB/MTP with MediaMonkey 4.0.7&lt;br /&gt;
:[[Android device running Android 2.3+]] via Wi-Fi sync between MediaMonkey for Android and MediaMonkey for Windows 4.1&lt;br /&gt;
&lt;br /&gt;
==Apple==&lt;br /&gt;
:[[iPhone|iOS 4.0 - 6]] as of MediaMonkey 4.0.7&lt;br /&gt;
:[[iPhone|iOS - 7]] as of MediaMonkey 4.1&lt;br /&gt;
:[[iPod]] (including 5th Gen)&lt;br /&gt;
:[[iPod Classic]]&lt;br /&gt;
:[[iPod Mini|iPod Mini]] (1st and 2nd Gen)&lt;br /&gt;
:[[iPod Nano]] (1st, 2nd, 3rd, 4th, 5th, 6th, and 7th Gen)*&lt;br /&gt;
:[[iPod Photo]]&lt;br /&gt;
:[[iPod Shuffle]] (1st, 2nd, 3rd and 4th Gen)&lt;br /&gt;
:[[iPod Touch]] (1st, 2nd, 3rd, 4th and 5th Gen)&lt;br /&gt;
:[[iPhone|iPhone]] (iPhone 2G, iPhone 3G, iPhone 3GS, iPhone 4, iPhone 4s, iPhone 5, iPhone 5c)&lt;br /&gt;
:[[iPhone|iPad]] (1st, 2nd, 3rd Gen)&lt;br /&gt;
:[[iTunes|iTunes]] (iTunes 6 to 11.1)&lt;br /&gt;
&lt;br /&gt;
Note: iOS7 support is provided with MediaMonkey 4.1.0 &lt;br /&gt;
&lt;br /&gt;
Apple Device Sync Help: http://www.mediamonkey.com/wiki/index.php/WebHelp:iPod_Synchronization/4.0&lt;br /&gt;
&lt;br /&gt;
Note: iPad 4th gen, iPad mini don&#039;t have confirmed support yet.&lt;br /&gt;
&lt;br /&gt;
==Archos==&lt;br /&gt;
:[[GenericMTP|Archos 5]]&lt;br /&gt;
:[[GenericMTP|Archos 605 Wifi]]&lt;br /&gt;
:[[USBmass|Archos 604/504]]&lt;br /&gt;
:[[GenericMTP|Archos 7]]&lt;br /&gt;
:[[GenericMTP|Archos Gemini 200]]&lt;br /&gt;
:[[GenericMTP|Archos Gmini (all versions)]]&lt;br /&gt;
&lt;br /&gt;
==Audiovox==&lt;br /&gt;
:[[GenericMTP|Audiovox SMP3-xxx]]&lt;br /&gt;
&lt;br /&gt;
==Cowon==&lt;br /&gt;
:[[USBmass|iAudio X5]]&lt;br /&gt;
:[[USBmass|Cowon Q5W]]&lt;br /&gt;
:[[USBmass|Cowon iAudio 7]]&lt;br /&gt;
:[[USBmass|Cowon iAudio D2]]&lt;br /&gt;
:[[USBmass|Cowon S9]] Both MSC and MTP.&lt;br /&gt;
&lt;br /&gt;
==Creative==&lt;br /&gt;
:[[MTPZen|Zen Micro (2.20.05 firmware)]]&lt;br /&gt;
:[[MTPZen|Zen Nano]]&lt;br /&gt;
:[[MTPZen|Zen Neeon]]&lt;br /&gt;
:[[MTPZen|Zen Sleek]]&lt;br /&gt;
:[[MTPZen|Zen Stone]]&lt;br /&gt;
:[[MTPZen|Zen Touch (with &#039;Plays for Sure&#039; MTP firmware update)]]&lt;br /&gt;
:[[MTPZen|Zen Vision]]&lt;br /&gt;
:[[MTPZen|Zen Vision:M]]&lt;br /&gt;
:[[MTPZen|Zen xtra (&#039;Plays for Sure&#039; firmware update)]]&lt;br /&gt;
&lt;br /&gt;
Compatible, with workaround:&lt;br /&gt;
:[[MTPZen|ZEN MX]] - see http://www.mediamonkey.com/forum/viewtopic.php?f=12&amp;amp;t=44192 http://www.mediamonkey.com/forum/viewtopic.php?f=12&amp;amp;t=44192&lt;br /&gt;
&lt;br /&gt;
Compatible, with restriction:&lt;br /&gt;
:[[MTPZen|ZEN]] - see [http://www.mediamonkey.com/forum/viewtopic.php?f=6&amp;amp;t=39965 here]&lt;br /&gt;
&lt;br /&gt;
==Dell==&lt;br /&gt;
:[[USBmass|Dell DJ (mostly works--need logs to debug playlist problem)]]&lt;br /&gt;
&lt;br /&gt;
==Eiger labs==&lt;br /&gt;
:[[USBmass|MPMan MP-F57]]&lt;br /&gt;
&lt;br /&gt;
==Finis==&lt;br /&gt;
:[[USBmass|Finis SwiMP3]]&lt;br /&gt;
&lt;br /&gt;
==HTC==&lt;br /&gt;
:HTC Touch Diamond 2&lt;br /&gt;
&lt;br /&gt;
==iRiver==&lt;br /&gt;
:[[GenericMTP|iRiver Clix 2nd Gen (MTP mode)]]&lt;br /&gt;
:iRiver H10&lt;br /&gt;
:iRiver H120/H320/H340&lt;br /&gt;
:iRiver ifp-8xx&lt;br /&gt;
:[[USBmass|iRiver iFP-9xx]]&lt;br /&gt;
:iRiver N-xx&lt;br /&gt;
:iRiver PMP-1xx&lt;br /&gt;
:iRiver PMC-120&lt;br /&gt;
&lt;br /&gt;
==Motorola==&lt;br /&gt;
:[[Motorola RIZR Z3]]&lt;br /&gt;
:[[Motorola Q 9 Global]]&lt;br /&gt;
&lt;br /&gt;
==Nokia==&lt;br /&gt;
:[[GenericMTP|Nokia 5310]]&lt;br /&gt;
:[[GenericMTP|Nokia N8]]&lt;br /&gt;
&lt;br /&gt;
==Palm==&lt;br /&gt;
:[[Palm Pre]]&lt;br /&gt;
&lt;br /&gt;
==Phillips==&lt;br /&gt;
:[[GenericMTP|Philips HDD6320]] (partial support--need logs to debug)&lt;br /&gt;
&lt;br /&gt;
==Pioneer==&lt;br /&gt;
:INNO  GEX-INNO2BK (same as Samsung Helix YX-M1Z)&lt;br /&gt;
&lt;br /&gt;
==RCA==&lt;br /&gt;
:[[USBmass|Lyra 2780]]&lt;br /&gt;
&lt;br /&gt;
==Samsung==&lt;br /&gt;
:[[GenericMTP|Samsung YP-XX]]&lt;br /&gt;
:[[GenericMTP|Samsung YP-XXX]]&lt;br /&gt;
:[[GenericMTP|Samsung Galaxy Nexus]]&lt;br /&gt;
:[[GenericMTP|Samsung Galaxy S2]]&lt;br /&gt;
:[[GenericMTP|Samsung Galaxy S3]]&lt;br /&gt;
:[[GenericMTP|Samsung Galaxy S4]]&lt;br /&gt;
:[[GenericMTP|Samsung Galaxy Note]]&lt;br /&gt;
&lt;br /&gt;
==SanDisk==&lt;br /&gt;
:[[MTPSansa|Sansa eXXX]]&lt;br /&gt;
:[[MTPSansa|Sansa Fuze]]&lt;br /&gt;
:[[MTPSansa|Sansa M250]]&lt;br /&gt;
:[[MTPSansa|Sandisk Sansa]]&lt;br /&gt;
:[[MTPSansa|Sandisk Connect 4Gb]]&lt;br /&gt;
:[[MTPSansa|Sandisk Sansa Clip]]&lt;br /&gt;
:[[MTPSansa|Sandisk E250]]&lt;br /&gt;
&lt;br /&gt;
==Toshiba==&lt;br /&gt;
:[[GenericMTP|Toshiba Gigabeat (works but firmware bug limits synch speed)]]&lt;br /&gt;
&lt;br /&gt;
==Trekstor==&lt;br /&gt;
:[[TrekstorVibez|Vibez]] (Set as either [[GenericMTP|MTP Device]] or as [[USBmass|MSC Device]])&lt;br /&gt;
&lt;br /&gt;
==Sony==&lt;br /&gt;
:[[USBmass|Sony Ericsson W302]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W600]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W800i]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W880i]]&lt;br /&gt;
:[[GenericMTP|Sony Walkman NWZ-A829]]&lt;br /&gt;
:[[GenericMTP|Sony Walkman NWZ-S638]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=Compatible_Devices&amp;diff=8450</id>
		<title>Compatible Devices</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=Compatible_Devices&amp;diff=8450"/>
		<updated>2013-10-31T21:03:33Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Apple */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of devices with known compatibility (i.e. these devices have been tested by users) with the current version of MediaMonkey.  If you know of additional devices with MediaMonkey compatibility, please add them to this list.  Devices are listed by their manufacturer.  Click on any device to find any specific settings that are necessary to sync with the device.&lt;br /&gt;
&lt;br /&gt;
==Android devices==&lt;br /&gt;
:[[GenericMTP|Any Android device]] over USB/MTP with MediaMonkey 4.0.7&lt;br /&gt;
:[[Android device running Android 2.3+]] via Wi-Fi sync between MediaMonkey for Android and MediaMonkey for Windows 4.1&lt;br /&gt;
&lt;br /&gt;
==Apple==&lt;br /&gt;
:[[iPhone|iOS 4.0 - 6]] as of MediaMonkey 4.0.7&lt;br /&gt;
:[[iPhone|iOS - 7]] as of MediaMonkey 4.1&lt;br /&gt;
:[[iPod]] (including 5th Gen)&lt;br /&gt;
:[[iPod Classic]]&lt;br /&gt;
:[[iPod Mini|iPod Mini]] (1st and 2nd Gen)&lt;br /&gt;
:[[iPod Nano]] (1st, 2nd, 3rd, 4th, 5th, 6th, and 7th Gen)*&lt;br /&gt;
:[[iPod Photo]]&lt;br /&gt;
:[[iPod Shuffle]] (1st, 2nd, 3rd and 4th Gen)&lt;br /&gt;
:[[iPod Touch]] (1st, 2nd, 3rd, 4th and 5th Gen)&lt;br /&gt;
:[[iPhone|iPhone]] (iPhone 2G, iPhone 3G, iPhone 3GS, iPhone 4, iPhone 4s, iPhone 5, iPhone 5c)&lt;br /&gt;
:[[iPhone|iPad]] (1st, 2nd, 3rd Gen)&lt;br /&gt;
:[[iTunes|iTunes]] (iTunes 6 to 11.1)&lt;br /&gt;
&lt;br /&gt;
Note: iOS7 support is provided with MediaMonkey 4.1.0 &lt;br /&gt;
&lt;br /&gt;
Apple Device Sync Help: http://www.mediamonkey.com/wiki/index.php/WebHelp:iPod_Synchronization/4.0&lt;br /&gt;
&lt;br /&gt;
Note: iPad 4th gen, iPad mini don&#039;t have confirmed support yet.&lt;br /&gt;
&lt;br /&gt;
==Archos==&lt;br /&gt;
:[[GenericMTP|Archos 5]]&lt;br /&gt;
:[[GenericMTP|Archos 605 Wifi]]&lt;br /&gt;
:[[USBmass|Archos 604/504]]&lt;br /&gt;
:[[GenericMTP|Archos 7]]&lt;br /&gt;
:[[GenericMTP|Archos Gemini 200]]&lt;br /&gt;
:[[GenericMTP|Archos Gmini (all versions)]]&lt;br /&gt;
&lt;br /&gt;
==Audiovox==&lt;br /&gt;
:[[GenericMTP|Audiovox SMP3-xxx]]&lt;br /&gt;
&lt;br /&gt;
==Cowon==&lt;br /&gt;
:[[USBmass|iAudio X5]]&lt;br /&gt;
:[[USBmass|Cowon Q5W]]&lt;br /&gt;
:[[USBmass|Cowon iAudio 7]]&lt;br /&gt;
:[[USBmass|Cowon iAudio D2]]&lt;br /&gt;
:[[USBmass|Cowon S9]] Both MSC and MTP.&lt;br /&gt;
&lt;br /&gt;
==Creative==&lt;br /&gt;
:[[MTPZen|Zen Micro (2.20.05 firmware)]]&lt;br /&gt;
:[[MTPZen|Zen Nano]]&lt;br /&gt;
:[[MTPZen|Zen Neeon]]&lt;br /&gt;
:[[MTPZen|Zen Sleek]]&lt;br /&gt;
:[[MTPZen|Zen Stone]]&lt;br /&gt;
:[[MTPZen|Zen Touch (with &#039;Plays for Sure&#039; MTP firmware update)]]&lt;br /&gt;
:[[MTPZen|Zen Vision]]&lt;br /&gt;
:[[MTPZen|Zen Vision:M]]&lt;br /&gt;
:[[MTPZen|Zen xtra (&#039;Plays for Sure&#039; firmware update)]]&lt;br /&gt;
&lt;br /&gt;
Compatible, with workaround:&lt;br /&gt;
:[[MTPZen|ZEN MX]] - see http://www.mediamonkey.com/forum/viewtopic.php?f=12&amp;amp;t=44192 http://www.mediamonkey.com/forum/viewtopic.php?f=12&amp;amp;t=44192&lt;br /&gt;
&lt;br /&gt;
Compatible, with restriction:&lt;br /&gt;
:[[MTPZen|ZEN]] - see [http://www.mediamonkey.com/forum/viewtopic.php?f=6&amp;amp;t=39965 here]&lt;br /&gt;
&lt;br /&gt;
==Dell==&lt;br /&gt;
:[[USBmass|Dell DJ (mostly works--need logs to debug playlist problem)]]&lt;br /&gt;
&lt;br /&gt;
==Eiger labs==&lt;br /&gt;
:[[USBmass|MPMan MP-F57]]&lt;br /&gt;
&lt;br /&gt;
==Finis==&lt;br /&gt;
:[[USBmass|Finis SwiMP3]]&lt;br /&gt;
&lt;br /&gt;
==HTC==&lt;br /&gt;
:HTC Touch Diamond 2&lt;br /&gt;
&lt;br /&gt;
==iRiver==&lt;br /&gt;
:[[GenericMTP|iRiver Clix 2nd Gen (MTP mode)]]&lt;br /&gt;
:iRiver H10&lt;br /&gt;
:iRiver H120/H320/H340&lt;br /&gt;
:iRiver ifp-8xx&lt;br /&gt;
:[[USBmass|iRiver iFP-9xx]]&lt;br /&gt;
:iRiver N-xx&lt;br /&gt;
:iRiver PMP-1xx&lt;br /&gt;
:iRiver PMC-120&lt;br /&gt;
&lt;br /&gt;
==Motorola==&lt;br /&gt;
:[[Motorola RIZR Z3]]&lt;br /&gt;
:[[Motorola Q 9 Global]]&lt;br /&gt;
&lt;br /&gt;
==Nokia==&lt;br /&gt;
:[[GenericMTP|Nokia 5310]]&lt;br /&gt;
:[[GenericMTP|Nokia N8]]&lt;br /&gt;
&lt;br /&gt;
==Palm==&lt;br /&gt;
:[[Palm Pre]]&lt;br /&gt;
&lt;br /&gt;
==Phillips==&lt;br /&gt;
:[[GenericMTP|Philips HDD6320]] (partial support--need logs to debug)&lt;br /&gt;
&lt;br /&gt;
==Pioneer==&lt;br /&gt;
:INNO  GEX-INNO2BK (same as Samsung Helix YX-M1Z)&lt;br /&gt;
&lt;br /&gt;
==RCA==&lt;br /&gt;
:[[USBmass|Lyra 2780]]&lt;br /&gt;
&lt;br /&gt;
==Samsung==&lt;br /&gt;
:[[GenericMTP|Samsung YP-XX]]&lt;br /&gt;
:[[GenericMTP|Samsung YP-XXX]]&lt;br /&gt;
&lt;br /&gt;
==SanDisk==&lt;br /&gt;
:[[MTPSansa|Sansa eXXX]]&lt;br /&gt;
:[[MTPSansa|Sansa Fuze]]&lt;br /&gt;
:[[MTPSansa|Sansa M250]]&lt;br /&gt;
:[[MTPSansa|Sandisk Sansa]]&lt;br /&gt;
:[[MTPSansa|Sandisk Connect 4Gb]]&lt;br /&gt;
:[[MTPSansa|Sandisk Sansa Clip]]&lt;br /&gt;
:[[MTPSansa|Sandisk E250]]&lt;br /&gt;
&lt;br /&gt;
==Toshiba==&lt;br /&gt;
:[[GenericMTP|Toshiba Gigabeat (works but firmware bug limits synch speed)]]&lt;br /&gt;
&lt;br /&gt;
==Trekstor==&lt;br /&gt;
:[[TrekstorVibez|Vibez]] (Set as either [[GenericMTP|MTP Device]] or as [[USBmass|MSC Device]])&lt;br /&gt;
&lt;br /&gt;
==Sony==&lt;br /&gt;
:[[USBmass|Sony Ericsson W302]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W600]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W800i]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W880i]]&lt;br /&gt;
:[[GenericMTP|Sony Walkman NWZ-A829]]&lt;br /&gt;
:[[GenericMTP|Sony Walkman NWZ-S638]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=Compatible_Devices&amp;diff=8449</id>
		<title>Compatible Devices</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=Compatible_Devices&amp;diff=8449"/>
		<updated>2013-10-31T21:03:10Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Apple */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of devices with known compatibility (i.e. these devices have been tested by users) with the current version of MediaMonkey.  If you know of additional devices with MediaMonkey compatibility, please add them to this list.  Devices are listed by their manufacturer.  Click on any device to find any specific settings that are necessary to sync with the device.&lt;br /&gt;
&lt;br /&gt;
==Android devices==&lt;br /&gt;
:[[GenericMTP|Any Android device]] over USB/MTP with MediaMonkey 4.0.7&lt;br /&gt;
:[[Android device running Android 2.3+]] via Wi-Fi sync between MediaMonkey for Android and MediaMonkey for Windows 4.1&lt;br /&gt;
&lt;br /&gt;
==Apple==&lt;br /&gt;
:[[iPhone|iOS 4.0 - 6]] as of MediaMonkey 4.0.7&lt;br /&gt;
:[[iPhone|iOS - 7]] as of MediaMonkey 4.1&lt;br /&gt;
:[[iPod]] (including 5th Gen)&lt;br /&gt;
:[[iPod Classic]]&lt;br /&gt;
:[[iPod Mini|iPod Mini]] (1st and 2nd Gen)&lt;br /&gt;
:[[iPod Nano]] (1st, 2nd, 3rd, 4th, 5th, 6th, and 7th Gen)*&lt;br /&gt;
:[[iPod Photo]]&lt;br /&gt;
:[[iPod Shuffle]] (1st, 2nd, 3rd and 4th Gen)&lt;br /&gt;
:[[iPod Touch]] (1st, 2nd, 3rd, 4th and 5th Gen)&lt;br /&gt;
:[[iPhone|iPhone]] (iPhone 2G, iPhone 3G, iPhone 3GS, iPhone 4, iPhone 4s, iPhone 5, iPhone 5c)&lt;br /&gt;
:[[iPhone|iPad]] (1st, 2nd, 3rd Gen)&lt;br /&gt;
:[[iTunes|iTunes]] (iTunes 6 to 11.1)&lt;br /&gt;
&lt;br /&gt;
Note: iOS7 support is provided with MediaMonkey 4.1.0 &lt;br /&gt;
Apple Device Sync Help: http://www.mediamonkey.com/wiki/index.php/WebHelp:iPod_Synchronization/4.0&lt;br /&gt;
&lt;br /&gt;
Note: iPad 4th gen, iPad mini don&#039;t have confirmed support yet.&lt;br /&gt;
&lt;br /&gt;
==Archos==&lt;br /&gt;
:[[GenericMTP|Archos 5]]&lt;br /&gt;
:[[GenericMTP|Archos 605 Wifi]]&lt;br /&gt;
:[[USBmass|Archos 604/504]]&lt;br /&gt;
:[[GenericMTP|Archos 7]]&lt;br /&gt;
:[[GenericMTP|Archos Gemini 200]]&lt;br /&gt;
:[[GenericMTP|Archos Gmini (all versions)]]&lt;br /&gt;
&lt;br /&gt;
==Audiovox==&lt;br /&gt;
:[[GenericMTP|Audiovox SMP3-xxx]]&lt;br /&gt;
&lt;br /&gt;
==Cowon==&lt;br /&gt;
:[[USBmass|iAudio X5]]&lt;br /&gt;
:[[USBmass|Cowon Q5W]]&lt;br /&gt;
:[[USBmass|Cowon iAudio 7]]&lt;br /&gt;
:[[USBmass|Cowon iAudio D2]]&lt;br /&gt;
:[[USBmass|Cowon S9]] Both MSC and MTP.&lt;br /&gt;
&lt;br /&gt;
==Creative==&lt;br /&gt;
:[[MTPZen|Zen Micro (2.20.05 firmware)]]&lt;br /&gt;
:[[MTPZen|Zen Nano]]&lt;br /&gt;
:[[MTPZen|Zen Neeon]]&lt;br /&gt;
:[[MTPZen|Zen Sleek]]&lt;br /&gt;
:[[MTPZen|Zen Stone]]&lt;br /&gt;
:[[MTPZen|Zen Touch (with &#039;Plays for Sure&#039; MTP firmware update)]]&lt;br /&gt;
:[[MTPZen|Zen Vision]]&lt;br /&gt;
:[[MTPZen|Zen Vision:M]]&lt;br /&gt;
:[[MTPZen|Zen xtra (&#039;Plays for Sure&#039; firmware update)]]&lt;br /&gt;
&lt;br /&gt;
Compatible, with workaround:&lt;br /&gt;
:[[MTPZen|ZEN MX]] - see http://www.mediamonkey.com/forum/viewtopic.php?f=12&amp;amp;t=44192 http://www.mediamonkey.com/forum/viewtopic.php?f=12&amp;amp;t=44192&lt;br /&gt;
&lt;br /&gt;
Compatible, with restriction:&lt;br /&gt;
:[[MTPZen|ZEN]] - see [http://www.mediamonkey.com/forum/viewtopic.php?f=6&amp;amp;t=39965 here]&lt;br /&gt;
&lt;br /&gt;
==Dell==&lt;br /&gt;
:[[USBmass|Dell DJ (mostly works--need logs to debug playlist problem)]]&lt;br /&gt;
&lt;br /&gt;
==Eiger labs==&lt;br /&gt;
:[[USBmass|MPMan MP-F57]]&lt;br /&gt;
&lt;br /&gt;
==Finis==&lt;br /&gt;
:[[USBmass|Finis SwiMP3]]&lt;br /&gt;
&lt;br /&gt;
==HTC==&lt;br /&gt;
:HTC Touch Diamond 2&lt;br /&gt;
&lt;br /&gt;
==iRiver==&lt;br /&gt;
:[[GenericMTP|iRiver Clix 2nd Gen (MTP mode)]]&lt;br /&gt;
:iRiver H10&lt;br /&gt;
:iRiver H120/H320/H340&lt;br /&gt;
:iRiver ifp-8xx&lt;br /&gt;
:[[USBmass|iRiver iFP-9xx]]&lt;br /&gt;
:iRiver N-xx&lt;br /&gt;
:iRiver PMP-1xx&lt;br /&gt;
:iRiver PMC-120&lt;br /&gt;
&lt;br /&gt;
==Motorola==&lt;br /&gt;
:[[Motorola RIZR Z3]]&lt;br /&gt;
:[[Motorola Q 9 Global]]&lt;br /&gt;
&lt;br /&gt;
==Nokia==&lt;br /&gt;
:[[GenericMTP|Nokia 5310]]&lt;br /&gt;
:[[GenericMTP|Nokia N8]]&lt;br /&gt;
&lt;br /&gt;
==Palm==&lt;br /&gt;
:[[Palm Pre]]&lt;br /&gt;
&lt;br /&gt;
==Phillips==&lt;br /&gt;
:[[GenericMTP|Philips HDD6320]] (partial support--need logs to debug)&lt;br /&gt;
&lt;br /&gt;
==Pioneer==&lt;br /&gt;
:INNO  GEX-INNO2BK (same as Samsung Helix YX-M1Z)&lt;br /&gt;
&lt;br /&gt;
==RCA==&lt;br /&gt;
:[[USBmass|Lyra 2780]]&lt;br /&gt;
&lt;br /&gt;
==Samsung==&lt;br /&gt;
:[[GenericMTP|Samsung YP-XX]]&lt;br /&gt;
:[[GenericMTP|Samsung YP-XXX]]&lt;br /&gt;
&lt;br /&gt;
==SanDisk==&lt;br /&gt;
:[[MTPSansa|Sansa eXXX]]&lt;br /&gt;
:[[MTPSansa|Sansa Fuze]]&lt;br /&gt;
:[[MTPSansa|Sansa M250]]&lt;br /&gt;
:[[MTPSansa|Sandisk Sansa]]&lt;br /&gt;
:[[MTPSansa|Sandisk Connect 4Gb]]&lt;br /&gt;
:[[MTPSansa|Sandisk Sansa Clip]]&lt;br /&gt;
:[[MTPSansa|Sandisk E250]]&lt;br /&gt;
&lt;br /&gt;
==Toshiba==&lt;br /&gt;
:[[GenericMTP|Toshiba Gigabeat (works but firmware bug limits synch speed)]]&lt;br /&gt;
&lt;br /&gt;
==Trekstor==&lt;br /&gt;
:[[TrekstorVibez|Vibez]] (Set as either [[GenericMTP|MTP Device]] or as [[USBmass|MSC Device]])&lt;br /&gt;
&lt;br /&gt;
==Sony==&lt;br /&gt;
:[[USBmass|Sony Ericsson W302]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W600]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W800i]]&lt;br /&gt;
:[[USBmass|Sony Ericsson W880i]]&lt;br /&gt;
:[[GenericMTP|Sony Walkman NWZ-A829]]&lt;br /&gt;
:[[GenericMTP|Sony Walkman NWZ-S638]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBSongData::SetPathByMask&amp;diff=8446</id>
		<title>ISDBSongData::SetPathByMask</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBSongData::SetPathByMask&amp;diff=8446"/>
		<updated>2013-09-26T16:47:10Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;{{MethodDeclaration|SDBSongData|ISDBSongData|Method SetPathByMask(Mask As String)}}  ===Method description===  Similar to Path property and RenameByMask method, but allows you to...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBSongData|ISDBSongData|Method SetPathByMask(Mask As String)}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Similar to Path property and RenameByMask method, but allows you to set path according to Mask without moving the file. The file itself is moved once UpdateDB is called.&lt;br /&gt;
&lt;br /&gt;
Example script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
Option Explicit&lt;br /&gt;
&lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim oMenuItem&lt;br /&gt;
&lt;br /&gt;
    Set oMenuItem = SDB.UI.AddMenuItem(SDB.UI.Menu_Pop_TrackList, 0, 0)&lt;br /&gt;
    oMenuItem.Caption = &amp;quot;PathByMask&amp;quot;&lt;br /&gt;
    oMenuItem.OnClickFunc = &amp;quot;Test&amp;quot;&lt;br /&gt;
    oMenuItem.UseScript = Script.ScriptPath&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub Test(oMenuItem)&lt;br /&gt;
    Dim oSongData   &lt;br /&gt;
    Set oSongData = SDB.SelectedSongList.Item(0)&lt;br /&gt;
    oSongData.SetPathByMask( SDB.Tools.UFText2Mask _&lt;br /&gt;
        (&amp;quot;C:\Music\&amp;lt;Genre&amp;gt;\&amp;lt;Album Artist&amp;gt;\&amp;lt;Album&amp;gt;\&amp;lt;Track#:2&amp;gt; - &amp;lt;Title&amp;gt;&amp;quot;))&lt;br /&gt;
    SDB.MessageBox oSongData.Path, mtInformation, Array(mbOK)&lt;br /&gt;
    oSongData.DiscardChanges&lt;br /&gt;
    SDB.MessageBox oSongData.Path, mtInformation, Array(mbOK)&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Added in MediaMonkey version 4.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBSongData|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBSongData|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBSongData&amp;diff=8445</id>
		<title>SDBSongData</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBSongData&amp;diff=8445"/>
		<updated>2013-09-26T16:45:56Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* ISDBSongData members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBSongData ==&lt;br /&gt;
&lt;br /&gt;
Object with all properties of a track. Corresponding Songs Table columns.&lt;br /&gt;
&lt;br /&gt;
To apply changes made to a SongData object, be sure to call one or more of the methods [[ISDBSongData::UpdateAlbum|UpdateAlbum]], [[ISDBSongData::UpdateArtist|UpdateArtist]], [[ISDBSongData::UpdateDB|UpdateDB]] and/or [[ISDBSongData::WriteTags|WriteTags]]. In some cases, you can call the [[ISDBSongList::UpdateAll|UpdateAll]] method of the SongList object containing the SongData object.&lt;br /&gt;
&lt;br /&gt;
=== ISDBSongData members ===&lt;br /&gt;
   &lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Type &lt;br /&gt;
! Description&lt;br /&gt;
!&lt;br /&gt;
! Tag Name&lt;br /&gt;
! Value Type&lt;br /&gt;
! Possible Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Actors|Actors]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Actors&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Album|Album]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBAlbum]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumArt|AlbumArt]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBAlbumArtList]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumArtistName|AlbumArtistName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|AlbumArtist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumName|AlbumName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Album &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Artist|Artist]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBArtist]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ArtistName|ArtistName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Artist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Author|Author]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Author &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|The Composer of the Song &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Band|Band]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Band &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Bitrate|Bitrate]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Bitrate &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Bookmark|Bookmark]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PlaybackPos &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::StartTime|StartTime]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|StartTime &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::StopTime|StopTime]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|StopTime &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SkipCount|SkipCount]] &lt;br /&gt;
|Property Get/Let&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SkipCount &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackType|TrackType]] &lt;br /&gt;
|Property Get/Let&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TrackType &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::BPM|BPM]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|BPM &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|Beats Per Minute &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Cached|Cached]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|CacheStatus &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::CachedPath|CachedPath]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|CacheName &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::CalculateGapData|CalculateGapData]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::canCrossfade|canCrossfade]] &lt;br /&gt;
|Property Get/Set&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Channels|Channels]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Stereo &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Comment|Comment]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Comment &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Conductor|Conductor]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Conductor &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Copyright|Copyright]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Copyright &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom1|Custom1]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom1 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom2|Custom2]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom2 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom3|Custom3]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom3 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom4|Custom4]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom4 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom5|Custom5]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom5 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Date|Date]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[[DateType|DATE]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DateAdded|DateAdded]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|DateAdded &lt;br /&gt;
|[[DateType|DATE]] &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DateDBModified|DateDBModified]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[[DateType|DATE]] &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Day|Day]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[7,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscNumber|DiscNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|MM2&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscNumberStr|DiscNumberStr]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|DiscNumber &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Director|Director]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Artist&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Encoder|Encoder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Encoder &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::EpisodeNumber|EpisodeNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|EpisodeNumber&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::FileLength|FileLength]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|FileLength &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::FileModified|FileModified]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|FileModified &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::GaplessBytes|GaplessBytes]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|GaplessBytes &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Genre|Genre]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Genre &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::GetCopy|GetCopy]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Grouping|Grouping]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|GroupDesc &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ID|ID]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ID &lt;br /&gt;
|INTEGER &lt;br /&gt;
|AUTOINCREMENT (1 to inf.) &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::InvolvedPeople|InvolvedPeople]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|InvolvedPeople &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::isBookmarkable|isBookmarkable]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::isShuffleIgnored|isShuffleIgnored]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::IsntInDB|IsntInDB]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|Dynamic Check&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ISRC|ISRC]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ISRC &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::LastPlayed|LastPlayed]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|LastTimePlayed &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Leveling|Leveling]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|NormalizeTrack &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::LevelingAlbum|LevelingAlbum]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|NormalizeAlbum &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Lyricist|Lyricist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Lyricist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Lyrics|Lyrics]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Lyrics &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Media|Media]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|IDMedia &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MediaLabel|MediaLabel]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MetadataFromFilename|MetadataFromFilename]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Month|Month]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[5,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Mood|Mood]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Mood &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MusicComposer|MusicComposer]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|Use Author&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Occasion|Occasion]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Occasion &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalArtist|OriginalArtist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigArtist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalLyricist|OriginalLyricist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigLyricist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalTitle|OriginalTitle]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigTitle &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalYear|OriginalYear]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[1,4]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalMonth|OriginalMonth]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[5,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalDay|OriginalDay]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[7,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ParseText|ParseText]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ParentalRating|ParentalRating]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ParentalRating&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Path|Path]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongPath &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SetPathByMask|SetPathByMask]] &lt;br /&gt;
|Method&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongPath &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.1&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PeakValue|PeakValue]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|REAL&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PlayCounter|PlayCounter]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PlayCounter &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PlaylistOrder|PlaylistOrder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|Dynamic Check&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PostGap|PostGap]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PostGap &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PreGap|PreGap]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PreGap &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Preview|Preview]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PreviewPath|PreviewPath]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PreviewName &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Producer|Producer]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Producer&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Publisher|Publisher]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Publisher &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Quality|Quality]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Quality &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Rating|Rating]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Rating &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::RatingString|RatingString]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|Rating (Not Used?)&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ReadTags|ReadTags]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ReadTagsAsExt|ReadTagsAsExt]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::RenameByMask|RenameByMask]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SampleRate|SampleRate]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SamplingFrequency &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Series|Series]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Album&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SeasonNumber|SeasonNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SeasonNumber&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongID|SongID]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|Internal Use Only&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongLength|SongLength]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongLength &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongLengthString|SongLengthString]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|SongLength Formatted&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Tempo|Tempo]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Tempo &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Title|Title]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongTitle &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TotalSamples|TotalSamples]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TotalSamples &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackOrder|TrackOrder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|MM2&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackOrderStr|TrackOrderStr]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TrackNumber (TrackOrder), formatted (may have leading 0)&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateAlbum|UpdateAlbum]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateArtist|UpdateArtist]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateDB|UpdateDB]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscardChanges|DiscardChanges]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Reverts changes made before calling UpdateDB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.1&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::VBR|VBR]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|VBR &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::WriteTags|WriteTags]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Year|Year]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[1,4] &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MarkPlayed|MarkPlayed]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Time &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBSongData|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBSongData::PathByMask&amp;diff=8444</id>
		<title>ISDBSongData::PathByMask</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBSongData::PathByMask&amp;diff=8444"/>
		<updated>2013-09-26T16:25:50Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBSongData|ISDBSongData|Property Let PathByMask As String}}&lt;br /&gt;
&lt;br /&gt;
===Property description===&lt;br /&gt;
&lt;br /&gt;
Similar to Path property, but allows you to set path according to Mask. The file itself is moved once UpdateDB is called.&lt;br /&gt;
&lt;br /&gt;
Example script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
Option Explicit&lt;br /&gt;
&lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim oMenuItem&lt;br /&gt;
&lt;br /&gt;
    Set oMenuItem = SDB.UI.AddMenuItem(SDB.UI.Menu_Pop_TrackList, 0, 0)&lt;br /&gt;
    oMenuItem.Caption = &amp;quot;PathByMask&amp;quot;&lt;br /&gt;
    oMenuItem.OnClickFunc = &amp;quot;Test&amp;quot;&lt;br /&gt;
    oMenuItem.UseScript = Script.ScriptPath&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub Test(oMenuItem)&lt;br /&gt;
    Dim oSongData   &lt;br /&gt;
    Set oSongData = SDB.SelectedSongList.Item(0)&lt;br /&gt;
    oSongData.PathByMask = SDB.Tools.UFText2Mask _&lt;br /&gt;
        (&amp;quot;C:\Music\&amp;lt;Genre&amp;gt;\&amp;lt;Album Artist&amp;gt;\&amp;lt;Album&amp;gt;\&amp;lt;Track#:2&amp;gt; - &amp;lt;Title&amp;gt;&amp;quot;)&lt;br /&gt;
    SDB.MessageBox oSongData.Path, mtInformation, Array(mbOK)&lt;br /&gt;
    oSongData.DiscardChanges&lt;br /&gt;
    SDB.MessageBox oSongData.Path, mtInformation, Array(mbOK)&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Added in MediaMonkey version 4.1&lt;br /&gt;
&lt;br /&gt;
Note: Can be used also as SetPathByMask() method.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBSongData|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBSongData|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBApplication::RunningAsService&amp;diff=8443</id>
		<title>ISDBApplication::RunningAsService</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBApplication::RunningAsService&amp;diff=8443"/>
		<updated>2013-09-26T15:18:36Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;{{MethodDeclaration|SDBApplication|ISDBApplication|Property Get RunningAsService As Boolean}}  ===Property description===  Returns &amp;lt;tt&amp;gt;TRUE&amp;lt;/tt&amp;gt; if MediaMonkey is running on back...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBApplication|ISDBApplication|Property Get RunningAsService As Boolean}}&lt;br /&gt;
&lt;br /&gt;
===Property description===&lt;br /&gt;
&lt;br /&gt;
Returns &amp;lt;tt&amp;gt;TRUE&amp;lt;/tt&amp;gt; if MediaMonkey is running on background as service (the service is installed via Media Sharing -&amp;gt; [Install as Service...] button).&lt;br /&gt;
&lt;br /&gt;
{{Introduced|4.1}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBApplication|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBApplication|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBApplication&amp;diff=8442</id>
		<title>SDBApplication</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBApplication&amp;diff=8442"/>
		<updated>2013-09-26T15:16:21Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* ISDBApplication members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBApplication ==&lt;br /&gt;
&lt;br /&gt;
This is the main MediaMonkey scripting object that you initially have accessible as global &amp;lt;tt&amp;gt;SDB&amp;lt;/tt&amp;gt; variable in your scripts launched from MediaMonkey. All your communication with MediaMonkey should start here, you can get references to other objects from properties of this object. &lt;br /&gt;
&lt;br /&gt;
Object is exposed to ActiveX under name &amp;lt;tt&amp;gt;SongsDB.SDBApplication&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Another global variable also accessibl in scripts is &amp;lt;tt&amp;gt;Script&amp;lt;/tt&amp;gt;, pointing to [[SDBScriptControl]] object.&lt;br /&gt;
&lt;br /&gt;
=== ISDBApplication members ===&lt;br /&gt;
   &lt;br /&gt;
{{MethodsList &lt;br /&gt;
|[[ISDBApplication::AllVisibleSongList|AllVisibleSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::ApplicationPath|ApplicationPath]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::EqualizerPath|EqualizerPath]] |Property Get | From 3.1 beta 1&lt;br /&gt;
|[[ISDBApplication::IconsPath|IconsPath]] |Property Get | From 3.1 beta 1&lt;br /&gt;
|[[ISDBApplication::PluginsPath|PluginsPath]] |Property Get | From 3.1 beta 1 &lt;br /&gt;
|[[ISDBApplication::CurrentAddonInstallRoot|CurrentAddonInstallRoot]] |Property Get |  From 4.0&lt;br /&gt;
|[[ISDBApplication::ScriptsPath|ScriptsPath]] |Property Get | From 3.1 beta 1 &lt;br /&gt;
|[[ISDBApplication::SkinsPath|SkinsPath]] |Property Get | From 3.1 beta 1&lt;br /&gt;
|[[ISDBApplication::CommonDialog|CommonDialog]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::CreateTimer|CreateTimer]] |Method |  &lt;br /&gt;
|[[ISDBApplication::CurrentSongList|CurrentSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::CursorType|CursorType]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::Database|Database]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::Device|Device]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::Format|Format]] |Method |  &lt;br /&gt;
|[[ISDBApplication::IniFile|IniFile]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::IsKnownFiletype|IsKnownFiletype]] |Method | From 3.0&lt;br /&gt;
|[[ISDBApplication::IsRunning|IsRunning]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::InPartyMode|InPartyMode]] |Property Get |  From 4.1&lt;br /&gt;
|[[ISDBApplication::RunningAsService|RunningAsService]] |Property Get |  From 4.1&lt;br /&gt;
|[[ISDBApplication::Localize|Localize]] |Method |  &lt;br /&gt;
|[[ISDBApplication::LocalizedFormat|LocalizedFormat]] |Method |  &lt;br /&gt;
|[[ISDBApplication::LocalizeGen|LocalizeGen]] |Method |  &lt;br /&gt;
|[[ISDBApplication::MainTracksWindow|MainTracksWindow]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::MainTree|MainTree]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::MessageBox|MessageBox]] |Method |  &lt;br /&gt;
|[[ISDBApplication::MyMusicPath|MyMusicPath]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::NewSongData|NewSongData]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::NewSongList|NewSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::NewStringList|NewStringList]] |Property Get | From 3.0 &lt;br /&gt;
|[[ISDBApplication::Objects|Objects]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::Player|Player]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::PlaylistByTitle|PlaylistByTitle]] |Property Get |&lt;br /&gt;
|[[ISDBApplication::PlaylistByID|PlaylistByID]] |Property Get | From 4.0  &lt;br /&gt;
|[[ISDBApplication::ProcessMessages|ProcessMessages]] |Method |  &lt;br /&gt;
|[[ISDBApplication::Progress|Progress]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::RefreshScriptItems|RefreshScriptItems]] |Method | From 3.0&lt;br /&gt;
|[[ISDBApplication::RegisterIcon|RegisterIcon]] |Method |  &lt;br /&gt;
|[[ISDBApplication::RegisterIconHandle|RegisterIconHandle]] |Method |  &lt;br /&gt;
|[[ISDBApplication::Registry|Registry]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::SelectedSongList|SelectedSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::SelectFolder|SelectFolder]] |Method |  &lt;br /&gt;
|[[ISDBApplication::ShutdownAfterDisconnect|ShutdownAfterDisconnect]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::TemporaryFolder|TemporaryFolder]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::toASCII|toASCII]] |Method |  &lt;br /&gt;
|[[ISDBApplication::Tools|Tools]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::UI|UI]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionBuild|VersionBuild]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionHi|VersionHi]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionLo|VersionLo]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionRelease|VersionRelease]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionString|VersionString]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::ComServerUIActive|ComServerUIActive]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::WebControl|WebControl]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::Downloader|Downloader]] |Property Get | From 4.0 &lt;br /&gt;
|[[ISDBApplication::Collections|Collections]] |Property Get | From 4.0 &lt;br /&gt;
|[[ISDBApplication::VisibleCollectionsCount|VisibleCollectionsCount]] |Property Get | From 4.0&lt;br /&gt;
|[[ISDBApplication::VisibleCollectionID|VisibleCollectionID]] |Property Get | From 4.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== ISDBApplicationEvents members ===&lt;br /&gt;
   &lt;br /&gt;
{{MethodsList &lt;br /&gt;
|[[ISDBApplicationEvents::OnBeforeTracksMove|OnBeforeTracksMove]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnChangedSelection|OnChangedSelection]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnCompletePlaybackEnd|OnCompletePlaybackEnd]] |Event | From 4.0  &lt;br /&gt;
|[[ISDBApplicationEvents::OnDownloadFinished|OnDownloadFinished]] |Event | From 4.0&lt;br /&gt;
|[[ISDBApplicationEvents::OnFilterChange|OnFilterChange]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnIdle|OnIdle]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnNowPlayingModified|OnNowPlayingModified]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnNowPlayingSelectionChanged|OnNowPlayingSelectionChanged]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnOptionsChange|OnOptionsChange]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnPause|OnPause]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlay|OnPlay]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaybackEnd|OnPlaybackEnd]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnRepeatClicked|OnRepeatClicked]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnSeek|OnSeek]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnShuffleClicked|OnShuffleClicked]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnShutdown|OnShutdown]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnStop|OnStop]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackAdded|OnTrackAdded]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackConverted|OnTrackConverted]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackDeleting|OnTrackDeleting]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackDoubleClick|OnTrackDoubleClick]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackEnd|OnTrackEnd]] |Event | From 3.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListFilled|OnTrackListFilled]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListFilling|OnTrackListFilling]] |Event | From 3.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListModified|OnTrackListModified]] |Event | From 4.0  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListSelectionChanged|OnTrackListSelectionChanged]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackProperties|OnTrackProperties]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackSkipped|OnTrackSkipped]] |Event | From 4.0 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPartyModeEnabled|OnPartyModeEnabled]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnDeviceSyncStarted|OnDeviceSyncStarted]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnDeviceSyncCompleted|OnDeviceSyncCompleted]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaylistAdded|OnPlaylistAdded]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaylistRemoved|OnPlaylistRemoved]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaylistChanged|OnPlaylistChanged]] |Event | From 4.1 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBApplication|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBSongData::PathByMask&amp;diff=8441</id>
		<title>ISDBSongData::PathByMask</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBSongData::PathByMask&amp;diff=8441"/>
		<updated>2013-09-26T12:48:06Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;{{MethodDeclaration|SDBSongData|ISDBSongData|Property Let PathByMask As String}}  ===Property description===  Similar to Path property, but allows you to set path according to Ma...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBSongData|ISDBSongData|Property Let PathByMask As String}}&lt;br /&gt;
&lt;br /&gt;
===Property description===&lt;br /&gt;
&lt;br /&gt;
Similar to Path property, but allows you to set path according to Mask. The file itself is moved once UpdateDB is called.&lt;br /&gt;
&lt;br /&gt;
Example script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
Option Explicit&lt;br /&gt;
&lt;br /&gt;
Sub OnStartUp()&lt;br /&gt;
    Dim oMenuItem&lt;br /&gt;
&lt;br /&gt;
    Set oMenuItem = SDB.UI.AddMenuItem(SDB.UI.Menu_Pop_TrackList, 0, 0)&lt;br /&gt;
    oMenuItem.Caption = &amp;quot;PathByMask&amp;quot;&lt;br /&gt;
    oMenuItem.OnClickFunc = &amp;quot;Test&amp;quot;&lt;br /&gt;
    oMenuItem.UseScript = Script.ScriptPath&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub Test(oMenuItem)&lt;br /&gt;
    Dim oSongData   &lt;br /&gt;
    Set oSongData = SDB.SelectedSongList.Item(0)&lt;br /&gt;
    oSongData.PathByMask = SDB.Tools.UFText2Mask _&lt;br /&gt;
        (&amp;quot;C:\Music\&amp;lt;Genre&amp;gt;\&amp;lt;Album Artist&amp;gt;\&amp;lt;Album&amp;gt;\&amp;lt;Track#:2&amp;gt; - &amp;lt;Title&amp;gt;&amp;quot;)&lt;br /&gt;
    SDB.MessageBox oSongData.Path, mtInformation, Array(mbOK)&lt;br /&gt;
    oSongData.DiscardChanges&lt;br /&gt;
    SDB.MessageBox oSongData.Path, mtInformation, Array(mbOK)&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Added in MediaMonkey version 4.1&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBSongData|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBSongData|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBSongData&amp;diff=8440</id>
		<title>SDBSongData</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBSongData&amp;diff=8440"/>
		<updated>2013-09-26T12:40:31Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBSongData ==&lt;br /&gt;
&lt;br /&gt;
Object with all properties of a track. Corresponding Songs Table columns.&lt;br /&gt;
&lt;br /&gt;
To apply changes made to a SongData object, be sure to call one or more of the methods [[ISDBSongData::UpdateAlbum|UpdateAlbum]], [[ISDBSongData::UpdateArtist|UpdateArtist]], [[ISDBSongData::UpdateDB|UpdateDB]] and/or [[ISDBSongData::WriteTags|WriteTags]]. In some cases, you can call the [[ISDBSongList::UpdateAll|UpdateAll]] method of the SongList object containing the SongData object.&lt;br /&gt;
&lt;br /&gt;
=== ISDBSongData members ===&lt;br /&gt;
   &lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Type &lt;br /&gt;
! Description&lt;br /&gt;
!&lt;br /&gt;
! Tag Name&lt;br /&gt;
! Value Type&lt;br /&gt;
! Possible Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Actors|Actors]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Actors&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Album|Album]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBAlbum]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumArt|AlbumArt]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBAlbumArtList]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumArtistName|AlbumArtistName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|AlbumArtist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumName|AlbumName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Album &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Artist|Artist]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBArtist]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ArtistName|ArtistName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Artist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Author|Author]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Author &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|The Composer of the Song &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Band|Band]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Band &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Bitrate|Bitrate]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Bitrate &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Bookmark|Bookmark]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PlaybackPos &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::StartTime|StartTime]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|StartTime &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::StopTime|StopTime]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|StopTime &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SkipCount|SkipCount]] &lt;br /&gt;
|Property Get/Let&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SkipCount &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackType|TrackType]] &lt;br /&gt;
|Property Get/Let&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TrackType &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::BPM|BPM]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|BPM &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|Beats Per Minute &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Cached|Cached]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|CacheStatus &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::CachedPath|CachedPath]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|CacheName &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::CalculateGapData|CalculateGapData]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::canCrossfade|canCrossfade]] &lt;br /&gt;
|Property Get/Set&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Channels|Channels]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Stereo &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Comment|Comment]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Comment &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Conductor|Conductor]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Conductor &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Copyright|Copyright]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Copyright &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom1|Custom1]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom1 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom2|Custom2]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom2 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom3|Custom3]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom3 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom4|Custom4]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom4 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom5|Custom5]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom5 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Date|Date]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[[DateType|DATE]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DateAdded|DateAdded]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|DateAdded &lt;br /&gt;
|[[DateType|DATE]] &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DateDBModified|DateDBModified]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[[DateType|DATE]] &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Day|Day]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[7,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscNumber|DiscNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|MM2&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscNumberStr|DiscNumberStr]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|DiscNumber &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Director|Director]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Artist&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Encoder|Encoder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Encoder &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::EpisodeNumber|EpisodeNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|EpisodeNumber&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::FileLength|FileLength]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|FileLength &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::FileModified|FileModified]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|FileModified &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::GaplessBytes|GaplessBytes]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|GaplessBytes &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Genre|Genre]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Genre &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::GetCopy|GetCopy]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Grouping|Grouping]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|GroupDesc &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ID|ID]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ID &lt;br /&gt;
|INTEGER &lt;br /&gt;
|AUTOINCREMENT (1 to inf.) &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::InvolvedPeople|InvolvedPeople]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|InvolvedPeople &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::isBookmarkable|isBookmarkable]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::isShuffleIgnored|isShuffleIgnored]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::IsntInDB|IsntInDB]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|Dynamic Check&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ISRC|ISRC]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ISRC &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::LastPlayed|LastPlayed]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|LastTimePlayed &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Leveling|Leveling]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|NormalizeTrack &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::LevelingAlbum|LevelingAlbum]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|NormalizeAlbum &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Lyricist|Lyricist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Lyricist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Lyrics|Lyrics]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Lyrics &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Media|Media]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|IDMedia &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MediaLabel|MediaLabel]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MetadataFromFilename|MetadataFromFilename]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Month|Month]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[5,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Mood|Mood]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Mood &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MusicComposer|MusicComposer]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|Use Author&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Occasion|Occasion]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Occasion &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalArtist|OriginalArtist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigArtist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalLyricist|OriginalLyricist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigLyricist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalTitle|OriginalTitle]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigTitle &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalYear|OriginalYear]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[1,4]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalMonth|OriginalMonth]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[5,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalDay|OriginalDay]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[7,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ParseText|ParseText]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ParentalRating|ParentalRating]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ParentalRating&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Path|Path]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongPath &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PathByMask|PathByMask]] &lt;br /&gt;
|Property Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongPath &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.1&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PeakValue|PeakValue]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|REAL&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PlayCounter|PlayCounter]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PlayCounter &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PlaylistOrder|PlaylistOrder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|Dynamic Check&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PostGap|PostGap]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PostGap &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PreGap|PreGap]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PreGap &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Preview|Preview]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PreviewPath|PreviewPath]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PreviewName &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Producer|Producer]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Producer&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Publisher|Publisher]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Publisher &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Quality|Quality]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Quality &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Rating|Rating]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Rating &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::RatingString|RatingString]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|Rating (Not Used?)&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ReadTags|ReadTags]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ReadTagsAsExt|ReadTagsAsExt]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::RenameByMask|RenameByMask]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SampleRate|SampleRate]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SamplingFrequency &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Series|Series]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Album&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SeasonNumber|SeasonNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SeasonNumber&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongID|SongID]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|Internal Use Only&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongLength|SongLength]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongLength &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongLengthString|SongLengthString]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|SongLength Formatted&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Tempo|Tempo]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Tempo &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Title|Title]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongTitle &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TotalSamples|TotalSamples]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TotalSamples &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackOrder|TrackOrder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|MM2&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackOrderStr|TrackOrderStr]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TrackNumber (TrackOrder), formatted (may have leading 0)&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateAlbum|UpdateAlbum]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateArtist|UpdateArtist]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateDB|UpdateDB]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscardChanges|DiscardChanges]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Reverts changes made before calling UpdateDB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.1&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::VBR|VBR]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|VBR &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::WriteTags|WriteTags]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Year|Year]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[1,4] &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MarkPlayed|MarkPlayed]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Time &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBSongData|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBSongData&amp;diff=8437</id>
		<title>SDBSongData</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBSongData&amp;diff=8437"/>
		<updated>2013-08-14T16:30:07Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* ISDBSongData members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBSongData ==&lt;br /&gt;
&lt;br /&gt;
Object with all properties of a track. Corresponding Songs Table columns.&lt;br /&gt;
&lt;br /&gt;
To apply changes made to a SongData object, be sure to call one or more of the methods [[ISDBSongData::UpdateAlbum|UpdateAlbum]], [[ISDBSongData::UpdateArtist|UpdateArtist]], [[ISDBSongData::UpdateDB|UpdateDB]] and/or [[ISDBSongData::WriteTags|WriteTags]]. In some cases, you can call the [[ISDBSongList::UpdateAll|UpdateAll]] method of the SongList object containing the SongData object.&lt;br /&gt;
&lt;br /&gt;
=== ISDBSongData members ===&lt;br /&gt;
   &lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Type &lt;br /&gt;
! Description&lt;br /&gt;
!&lt;br /&gt;
! Tag Name&lt;br /&gt;
! Value Type&lt;br /&gt;
! Possible Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Actors|Actors]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Actors&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Album|Album]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBAlbum]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumArt|AlbumArt]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBAlbumArtList]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumArtistName|AlbumArtistName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|AlbumArtist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumName|AlbumName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Album &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Artist|Artist]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBArtist]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ArtistName|ArtistName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Artist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Author|Author]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Author &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|The Composer of the Song &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Band|Band]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Band &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Bitrate|Bitrate]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Bitrate &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Bookmark|Bookmark]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PlaybackPos &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::StartTime|StartTime]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|StartTime &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::StopTime|StopTime]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|StopTime &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SkipCount|SkipCount]] &lt;br /&gt;
|Property Get/Let&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SkipCount &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackType|TrackType]] &lt;br /&gt;
|Property Get/Let&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TrackType &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::BPM|BPM]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|BPM &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|Beats Per Minute &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Cached|Cached]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|CacheStatus &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::CachedPath|CachedPath]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|CacheName &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::CalculateGapData|CalculateGapData]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::canCrossfade|canCrossfade]] &lt;br /&gt;
|Property Get/Set&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Channels|Channels]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Stereo &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Comment|Comment]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Comment &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Conductor|Conductor]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Conductor &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Copyright|Copyright]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Copyright &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom1|Custom1]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom1 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom2|Custom2]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom2 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom3|Custom3]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom3 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom4|Custom4]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom4 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom5|Custom5]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom5 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Date|Date]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[[DateType|DATE]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DateAdded|DateAdded]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|DateAdded &lt;br /&gt;
|[[DateType|DATE]] &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DateDBModified|DateDBModified]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[[DateType|DATE]] &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Day|Day]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[7,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscNumber|DiscNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|MM2&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscNumberStr|DiscNumberStr]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|DiscNumber &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Director|Director]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Artist&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Encoder|Encoder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Encoder &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::EpisodeNumber|EpisodeNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|EpisodeNumber&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::FileLength|FileLength]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|FileLength &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::FileModified|FileModified]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|FileModified &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::GaplessBytes|GaplessBytes]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|GaplessBytes &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Genre|Genre]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Genre &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::GetCopy|GetCopy]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Grouping|Grouping]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|GroupDesc &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ID|ID]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ID &lt;br /&gt;
|INTEGER &lt;br /&gt;
|AUTOINCREMENT (1 to inf.) &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::InvolvedPeople|InvolvedPeople]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|InvolvedPeople &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::isBookmarkable|isBookmarkable]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::isShuffleIgnored|isShuffleIgnored]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::IsntInDB|IsntInDB]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|Dynamic Check&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ISRC|ISRC]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ISRC &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::LastPlayed|LastPlayed]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|LastTimePlayed &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Leveling|Leveling]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|NormalizeTrack &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::LevelingAlbum|LevelingAlbum]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|NormalizeAlbum &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Lyricist|Lyricist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Lyricist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Lyrics|Lyrics]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Lyrics &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Media|Media]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|IDMedia &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MediaLabel|MediaLabel]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MetadataFromFilename|MetadataFromFilename]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Month|Month]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[5,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Mood|Mood]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Mood &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MusicComposer|MusicComposer]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|Use Author&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Occasion|Occasion]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Occasion &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalArtist|OriginalArtist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigArtist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalLyricist|OriginalLyricist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigLyricist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalTitle|OriginalTitle]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigTitle &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalYear|OriginalYear]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[1,4]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalMonth|OriginalMonth]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[5,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalDay|OriginalDay]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[7,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ParseText|ParseText]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ParentalRating|ParentalRating]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ParentalRating&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Path|Path]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongPath &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PeakValue|PeakValue]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|REAL&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PlayCounter|PlayCounter]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PlayCounter &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PlaylistOrder|PlaylistOrder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|Dynamic Check&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PostGap|PostGap]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PostGap &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PreGap|PreGap]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PreGap &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Preview|Preview]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PreviewPath|PreviewPath]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PreviewName &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Producer|Producer]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Producer&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Publisher|Publisher]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Publisher &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Quality|Quality]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Quality &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Rating|Rating]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Rating &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::RatingString|RatingString]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|Rating (Not Used?)&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ReadTags|ReadTags]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ReadTagsAsExt|ReadTagsAsExt]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::RenameByMask|RenameByMask]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SampleRate|SampleRate]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SamplingFrequency &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Series|Series]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Album&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SeasonNumber|SeasonNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SeasonNumber&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongID|SongID]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|Internal Use Only&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongLength|SongLength]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongLength &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongLengthString|SongLengthString]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|SongLength Formatted&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Tempo|Tempo]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Tempo &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Title|Title]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongTitle &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TotalSamples|TotalSamples]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TotalSamples &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackOrder|TrackOrder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|MM2&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackOrderStr|TrackOrderStr]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TrackNumber (TrackOrder), formatted (may have leading 0)&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateAlbum|UpdateAlbum]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateArtist|UpdateArtist]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateDB|UpdateDB]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscardChanges|DiscardChanges]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Reverts changes made before calling UpdateDB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.1&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::VBR|VBR]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|VBR &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::WriteTags|WriteTags]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Year|Year]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[1,4] &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MarkPlayed|MarkPlayed]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Time &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBSongData|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBSongData&amp;diff=8436</id>
		<title>SDBSongData</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBSongData&amp;diff=8436"/>
		<updated>2013-08-14T16:23:47Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* ISDBSongData members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBSongData ==&lt;br /&gt;
&lt;br /&gt;
Object with all properties of a track. Corresponding Songs Table columns.&lt;br /&gt;
&lt;br /&gt;
To apply changes made to a SongData object, be sure to call one or more of the methods [[ISDBSongData::UpdateAlbum|UpdateAlbum]], [[ISDBSongData::UpdateArtist|UpdateArtist]], [[ISDBSongData::UpdateDB|UpdateDB]] and/or [[ISDBSongData::WriteTags|WriteTags]]. In some cases, you can call the [[ISDBSongList::UpdateAll|UpdateAll]] method of the SongList object containing the SongData object.&lt;br /&gt;
&lt;br /&gt;
=== ISDBSongData members ===&lt;br /&gt;
   &lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Type &lt;br /&gt;
! Description&lt;br /&gt;
!&lt;br /&gt;
! Tag Name&lt;br /&gt;
! Value Type&lt;br /&gt;
! Possible Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Album|Album]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBAlbum]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumArt|AlbumArt]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBAlbumArtList]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumArtistName|AlbumArtistName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|AlbumArtist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::AlbumName|AlbumName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Album &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Artist|Artist]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|[[SDBArtist]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ArtistName|ArtistName]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Artist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Author|Author]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Author &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|The Composer of the Song &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Band|Band]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Band &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Bitrate|Bitrate]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Bitrate &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Bookmark|Bookmark]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PlaybackPos &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::StartTime|StartTime]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|StartTime &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::StopTime|StopTime]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|StopTime &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SkipCount|SkipCount]] &lt;br /&gt;
|Property Get/Let&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SkipCount &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackType|TrackType]] &lt;br /&gt;
|Property Get/Let&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TrackType &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::BPM|BPM]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|BPM &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|Beats Per Minute &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Cached|Cached]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|CacheStatus &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::CachedPath|CachedPath]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|CacheName &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::CalculateGapData|CalculateGapData]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::canCrossfade|canCrossfade]] &lt;br /&gt;
|Property Get/Set&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Channels|Channels]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Stereo &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Comment|Comment]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Comment &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Conductor|Conductor]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Conductor &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Copyright|Copyright]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Copyright &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom1|Custom1]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom1 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom2|Custom2]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom2 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom3|Custom3]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom3 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom4|Custom4]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom4 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Custom5|Custom5]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Custom5 &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Date|Date]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[[DateType|DATE]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DateAdded|DateAdded]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|DateAdded &lt;br /&gt;
|[[DateType|DATE]] &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DateDBModified|DateDBModified]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[[DateType|DATE]] &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Day|Day]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[7,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscNumber|DiscNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|MM2&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscNumberStr|DiscNumberStr]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|DiscNumber &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Encoder|Encoder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Encoder &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::FileLength|FileLength]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|FileLength &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::FileModified|FileModified]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|FileModified &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::GaplessBytes|GaplessBytes]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|GaplessBytes &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Genre|Genre]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Genre &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::GetCopy|GetCopy]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Grouping|Grouping]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|GroupDesc &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ID|ID]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ID &lt;br /&gt;
|INTEGER &lt;br /&gt;
|AUTOINCREMENT (1 to inf.) &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::InvolvedPeople|InvolvedPeople]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|InvolvedPeople &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::isBookmarkable|isBookmarkable]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::isShuffleIgnored|isShuffleIgnored]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::IsntInDB|IsntInDB]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|BOOLEAN&lt;br /&gt;
|&lt;br /&gt;
|Dynamic Check&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ISRC|ISRC]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ISRC &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::LastPlayed|LastPlayed]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|LastTimePlayed &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Leveling|Leveling]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|NormalizeTrack &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::LevelingAlbum|LevelingAlbum]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|NormalizeAlbum &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Lyricist|Lyricist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Lyricist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Lyrics|Lyrics]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Lyrics &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Media|Media]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|IDMedia &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MediaLabel|MediaLabel]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MetadataFromFilename|MetadataFromFilename]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Month|Month]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[5,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Mood|Mood]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Mood &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MusicComposer|MusicComposer]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|Use Author&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Occasion|Occasion]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Occasion &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalArtist|OriginalArtist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigArtist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalLyricist|OriginalLyricist]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigLyricist &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalTitle|OriginalTitle]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigTitle &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalYear|OriginalYear]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[1,4]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalMonth|OriginalMonth]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[5,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::OriginalDay|OriginalDay]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|OrigYear[7,2]&lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ParseText|ParseText]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Path|Path]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongPath &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PeakValue|PeakValue]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|REAL&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PlayCounter|PlayCounter]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PlayCounter &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PlaylistOrder|PlaylistOrder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|Dynamic Check&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PostGap|PostGap]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PostGap &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PreGap|PreGap]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PreGap &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Preview|Preview]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::PreviewPath|PreviewPath]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|PreviewName &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Publisher|Publisher]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Publisher &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Quality|Quality]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Quality &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Rating|Rating]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Rating &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::RatingString|RatingString]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|Rating (Not Used?)&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ReadTags|ReadTags]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ReadTagsAsExt|ReadTagsAsExt]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::RenameByMask|RenameByMask]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SampleRate|SampleRate]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SamplingFrequency &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongID|SongID]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|Internal Use Only&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongLength|SongLength]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongLength &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SongLengthString|SongLengthString]] &lt;br /&gt;
|Property Get &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|TEXT&lt;br /&gt;
|&lt;br /&gt;
|SongLength Formatted&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Tempo|Tempo]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Tempo &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Title|Title]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SongTitle &lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TotalSamples|TotalSamples]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TotalSamples &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackOrder|TrackOrder]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|INTEGER&lt;br /&gt;
|&lt;br /&gt;
|MM2&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::TrackOrderStr|TrackOrderStr]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TrackNumber (TrackOrder), formatted (may have leading 0)&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateAlbum|UpdateAlbum]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateArtist|UpdateArtist]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::UpdateDB|UpdateDB]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::DiscardChanges|DiscardChanges]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Reverts changes made before calling UpdateDB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.1&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::VBR|VBR]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|VBR &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::WriteTags|WriteTags]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Year|Year]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Year[1,4] &lt;br /&gt;
|INTEGER &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::MarkPlayed|MarkPlayed]] &lt;br /&gt;
|Method &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Time &lt;br /&gt;
|REAL &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Series|Series]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Album&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Director|Director]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Artist&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Producer|Producer]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Producer&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::Actors|Actors]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Actors&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::ParentalRating|ParentalRating]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ParentalRating&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::EpisodeNumber|EpisodeNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|EpisodeNumber&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
|[[ISDBSongData::SeasonNumber|SeasonNumber]] &lt;br /&gt;
|Property Get/Let &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|SeasonNumber&lt;br /&gt;
|TEXT &lt;br /&gt;
|&lt;br /&gt;
|From MM version 4.0&lt;br /&gt;
|-&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBSongData|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBPlaylist::ChildPlaylistExists&amp;diff=8434</id>
		<title>ISDBPlaylist::ChildPlaylistExists</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBPlaylist::ChildPlaylistExists&amp;diff=8434"/>
		<updated>2013-07-26T14:40:47Z</updated>

		<summary type="html">&lt;p&gt;Ludek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBPlaylist|ISDBPlaylist|Function ChildPlaylistExists(Title As String) As Boolean}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |Title |String |Title of the child playlist}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Returns true if a sub-playlist of the given Title exists.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBPlaylist|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBPlaylist|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBPlaylist::ChildPlaylistExists&amp;diff=8433</id>
		<title>ISDBPlaylist::ChildPlaylistExists</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBPlaylist::ChildPlaylistExists&amp;diff=8433"/>
		<updated>2013-07-26T14:38:53Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;===Parameters===  {{MethodParameters   |Title |String |Title of the child playlist}}  ===Method description===  Returns true if a sub-playlist of the given Title exists.   [[Cate...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |Title |String |Title of the child playlist}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Returns true if a sub-playlist of the given Title exists.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBPlaylist|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBPlaylist|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBPlaylist&amp;diff=8432</id>
		<title>SDBPlaylist</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBPlaylist&amp;diff=8432"/>
		<updated>2013-07-26T14:37:19Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* ISDBPlaylist members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBPlaylist ==&lt;br /&gt;
&lt;br /&gt;
Object represents a playlist and allows its manipulations including adding or removing tracks and querying child playlists. Playlists are stored in a tree structure. Root playlist can be retrieved using [[ISDBApplication::PlaylistByID|SDB.PlaylistByID]] method.&lt;br /&gt;
&lt;br /&gt;
=== ISDBPlaylist members ===&lt;br /&gt;
   &lt;br /&gt;
{{MethodsList &lt;br /&gt;
|[[ISDBPlaylist::AddTrack|AddTrack]] |Method |  &lt;br /&gt;
|[[ISDBPlaylist::InsertTrack|InsertTrack]] |Method |  &lt;br /&gt;
|[[ISDBPlaylist::AddTrackById|AddTrackById]] |Method |  &lt;br /&gt;
|[[ISDBPlaylist::AddTracks|AddTracks]] |Method | Buggy before 3.0 &lt;br /&gt;
|[[ISDBPlaylist::InsertTracks|InsertTracks]] |Method | From 4.0 &lt;br /&gt;
|[[ISDBPlaylist::ChildPlaylists|ChildPlaylists]] |Property Get |  &lt;br /&gt;
|[[ISDBPlaylist::Clear|Clear]] |Method |  &lt;br /&gt;
|[[ISDBPlaylist::CreateChildPlaylist|CreateChildPlaylist]] |Method |  &lt;br /&gt;
|[[ISDBPlaylist::ChildPlaylistExists|ChildPlaylistExists]] |Method | From 4.1  &lt;br /&gt;
|[[ISDBPlaylist::Delete|Delete]] |Method |  &lt;br /&gt;
|[[ISDBPlaylist::ID|ID]] |Property Get |  &lt;br /&gt;
|[[ISDBPlaylist::isAutoplaylist|isAutoplaylist]] |Property Get |  &lt;br /&gt;
|[[ISDBPlaylist::MoveTrack|MoveTrack]] |Method |  &lt;br /&gt;
|[[ISDBPlaylist::RemoveTrack|RemoveTrack]] |Method |  &lt;br /&gt;
|[[ISDBPlaylist::RemoveTrackNoConfirmation|RemoveTrackNoConfirmation]] |Method |  From 4.0&lt;br /&gt;
|[[ISDBPlaylist::Title|Title]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBPlaylist::Tracks|Tracks]] |Property Get |  &lt;br /&gt;
|[[ISDBPlaylist::LastModified|LastModified]] |Property Get |  From 4.1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBPlaylist|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBPlaylist::CreateChildPlaylist&amp;diff=8431</id>
		<title>ISDBPlaylist::CreateChildPlaylist</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBPlaylist::CreateChildPlaylist&amp;diff=8431"/>
		<updated>2013-07-26T14:36:07Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* Method description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MethodDeclaration|SDBPlaylist|ISDBPlaylist|Function CreateChildPlaylist(Title As String) As Object}}&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |Title |String |Title of the playlist to be created.}}&lt;br /&gt;
&lt;br /&gt;
===Method description===&lt;br /&gt;
&lt;br /&gt;
Creates a new sub-playlists of this playlist with the given Title. Reference to the newly created playlist is returned.&lt;br /&gt;
If playlist with same Title already exists, then reference to the existing playlist is returned. &lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBPlaylist|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBPlaylist|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBApplicationEvents::OnPlaylistChanged&amp;diff=8430</id>
		<title>ISDBApplicationEvents::OnPlaylistChanged</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBApplicationEvents::OnPlaylistChanged&amp;diff=8430"/>
		<updated>2013-07-15T19:54:08Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;===Parameters===  {{MethodParameters   |Playlist |SDBPlaylist |Playlist changed in library.}}  ===Event description===  This event is called when a playlist in Library is cha...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |Playlist |[[SDBPlaylist]] |Playlist changed in library.}}&lt;br /&gt;
&lt;br /&gt;
===Event description===&lt;br /&gt;
&lt;br /&gt;
This event is called when a playlist in Library is changed in some way (track is deleted or re-ordered).&lt;br /&gt;
&lt;br /&gt;
===Example code===                    &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;Sub OnStartUp()&lt;br /&gt;
  Script.RegisterEvent SDB, &amp;quot;OnPlaylistChanged&amp;quot;, &amp;quot;PlaylistChanged&amp;quot;&lt;br /&gt;
  Script.RegisterEvent SDB, &amp;quot;OnPlaylistAdded&amp;quot;, &amp;quot;PlaylistAdded&amp;quot;&lt;br /&gt;
  Script.RegisterEvent SDB, &amp;quot;OnPlaylistRemoved&amp;quot;, &amp;quot;PlaylistRemoved&amp;quot;    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub PlaylistChanged( Playlist)&lt;br /&gt;
 msgbox &amp;quot;Changed playlist &amp;quot; + Playlist.Title&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub PlaylistAdded( Playlist)&lt;br /&gt;
 msgbox &amp;quot;Added playlist &amp;quot; + Playlist.Title&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub PlaylistRemoved( Playlist)&lt;br /&gt;
 msgbox &amp;quot;Removed playlist &amp;quot; + Playlist.Title&lt;br /&gt;
End Sub&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBApplication|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBApplicationEvents|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBApplicationEvents::OnPlaylistRemoved&amp;diff=8429</id>
		<title>ISDBApplicationEvents::OnPlaylistRemoved</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBApplicationEvents::OnPlaylistRemoved&amp;diff=8429"/>
		<updated>2013-07-15T19:52:20Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;===Parameters===  {{MethodParameters   |Playlist |SDBPlaylist | Playlist to be removed from library.}}  ===Event description===  This event is called when a playlist is delet...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |Playlist |[[SDBPlaylist]] | Playlist to be removed from library.}}&lt;br /&gt;
&lt;br /&gt;
===Event description===&lt;br /&gt;
&lt;br /&gt;
This event is called when a playlist is deleting from library.&lt;br /&gt;
&lt;br /&gt;
===Example code===                    &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;Sub OnStartUp()&lt;br /&gt;
  Script.RegisterEvent SDB, &amp;quot;OnPlaylistChanged&amp;quot;, &amp;quot;PlaylistChanged&amp;quot;&lt;br /&gt;
  Script.RegisterEvent SDB, &amp;quot;OnPlaylistAdded&amp;quot;, &amp;quot;PlaylistAdded&amp;quot;&lt;br /&gt;
  Script.RegisterEvent SDB, &amp;quot;OnPlaylistRemoved&amp;quot;, &amp;quot;PlaylistRemoved&amp;quot;    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub PlaylistChanged( Playlist)&lt;br /&gt;
 msgbox &amp;quot;Changed playlist &amp;quot; + Playlist.Title&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub PlaylistAdded( Playlist)&lt;br /&gt;
 msgbox &amp;quot;Added playlist &amp;quot; + Playlist.Title&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub PlaylistRemoved( Playlist)&lt;br /&gt;
 msgbox &amp;quot;Removed playlist &amp;quot; + Playlist.Title&lt;br /&gt;
End Sub&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBApplication|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBApplicationEvents|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=ISDBApplicationEvents::OnPlaylistAdded&amp;diff=8428</id>
		<title>ISDBApplicationEvents::OnPlaylistAdded</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=ISDBApplicationEvents::OnPlaylistAdded&amp;diff=8428"/>
		<updated>2013-07-15T19:50:51Z</updated>

		<summary type="html">&lt;p&gt;Ludek: Created page with &amp;quot;===Parameters===  {{MethodParameters   |Playlist |SDBPlaylist |Newly created library playlist.}}  ===Event description===  This event is called when a new playlist is added t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Parameters===&lt;br /&gt;
&lt;br /&gt;
{{MethodParameters &lt;br /&gt;
 |Playlist |[[SDBPlaylist]] |Newly created library playlist.}}&lt;br /&gt;
&lt;br /&gt;
===Event description===&lt;br /&gt;
&lt;br /&gt;
This event is called when a new playlist is added to Library.&lt;br /&gt;
&lt;br /&gt;
===Example code===                    &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;Sub OnStartUp()&lt;br /&gt;
  Script.RegisterEvent SDB, &amp;quot;OnPlaylistChanged&amp;quot;, &amp;quot;PlaylistChanged&amp;quot;&lt;br /&gt;
  Script.RegisterEvent SDB, &amp;quot;OnPlaylistAdded&amp;quot;, &amp;quot;PlaylistAdded&amp;quot;&lt;br /&gt;
  Script.RegisterEvent SDB, &amp;quot;OnPlaylistRemoved&amp;quot;, &amp;quot;PlaylistRemoved&amp;quot;    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub PlaylistChanged( Playlist)&lt;br /&gt;
 msgbox &amp;quot;Changed playlist &amp;quot; + Playlist.Title&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub PlaylistAdded( Playlist)&lt;br /&gt;
 msgbox &amp;quot;Added playlist &amp;quot; + Playlist.Title&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub PlaylistRemoved( Playlist)&lt;br /&gt;
 msgbox &amp;quot;Removed playlist &amp;quot; + Playlist.Title&lt;br /&gt;
End Sub&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBApplication|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Interface ISDBApplicationEvents|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
	<entry>
		<id>https://www.mediamonkey.com/wiki/index.php?title=SDBApplication&amp;diff=8427</id>
		<title>SDBApplication</title>
		<link rel="alternate" type="text/html" href="https://www.mediamonkey.com/wiki/index.php?title=SDBApplication&amp;diff=8427"/>
		<updated>2013-07-15T19:47:48Z</updated>

		<summary type="html">&lt;p&gt;Ludek: /* ISDBApplicationEvents members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AutomationObjectsList}}&lt;br /&gt;
== CoClass SDBApplication ==&lt;br /&gt;
&lt;br /&gt;
This is the main MediaMonkey scripting object that you initially have accessible as global &amp;lt;tt&amp;gt;SDB&amp;lt;/tt&amp;gt; variable in your scripts launched from MediaMonkey. All your communication with MediaMonkey should start here, you can get references to other objects from properties of this object. &lt;br /&gt;
&lt;br /&gt;
Object is exposed to ActiveX under name &amp;lt;tt&amp;gt;SongsDB.SDBApplication&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Another global variable also accessibl in scripts is &amp;lt;tt&amp;gt;Script&amp;lt;/tt&amp;gt;, pointing to [[SDBScriptControl]] object.&lt;br /&gt;
&lt;br /&gt;
=== ISDBApplication members ===&lt;br /&gt;
   &lt;br /&gt;
{{MethodsList &lt;br /&gt;
|[[ISDBApplication::AllVisibleSongList|AllVisibleSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::ApplicationPath|ApplicationPath]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::EqualizerPath|EqualizerPath]] |Property Get | From 3.1 beta 1&lt;br /&gt;
|[[ISDBApplication::IconsPath|IconsPath]] |Property Get | From 3.1 beta 1&lt;br /&gt;
|[[ISDBApplication::PluginsPath|PluginsPath]] |Property Get | From 3.1 beta 1 &lt;br /&gt;
|[[ISDBApplication::CurrentAddonInstallRoot|CurrentAddonInstallRoot]] |Property Get |  From 4.0&lt;br /&gt;
|[[ISDBApplication::ScriptsPath|ScriptsPath]] |Property Get | From 3.1 beta 1 &lt;br /&gt;
|[[ISDBApplication::SkinsPath|SkinsPath]] |Property Get | From 3.1 beta 1&lt;br /&gt;
|[[ISDBApplication::CommonDialog|CommonDialog]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::CreateTimer|CreateTimer]] |Method |  &lt;br /&gt;
|[[ISDBApplication::CurrentSongList|CurrentSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::CursorType|CursorType]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::Database|Database]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::Device|Device]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::Format|Format]] |Method |  &lt;br /&gt;
|[[ISDBApplication::IniFile|IniFile]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::IsKnownFiletype|IsKnownFiletype]] |Method | From 3.0&lt;br /&gt;
|[[ISDBApplication::IsRunning|IsRunning]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::InPartyMode|InPartyMode]] |Property Get |  From 4.1&lt;br /&gt;
|[[ISDBApplication::Localize|Localize]] |Method |  &lt;br /&gt;
|[[ISDBApplication::LocalizedFormat|LocalizedFormat]] |Method |  &lt;br /&gt;
|[[ISDBApplication::LocalizeGen|LocalizeGen]] |Method |  &lt;br /&gt;
|[[ISDBApplication::MainTracksWindow|MainTracksWindow]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::MainTree|MainTree]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::MessageBox|MessageBox]] |Method |  &lt;br /&gt;
|[[ISDBApplication::MyMusicPath|MyMusicPath]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::NewSongData|NewSongData]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::NewSongList|NewSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::NewStringList|NewStringList]] |Property Get | From 3.0 &lt;br /&gt;
|[[ISDBApplication::Objects|Objects]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::Player|Player]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::PlaylistByTitle|PlaylistByTitle]] |Property Get |&lt;br /&gt;
|[[ISDBApplication::PlaylistByID|PlaylistByID]] |Property Get | From 4.0  &lt;br /&gt;
|[[ISDBApplication::ProcessMessages|ProcessMessages]] |Method |  &lt;br /&gt;
|[[ISDBApplication::Progress|Progress]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::RefreshScriptItems|RefreshScriptItems]] |Method | From 3.0&lt;br /&gt;
|[[ISDBApplication::RegisterIcon|RegisterIcon]] |Method |  &lt;br /&gt;
|[[ISDBApplication::RegisterIconHandle|RegisterIconHandle]] |Method |  &lt;br /&gt;
|[[ISDBApplication::Registry|Registry]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::SelectedSongList|SelectedSongList]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::SelectFolder|SelectFolder]] |Method |  &lt;br /&gt;
|[[ISDBApplication::ShutdownAfterDisconnect|ShutdownAfterDisconnect]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::TemporaryFolder|TemporaryFolder]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::toASCII|toASCII]] |Method |  &lt;br /&gt;
|[[ISDBApplication::Tools|Tools]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::UI|UI]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionBuild|VersionBuild]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionHi|VersionHi]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionLo|VersionLo]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionRelease|VersionRelease]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::VersionString|VersionString]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::ComServerUIActive|ComServerUIActive]] |Property Get/Let |  &lt;br /&gt;
|[[ISDBApplication::WebControl|WebControl]] |Property Get |  &lt;br /&gt;
|[[ISDBApplication::Downloader|Downloader]] |Property Get | From 4.0 &lt;br /&gt;
|[[ISDBApplication::Collections|Collections]] |Property Get | From 4.0 &lt;br /&gt;
|[[ISDBApplication::VisibleCollectionsCount|VisibleCollectionsCount]] |Property Get | From 4.0&lt;br /&gt;
|[[ISDBApplication::VisibleCollectionID|VisibleCollectionID]] |Property Get | From 4.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== ISDBApplicationEvents members ===&lt;br /&gt;
   &lt;br /&gt;
{{MethodsList &lt;br /&gt;
|[[ISDBApplicationEvents::OnBeforeTracksMove|OnBeforeTracksMove]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnChangedSelection|OnChangedSelection]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnCompletePlaybackEnd|OnCompletePlaybackEnd]] |Event | From 4.0  &lt;br /&gt;
|[[ISDBApplicationEvents::OnDownloadFinished|OnDownloadFinished]] |Event | From 4.0&lt;br /&gt;
|[[ISDBApplicationEvents::OnFilterChange|OnFilterChange]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnIdle|OnIdle]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnNowPlayingModified|OnNowPlayingModified]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnNowPlayingSelectionChanged|OnNowPlayingSelectionChanged]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnOptionsChange|OnOptionsChange]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnPause|OnPause]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlay|OnPlay]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaybackEnd|OnPlaybackEnd]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnRepeatClicked|OnRepeatClicked]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnSeek|OnSeek]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnShuffleClicked|OnShuffleClicked]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnShutdown|OnShutdown]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnStop|OnStop]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackAdded|OnTrackAdded]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackConverted|OnTrackConverted]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackDeleting|OnTrackDeleting]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackDoubleClick|OnTrackDoubleClick]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackEnd|OnTrackEnd]] |Event | From 3.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListFilled|OnTrackListFilled]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListFilling|OnTrackListFilling]] |Event | From 3.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListModified|OnTrackListModified]] |Event | From 4.0  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackListSelectionChanged|OnTrackListSelectionChanged]] |Event | From 3.1&lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackProperties|OnTrackProperties]] |Event |  &lt;br /&gt;
|[[ISDBApplicationEvents::OnTrackSkipped|OnTrackSkipped]] |Event | From 4.0 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPartyModeEnabled|OnPartyModeEnabled]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnDeviceSyncStarted|OnDeviceSyncStarted]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnDeviceSyncCompleted|OnDeviceSyncCompleted]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaylistAdded|OnPlaylistAdded]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaylistRemoved|OnPlaylistRemoved]] |Event | From 4.1 &lt;br /&gt;
|[[ISDBApplicationEvents::OnPlaylistChanged|OnPlaylistChanged]] |Event | From 4.1 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Automation objects|{{PAGENAME}}]]&lt;br /&gt;
[[Category:CoClass SDBApplication|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Ludek</name></author>
	</entry>
</feed>