Migrate to gradle project
This commit is contained in:
19
.gitignore
vendored
19
.gitignore
vendored
@@ -1,12 +1,7 @@
|
||||
*.class
|
||||
|
||||
# Mobile Tools for Java (J2ME)
|
||||
.mtj.tmp/
|
||||
|
||||
# Package Files #
|
||||
*.jar
|
||||
*.war
|
||||
*.ear
|
||||
|
||||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||
hs_err_pid*
|
||||
build
|
||||
bin
|
||||
.gradle
|
||||
.settings
|
||||
.project
|
||||
.classpath
|
||||
.maven
|
||||
|
||||
21
build.gradle
Normal file
21
build.gradle
Normal file
@@ -0,0 +1,21 @@
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'maven'
|
||||
apply plugin: 'eclipse'
|
||||
|
||||
group = 'com.dt'
|
||||
archivesBaseName = 'iTunesController'
|
||||
version = '0.2'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile 'net.sf.jacob-project:jacob:1.+'
|
||||
}
|
||||
|
||||
uploadArchives {
|
||||
repositories.mavenDeployer {
|
||||
repository(url: uri('.maven'))
|
||||
}
|
||||
}
|
||||
54
src/main/java/com/dt/iTunesController/ITArtwork.java
Normal file
54
src/main/java/com/dt/iTunesController/ITArtwork.java
Normal file
@@ -0,0 +1,54 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a artwork.
|
||||
*
|
||||
* Defines a single piece of artwork.
|
||||
*
|
||||
* Artwork is always associated with an individual track.
|
||||
* To add a piece of artwork to a track, use IITTrack::AddArtworkFromFile().
|
||||
* The IITTrack::Artwork property
|
||||
*
|
||||
* To get a collection of artwork associated with a track call
|
||||
* <code>ITTrack.getArtwork()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITArtwork extends ITObject {
|
||||
|
||||
public ITArtwork (Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this object.
|
||||
*/
|
||||
public void delete() {
|
||||
Dispatch.call(object, "Delete");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the kind of the object.
|
||||
* @return Returns the kind of the object.
|
||||
*/
|
||||
public ITArtworkFormat getFormat() {
|
||||
return ITArtworkFormat.values()[Dispatch.get(object, "Format").getInt()];
|
||||
}
|
||||
|
||||
// TODO: Comments
|
||||
|
||||
public boolean getIsDownloadedArtwork() {
|
||||
return Dispatch.get(object, "IsDownloadedArtwork").getBoolean();
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return Dispatch.get(object, "Description").getString();
|
||||
|
||||
}
|
||||
|
||||
public void SaveArtworkToFile(String filePath) {
|
||||
Dispatch.call(object, "SaveArtworkToFile",filePath);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a collection of Artwork objects.
|
||||
*
|
||||
* Note that collection indices are always 1-based.
|
||||
*
|
||||
* You can retrieve all the Artworks defined for a source using
|
||||
* <code>ITSource.getArtwork()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITArtworkCollection {
|
||||
|
||||
protected Dispatch object;
|
||||
|
||||
public ITArtworkCollection(Dispatch d) {
|
||||
object = d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of playlists in the collection.
|
||||
* @return Returns the number of playlists in the collection.
|
||||
*/
|
||||
public int getCount() {
|
||||
return Dispatch.get(object, "Count").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITArtwork object corresponding to the given index (1-based).
|
||||
* @param index Index of the playlist to retrieve, must be less than or
|
||||
* equal to <code>ITArtworkCollection.getCount()</code>.
|
||||
* @return Returns an ITArtwork object corresponding to the given index.
|
||||
* Will be set to NULL if no playlist could be retrieved.
|
||||
*/
|
||||
public ITArtwork getItem (int index) {
|
||||
Dispatch item = Dispatch.call(object, "Item", index).toDispatch();
|
||||
return new ITArtwork(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITArtwork object with the specified persistent ID. See the
|
||||
* documentation on ITObject for more information on persistent IDs.
|
||||
* @param highID The high 32 bits of the 64-bit persistent ID.
|
||||
* @param lowID The low 32 bits of the 64-bit persistent ID.
|
||||
* @return Returns an ITArtwork object with the specified persistent ID.
|
||||
* Will be set to NULL if no playlist could be retrieved.
|
||||
*/
|
||||
public ITArtwork getItemByPersistentID (int highID, int lowID) {
|
||||
Dispatch item = Dispatch.call(object, "ItemByPersistentID", highID, lowID).toDispatch();
|
||||
return new ITArtwork(item);
|
||||
}
|
||||
}
|
||||
13
src/main/java/com/dt/iTunesController/ITArtworkFormat.java
Normal file
13
src/main/java/com/dt/iTunesController/ITArtworkFormat.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the Artwork kind.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITArtworkFormat {
|
||||
ITArtworkFormatUnknown,
|
||||
ITArtworkFormatJPEG,
|
||||
ITArtworkFormatPNG,
|
||||
ITArtworkFormatBMP;
|
||||
}
|
||||
76
src/main/java/com/dt/iTunesController/ITAudioCDPlaylist.java
Normal file
76
src/main/java/com/dt/iTunesController/ITAudioCDPlaylist.java
Normal file
@@ -0,0 +1,76 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents an audio CD playlist.
|
||||
*
|
||||
* An audio CD playlist is always associated with an IITSource of kind
|
||||
* ITSourceKindAudioCD.
|
||||
*
|
||||
* You can retrieve all the playlists defined for a source using
|
||||
* <code>ITSource.getPlaylists()</code>.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITAudioCDPlaylist extends ITPlaylist {
|
||||
|
||||
public ITAudioCDPlaylist(Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the audio CD's artist.
|
||||
* @return Returns the audio CD's artist.
|
||||
*/
|
||||
public String getArtist() {
|
||||
return Dispatch.get(object, "Artist").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this audio CD is a compilation album.
|
||||
* @return Returns true if this audio CD is a compilation album.
|
||||
*/
|
||||
public boolean isCompilation() {
|
||||
return Dispatch.get(object, "Compilation").getBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the audio CD's composer.
|
||||
* @return Returns the audio CD's composer.
|
||||
*/
|
||||
public String getComposer() {
|
||||
return Dispatch.get(object, "Composer").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total number of discs in this CD's album.
|
||||
* @return Returns the total number of discs in this CD's album.
|
||||
*/
|
||||
public long getDiscCount() {
|
||||
return Dispatch.get(object, "DiscCount").getLong();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the CD disc in the source album.
|
||||
* @return Returns the index of the CD disc in the source album.
|
||||
*/
|
||||
public long getDiscNumber() {
|
||||
return Dispatch.get(object, "DiscNumber").getLong();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the audio CD's genre.
|
||||
* @return Returns the audio CD's genre.
|
||||
*/
|
||||
public String getGenre() {
|
||||
return Dispatch.get(object, "Genre").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reveals the CD playlist in the main browser window.
|
||||
*/
|
||||
public void reveal() {
|
||||
Dispatch.call(object, "Reveal");
|
||||
}
|
||||
|
||||
}
|
||||
45
src/main/java/com/dt/iTunesController/ITBrowserWindow.java
Normal file
45
src/main/java/com/dt/iTunesController/ITBrowserWindow.java
Normal file
@@ -0,0 +1,45 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents the main browser window.
|
||||
*
|
||||
* You can retrieve the main browser window using
|
||||
* <code>iTunes.BrowserWindow()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
|
||||
public class ITBrowserWindow extends ITWindow {
|
||||
|
||||
public ITBrowserWindow (Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the kind of the object.
|
||||
* @return Returns the kind of the object.
|
||||
*/
|
||||
public boolean getMiniPlayer() {
|
||||
return Dispatch.get(object, "MiniPlayer").getBoolean();
|
||||
}
|
||||
|
||||
// TODO: Comments
|
||||
|
||||
public ITTrackCollection getSelectedTracks() {
|
||||
Dispatch collection = Dispatch.call(object, "SelectedTracks").getDispatch();
|
||||
return new ITTrackCollection(collection);
|
||||
}
|
||||
|
||||
public ITPlaylist getSelectedPlaylist() {
|
||||
Dispatch playlist = Dispatch.get(object, "SelectedPlaylist").toDispatch();
|
||||
return new ITPlaylist(playlist);
|
||||
}
|
||||
|
||||
public void setSelectedPlaylist(ITPlaylist playlist) {
|
||||
Dispatch dispatchRef = playlist.fetchDispatch();
|
||||
Dispatch.put(object, "SelectedPlaylist", dispatchRef);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the reason the COM interface is being disabled.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITCOMDisabledReason {
|
||||
ITCOMDisabledReasonOther,
|
||||
ITCOMDisabledReasonDialog,
|
||||
ITCOMDisabledReasonQuitting;
|
||||
}
|
||||
236
src/main/java/com/dt/iTunesController/ITEQPreset.java
Normal file
236
src/main/java/com/dt/iTunesController/ITEQPreset.java
Normal file
@@ -0,0 +1,236 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents an equalizer preset.
|
||||
* You can retrieve or set the currently selected EQ preset using the
|
||||
* <code>iTunes.getCurrentEQPreset()<code> method.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITEQPreset {
|
||||
|
||||
protected Dispatch object;
|
||||
|
||||
public ITEQPreset(Dispatch d) {
|
||||
object = d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the EQ Preset (e.g. "Acoustic").
|
||||
* @return Returns the name of the EQ Preset (e.g. "Acoustic").
|
||||
*/
|
||||
public String getName() {
|
||||
return Dispatch.get(object, "Name").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the EQ preset can be modified.
|
||||
* @return True if the EQ preset can be modified.
|
||||
*/
|
||||
public boolean getModifiable() {
|
||||
return Dispatch.get(object, "Modifiable").getBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the equalizer preamp level (-12.0 db to +12.0 db).
|
||||
* @param level The new equalizer preamp level (-12.0 db to +12.0 db).
|
||||
*/
|
||||
public void setPreamp(double level) {
|
||||
Dispatch.put(object, "Preamp", level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the equalizer preamp level (-12.0db to +12.0db).
|
||||
* @return Returns the equalizer preamp level (-12.0db to +12.0db).
|
||||
*/
|
||||
public double getPreamp() {
|
||||
return Dispatch.get(object, "Preamp").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the equalizer 32Hz level (-12.0 db to +12.0 db).
|
||||
* @param level The new equalizer 32Hz level (-12.0 db to +12.0db).
|
||||
*/
|
||||
public void setBand1(double level) {
|
||||
Dispatch.put(object, "Band1", level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the equalizer 32Hz level (-12.0 db to +12.0 db).
|
||||
* @return Returns the equalizer 32Hz level (-12.0 db to +12.0 db).
|
||||
*/
|
||||
public double getBand1() {
|
||||
return Dispatch.get(object, "Band1").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the equalizer 64Hz level (-12.0 db to +12.0 db).
|
||||
* @param level The new equalizer 64Hz level (-12.0 db to +12.0db).
|
||||
*/
|
||||
public void setBand2(double level) {
|
||||
Dispatch.put(object, "Band2", level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the equalizer 64Hz level (-12.0 db to +12.0 db).
|
||||
* @return Returns the equalizer 64Hz level (-12.0 db to +12.0 db).
|
||||
*/
|
||||
public double getBand2() {
|
||||
return Dispatch.get(object, "Band2").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the equalizer 125Hz level (-12.0 db to +12.0 db).
|
||||
* @param level The new equalizer 125Hz level (-12.0 db to +12.0db).
|
||||
*/
|
||||
public void setBand3(double level) {
|
||||
Dispatch.put(object, "Band3", level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the equalizer 125Hz level (-12.0 db to +12.0 db).
|
||||
* @return Returns the equalizer 125Hz level (-12.0 db to +12.0 db).
|
||||
*/
|
||||
public double getBand3() {
|
||||
return Dispatch.get(object, "Band3").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the equalizer 250Hz level (-12.0 db to +12.0 db).
|
||||
* @param level The new equalizer 250Hz level (-12.0 db to +12.0db).
|
||||
*/
|
||||
public void setBand4(double level) {
|
||||
Dispatch.put(object, "Band4", level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the equalizer 250Hz level (-12.0 db to +12.0 db).
|
||||
* @return Returns the equalizer 250Hz level (-12.0 db to +12.0 db).
|
||||
*/
|
||||
public double getBand4() {
|
||||
return Dispatch.get(object, "Band4").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the equalizer 500Hz level (-12.0 db to +12.0 db).
|
||||
* @param level The new equalizer 500Hz level (-12.0 db to +12.0db).
|
||||
*/
|
||||
public void setBand5(double level) {
|
||||
Dispatch.put(object, "Band5", level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the equalizer 500Hz level (-12.0 db to +12.0 db).
|
||||
* @return Returns the equalizer 500Hz level (-12.0 db to +12.0 db).
|
||||
*/
|
||||
public double getBand5() {
|
||||
return Dispatch.get(object, "Band5").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the equalizer 1KHz level (-12.0 db to +12.0 db).
|
||||
* @param level The new equalizer 1KHz level (-12.0 db to +12.0db).
|
||||
*/
|
||||
public void setBand6(double level) {
|
||||
Dispatch.put(object, "Band6", level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the equalizer 1KHz level (-12.0 db to +12.0 db).
|
||||
* @return Returns the equalizer 1KHz level (-12.0 db to +12.0 db).
|
||||
*/
|
||||
public double getBand6() {
|
||||
return Dispatch.get(object, "Band6").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the equalizer 2KHz level (-12.0 db to +12.0 db).
|
||||
* @param level The new equalizer 2KHz level (-12.0 db to +12.0db).
|
||||
*/
|
||||
public void setBand7(double level) {
|
||||
Dispatch.put(object, "Band7", level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the equalizer 2KHz level (-12.0 db to +12.0 db).
|
||||
* @return Returns the equalizer 2KHz level (-12.0 db to +12.0 db).
|
||||
*/
|
||||
public double getBand7() {
|
||||
return Dispatch.get(object, "Band7").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the equalizer 4KHz level (-12.0 db to +12.0 db).
|
||||
* @param level The new equalizer 4KHz level (-12.0 db to +12.0db).
|
||||
*/
|
||||
public void setBand8(double level) {
|
||||
Dispatch.put(object, "Band8", level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the equalizer 4KHz level (-12.0 db to +12.0 db).
|
||||
* @return Returns the equalizer 4KHz level (-12.0 db to +12.0 db).
|
||||
*/
|
||||
public double getBand8() {
|
||||
return Dispatch.get(object, "Band8").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the equalizer 8KHz level (-12.0 db to +12.0 db).
|
||||
* @param level The new equalizer 8KHz level (-12.0 db to +12.0db).
|
||||
*/
|
||||
public void setBand9(double level) {
|
||||
Dispatch.put(object, "Band9", level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the equalizer 8KHz level (-12.0 db to +12.0 db).
|
||||
* @return Returns the equalizer 8KHz level (-12.0 db to +12.0 db).
|
||||
*/
|
||||
public double getBand9() {
|
||||
return Dispatch.get(object, "Band9").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the equalizer 16KHz level (-12.0 db to +12.0 db).
|
||||
* @param level The new equalizer 16KHz level (-12.0 db to +12.0db).
|
||||
*/
|
||||
public void setBand10(double level) {
|
||||
Dispatch.put(object, "Band10", level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the equalizer 16KHz level (-12.0 db to +12.0 db).
|
||||
* @return Returns the equalizer 16KHz level (-12.0 db to +12.0 db).
|
||||
*/
|
||||
public double getBand10() {
|
||||
return Dispatch.get(object, "Band10").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this EQ Preset.
|
||||
* Any EQ preset can be deleted, including built-in presets, except for the
|
||||
* Manual preset.
|
||||
* @param updateAllTracks If true, any tracks that use this EQ preet will be
|
||||
* set to have no assigned EQ preset.
|
||||
*/
|
||||
public void delete(boolean updateAllTracks) {
|
||||
Dispatch.call(object, "Delete", updateAllTracks);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rename this EQ Preset.
|
||||
* The name of any EQ preset can be changed, including built-in presets,
|
||||
* except for the Manual preset.
|
||||
* EQ preset names cannot start with leading spaces. If you specify a name
|
||||
* that starts with leading spaces they will be stripped out.
|
||||
* @param updateAllTracks If true, any tracks that use this EQ preet will be
|
||||
* updated with the new preset name.
|
||||
*/
|
||||
public void rename(String newName, boolean updateAllTracks) {
|
||||
Dispatch.call(object, "Rename", newName, updateAllTracks);
|
||||
}
|
||||
|
||||
}
|
||||
39
src/main/java/com/dt/iTunesController/ITFileOrCDTrack.java
Normal file
39
src/main/java/com/dt/iTunesController/ITFileOrCDTrack.java
Normal file
@@ -0,0 +1,39 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a file or CD track.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITFileOrCDTrack extends ITTrack {
|
||||
|
||||
public ITFileOrCDTrack (Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reveals the track in the main browser window.
|
||||
*/
|
||||
public void reveal() {
|
||||
Dispatch.call(object, "Reveal");
|
||||
}
|
||||
|
||||
public ITVideoKind getVideoKind() {
|
||||
return ITVideoKind.values()[Dispatch.get(object, "VideoKind").getInt()];
|
||||
}
|
||||
|
||||
public ITRatingKind getRatingKind() {
|
||||
return ITRatingKind.values()[Dispatch.get(object, "RatingKind").getInt()];
|
||||
}
|
||||
|
||||
public String getLocation() {
|
||||
return Dispatch.get(object, "Location").getString();
|
||||
}
|
||||
|
||||
public ITArtworkCollection getArtworks() {
|
||||
Dispatch artworks = Dispatch.get(object, "Artwork").toDispatch();
|
||||
return new ITArtworkCollection(artworks);
|
||||
}
|
||||
|
||||
}
|
||||
20
src/main/java/com/dt/iTunesController/ITLibraryPlaylist.java
Normal file
20
src/main/java/com/dt/iTunesController/ITLibraryPlaylist.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a library playlist.
|
||||
*
|
||||
* A library playlist consists of all the tracks in a user's library.
|
||||
*
|
||||
* For convenience, you can retrieve the main library playlist using
|
||||
* <code>iTunes.getLibraryPlaylist()</code>.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITLibraryPlaylist extends ITPlaylist {
|
||||
|
||||
public ITLibraryPlaylist(Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
}
|
||||
111
src/main/java/com/dt/iTunesController/ITObject.java
Normal file
111
src/main/java/com/dt/iTunesController/ITObject.java
Normal file
@@ -0,0 +1,111 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Defines a source, playlist or track.
|
||||
*
|
||||
* An ITObject uniquely identifies a source, playlist, or track in iTunes using
|
||||
* four separate IDs. These are runtime IDs, they are only valid while the
|
||||
* current instance of iTunes is running.
|
||||
*
|
||||
* As of iTunes 7.7, you can also identify an ITObject using a 64-bit persistent
|
||||
* ID, which is valid across multiple invocations of iTunes.
|
||||
*
|
||||
* The main use of the ITObject interface is to allow clients to track iTunes
|
||||
* database changes using
|
||||
* <code>iTunesEventsInterface.onDatabaseChangedEvent()</code>.
|
||||
*
|
||||
* You can retrieve an ITObject with a specified runtime ID using
|
||||
* <code>iTunes.getITObjectByID()</code>.
|
||||
*
|
||||
* An ITObject will always have a valid, non-zero source ID.
|
||||
*
|
||||
* An ITObject corresponding to a playlist or track will always have a valid
|
||||
* playlist ID. The playlist ID will be zero for a source.
|
||||
*
|
||||
* An ITObject corresponding to a track will always have a valid track and
|
||||
* track database ID. These IDs will be zero for a source or playlist.
|
||||
*
|
||||
* A track ID is unique within the track's playlist. A track database ID is
|
||||
* unique across all playlists. For example, if the same music file is in two
|
||||
* different playlists, each of the tracks could have different track IDs, but
|
||||
* they will have the same track database ID.
|
||||
*
|
||||
* An ITObject also has a 64-bit persistent ID which can be used to identify
|
||||
* the ITObject across multiple invocations of iTunes.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITObject {
|
||||
|
||||
protected Dispatch object;
|
||||
|
||||
public ITObject(Dispatch d) {
|
||||
object = d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the JACOB Dispatch object for this object.
|
||||
* @return Returns the JACOB Dispatch object for this object.
|
||||
*/
|
||||
public Dispatch fetchDispatch() {
|
||||
return object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name of the object.
|
||||
* @param name The new name of the object.
|
||||
*/
|
||||
public void setName (String name) {
|
||||
Dispatch.put(object, "Name", name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the object.
|
||||
* @return Returns the name of the object.
|
||||
*/
|
||||
public String getName() {
|
||||
return Dispatch.get(object, "Name").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the object in internal application order.
|
||||
* @return The index of the object in internal application order.
|
||||
*/
|
||||
public int getIndex() {
|
||||
return Dispatch.get(object, "Index").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the ID that identifies the source.
|
||||
* @return Returns the ID that identifies the source.
|
||||
*/
|
||||
public int getSourceID() {
|
||||
return Dispatch.get(object, "SourceID").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the ID that identifies the playlist.
|
||||
* @return Returns the ID that identifies the playlist.
|
||||
*/
|
||||
public int getPlaylistID() {
|
||||
return Dispatch.get(object, "PlaylistID").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the ID that identifies the track within the playlist.
|
||||
* @return Returns the ID that identifies the track within the playlist.
|
||||
*/
|
||||
public int getTrackID() {
|
||||
return Dispatch.get(object, "TrackID").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the ID that identifies the track, independent of its playlist.
|
||||
* @return Returns the ID that identifies the track, independent of its playlist.
|
||||
*/
|
||||
public int getTrackDatabaseID() {
|
||||
return Dispatch.get(object, "TrackDatabaseID").getInt();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Simple utility wrapper class to represent the persistent object identity
|
||||
* ID numbers. Use the getHigh() and getLow() methods individually to get
|
||||
* each ID, or the combined hex string through toString().
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITObjectPersistentID {
|
||||
|
||||
private long High;
|
||||
private long Low;
|
||||
private String hexString;
|
||||
|
||||
/**
|
||||
* Create the ITObjectPersistentID. This class is not intended to be created
|
||||
* manually, and this function should only be used by classes implementing
|
||||
* this utility.
|
||||
* @param high The High Persistent ID
|
||||
* @param low The Low Persistent ID
|
||||
*/
|
||||
public ITObjectPersistentID(long high, long low) {
|
||||
this.High=high;
|
||||
this.Low=low;
|
||||
this.hexString = String.format("%8s%8s",Long.toHexString(this.High),Long.toHexString(this.Low)).toUpperCase().replace(' ','0');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the high persistent ID.
|
||||
* @return The high persistent ID.
|
||||
*/
|
||||
public long getHigh() {
|
||||
return this.High;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the low persistent ID.
|
||||
* @return The low persistent ID.
|
||||
*/
|
||||
public long getLow() {
|
||||
return this.Low;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a string representation (in hex) of the persistent IDs.
|
||||
* @return String representation of the persistent IDs.
|
||||
*/
|
||||
public String toString() {
|
||||
return this.hexString;
|
||||
}
|
||||
}
|
||||
62
src/main/java/com/dt/iTunesController/ITOperationStatus.java
Normal file
62
src/main/java/com/dt/iTunesController/ITOperationStatus.java
Normal file
@@ -0,0 +1,62 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents the status of an asynchronous add or convert operation.
|
||||
*
|
||||
* When a track is added using TLibraryPlaylist.addFile(),
|
||||
* ITLibraryPlaylist.AddFiles(), IITUserPlaylist.addFile(), or
|
||||
* ITUserPlaylist.addFiles(), the add may not complete immediately if iTunes
|
||||
* needs to make a copy of the file.
|
||||
*
|
||||
* Similarly, when converting or importing a file or track using
|
||||
* <code>iTunes.convertFile()</code>, <code>iTunes.convertFiles()</code>,
|
||||
* <code>iTunes.convertTrack()</code> or <code>iTunes.convertTracks()</code>,
|
||||
* the conversion will never complete immediately.
|
||||
*
|
||||
* These methods return an <code>ITOperationStatus</code> object, which can be
|
||||
* polled todetermine when the operation is done. This object will also return
|
||||
* the collection of newly added or converted tracks.
|
||||
*
|
||||
* As of version 1.1 of the iTunes type library, you should use
|
||||
* <code>iTunes.convertFile2()</code>, <code>iTunes.convertFiles2()</code>,
|
||||
* <code>iTunes.convertTrack2()</code> or <code>iTunes.convertTracks2()</code>
|
||||
* instead of the original convert methods. These new methods return an
|
||||
* <code>ITConvertOperationStatus</code> object to allow clients to retrieve
|
||||
* additional conversion progress information.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITOperationStatus {
|
||||
|
||||
protected Dispatch object;
|
||||
|
||||
public ITOperationStatus(Dispatch d) {
|
||||
object = d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the operation is still in progress.
|
||||
* You cannot retrieve the <code>ITOperationStatus.getTracks()</code>
|
||||
* property until the operation completes.
|
||||
* @return Returns true if the operation is still in progress.
|
||||
*/
|
||||
public boolean getInProgress() {
|
||||
return Dispatch.get(object, "InProgress").getBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a collection containing the tracks that were generated by the
|
||||
* operation.
|
||||
* You cannot retrieve this property until
|
||||
* <code>ITOperationStatus.getInProgress()</code> returns false
|
||||
* @return Returns a collection containing the tracks that were generated by
|
||||
* the operation.
|
||||
*/
|
||||
public ITTrackCollection getTracks() {
|
||||
Dispatch tracks = Dispatch.get(object, "Tracks").toDispatch();
|
||||
return new ITTrackCollection(tracks);
|
||||
}
|
||||
|
||||
}
|
||||
13
src/main/java/com/dt/iTunesController/ITPlayerState.java
Normal file
13
src/main/java/com/dt/iTunesController/ITPlayerState.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the state of the player.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITPlayerState {
|
||||
ITPlayerStateStopped,
|
||||
ITPlayerStatePlaying,
|
||||
ITPlayerStateFastForward,
|
||||
ITPlayerStateRewind;
|
||||
}
|
||||
153
src/main/java/com/dt/iTunesController/ITPlaylist.java
Normal file
153
src/main/java/com/dt/iTunesController/ITPlaylist.java
Normal file
@@ -0,0 +1,153 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a playlist.
|
||||
*
|
||||
* A playlist is always associated with an ITSource.
|
||||
*
|
||||
* You can retrieve all the playlists defined for a source using
|
||||
* <code>ITSource.getPlaylists()</code>.
|
||||
*
|
||||
* For convenience, you can retrieve the main library playlist using
|
||||
* <code>iTunes.getLibraryPlaylist()</code>.
|
||||
*
|
||||
* You can create a new playlist using <code>iTunes.createPlaylist()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITPlaylist extends ITObject {
|
||||
|
||||
public ITPlaylist (Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this object.
|
||||
*/
|
||||
public void delete() {
|
||||
Dispatch.call(object, "Delete");
|
||||
}
|
||||
|
||||
/**
|
||||
* Start playing the first track in this object.
|
||||
*/
|
||||
public void playFirstTrack() {
|
||||
Dispatch.call(object, "PlayFirstTrack");
|
||||
}
|
||||
|
||||
/**
|
||||
* Print this object.
|
||||
* @param showPrintDialog If true, display the print dialog.
|
||||
* @param printKind The printout kind.
|
||||
* @param theme The name of the theme to use. This corresponds to the name
|
||||
* of a Theme combo box item in the print dialog for the specified printKind
|
||||
* (e.g. "Track length"). This string cannot be longer than 255 characters,
|
||||
* but it may be empty.
|
||||
*/
|
||||
public void print(boolean showPrintDialog, ITPlaylistPrintKind printKind, String theme) {
|
||||
Dispatch.call(object, "Print", showPrintDialog, printKind.ordinal(), theme);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a collection containing the tracks with the specified text.
|
||||
* @param searchText The text to search for. This string cannot be longer
|
||||
* than 255 chracters.
|
||||
* @param searchFields Specifies which fields of each track should be
|
||||
* searched for searchText.
|
||||
* @return Collection of IITTrack objects. This will be NULL if no tracks
|
||||
* meet the search criteria.
|
||||
*/
|
||||
public ITTrackCollection search (String searchText, ITPlaylistSearchField searchFields) {
|
||||
Dispatch collection = Dispatch.call(object, "Search", searchText, searchFields.ordinal()).getDispatch();
|
||||
return new ITTrackCollection(collection);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the kind of the object.
|
||||
* @return Returns the kind of the object.
|
||||
*/
|
||||
public ITPlaylistKind getKind() {
|
||||
return ITPlaylistKind.values()[Dispatch.get(object, "Kind").getInt()];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITSource object corresponding to the source that contains the
|
||||
* object.
|
||||
* @return Returns an ITSource object corresponding to the source that
|
||||
* contains the object.
|
||||
*/
|
||||
public ITSource getSource() {
|
||||
Dispatch source = Dispatch.get(object, "Source").toDispatch();
|
||||
return new ITSource(source);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total length of all songs in the object (in seconds).
|
||||
* @return Returns the total length of all songs in the object (in
|
||||
* seconds).
|
||||
*/
|
||||
public int getDuration() {
|
||||
return Dispatch.get(object, "Duration").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether songs in the object should be played in random order.
|
||||
* @param shouldShuffle True if songs in the object should be played in
|
||||
* random order.
|
||||
*/
|
||||
public void setShuffle(boolean shouldShuffle) {
|
||||
Dispatch.put(object, "Shuffle", shouldShuffle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total size of all songs in the object (in bytes).
|
||||
* @return Returns the total size of all songs in the object (in bytes).
|
||||
*/
|
||||
public double getSize() {
|
||||
return Dispatch.get(object, "Size").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the playback repeat mode.
|
||||
* @param repeatMode The new playback repeat mode.
|
||||
*/
|
||||
public void setSongRepeat(ITPlaylistRepeatMode repeatMode) {
|
||||
Dispatch.put(object, "SongRepeat", repeatMode.ordinal());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the playback repeat mode.
|
||||
* @return Returns the playback repeat mode.
|
||||
*/
|
||||
public ITPlaylistRepeatMode getSongRepeat() {
|
||||
return ITPlaylistRepeatMode.values()[Dispatch.get(object, "SongRepeat").getInt()];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total length of all songs in the object (in MM:SS format).
|
||||
* @return Returns the total length of all songs in the object (in
|
||||
* MM:SS format).
|
||||
*/
|
||||
public String getTime() {
|
||||
return Dispatch.get(object, "Time").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the object is visible in the sources list.
|
||||
* @return True if the object is visible in the sources list.
|
||||
*/
|
||||
public boolean getVisible() {
|
||||
return Dispatch.get(object, "Visible").getBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a collection containing the tracks in this object.
|
||||
* @return Collection of ITTrack objects.
|
||||
*/
|
||||
public ITTrackCollection getTracks() {
|
||||
Dispatch tracks = Dispatch.get(object, "Tracks").toDispatch();
|
||||
return new ITTrackCollection(tracks);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a collection of playlist objects.
|
||||
*
|
||||
* Note that collection indices are always 1-based.
|
||||
*
|
||||
* You can retrieve all the playlists defined for a source using
|
||||
* <code>ITSource.getPlaylists()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITPlaylistCollection {
|
||||
|
||||
protected Dispatch object;
|
||||
|
||||
public ITPlaylistCollection(Dispatch d) {
|
||||
object = d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of playlists in the collection.
|
||||
* @return Returns the number of playlists in the collection.
|
||||
*/
|
||||
public int getCount() {
|
||||
return Dispatch.get(object, "Count").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITPlaylist object corresponding to the given index (1-based).
|
||||
* @param index Index of the playlist to retrieve, must be less than or
|
||||
* equal to <code>ITPlaylistCollection.getCount()</code>.
|
||||
* @return Returns an ITPlaylist object corresponding to the given index.
|
||||
* Will be set to NULL if no playlist could be retrieved.
|
||||
*/
|
||||
public ITPlaylist getItem (int index) {
|
||||
Dispatch item = Dispatch.call(object, "Item", index).toDispatch();
|
||||
return new ITPlaylist(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITPlaylist object withthe specified name.
|
||||
* @param name The name of the playlist to retrieve.
|
||||
* @return Returns an ITPlaylist object corresponding to the given index.
|
||||
* Will be set to NULL if no playlist could be retrieved.
|
||||
*/
|
||||
public ITPlaylist ItemByName (String name) {
|
||||
Dispatch item = Dispatch.call(object, "ItemByName", name).toDispatch();
|
||||
return new ITPlaylist(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITPlaylist object with the specified persistent ID. See the
|
||||
* documentation on ITObject for more information on persistent IDs.
|
||||
* @param highID The high 32 bits of the 64-bit persistent ID.
|
||||
* @param lowID The low 32 bits of the 64-bit persistent ID.
|
||||
* @return Returns an ITPlaylist object with the specified persistent ID.
|
||||
* Will be set to NULL if no playlist could be retrieved.
|
||||
*/
|
||||
public ITPlaylist getItemByPersistentID (int highID, int lowID) {
|
||||
Dispatch item = Dispatch.call(object, "ItemByPersistentID", highID, lowID).toDispatch();
|
||||
return new ITPlaylist(item);
|
||||
}
|
||||
|
||||
}
|
||||
15
src/main/java/com/dt/iTunesController/ITPlaylistKind.java
Normal file
15
src/main/java/com/dt/iTunesController/ITPlaylistKind.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the playlist kind.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITPlaylistKind {
|
||||
ITPlaylistKindUnknown,
|
||||
ITPlaylistKindLibrary,
|
||||
ITPlaylistKindUser,
|
||||
ITPlaylistKindCD,
|
||||
ITPlaylistKindDevice,
|
||||
ITPlaylistKindRadioTuner;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the kind of playlist printout.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITPlaylistPrintKind {
|
||||
|
||||
ITPlaylistPrintKindPlaylist,
|
||||
ITPlaylistPrintKindAlbumlist,
|
||||
ITPlaylistPrintKindInsert;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the playlist playback repeat mode.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITPlaylistRepeatMode {
|
||||
|
||||
ITPlaylistRepeatModeOff,
|
||||
ITPlaylistRepeatModeOne,
|
||||
ITPlaylistRepeatModeAll;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the fields in each track that will be searched by
|
||||
* <code>ITPlaylist.search()</code>.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITPlaylistSearchField {
|
||||
ITPlaylistSearchFieldAll,
|
||||
ITPlaylistSearchFieldVisible,
|
||||
ITPlaylistSearchFieldArtists,
|
||||
ITPlaylistSearchFieldAlbums,
|
||||
ITPlaylistSearchFieldComposers,
|
||||
ITPlaylistSearchFieldSongNames;
|
||||
}
|
||||
11
src/main/java/com/dt/iTunesController/ITRatingKind.java
Normal file
11
src/main/java/com/dt/iTunesController/ITRatingKind.java
Normal file
@@ -0,0 +1,11 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the rating kind.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITRatingKind {
|
||||
ITRatingKindUser,
|
||||
ITRatingKindComputed;
|
||||
}
|
||||
51
src/main/java/com/dt/iTunesController/ITSource.java
Normal file
51
src/main/java/com/dt/iTunesController/ITSource.java
Normal file
@@ -0,0 +1,51 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents an entry in the Source list (music library, CD, device, etc.).
|
||||
* You can retrieve all the sources using <code>iTunes.getSources()</code>.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITSource extends ITObject {
|
||||
|
||||
public ITSource(Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the kind of the source.
|
||||
* @return Returns the kind of the source.
|
||||
*/
|
||||
public ITSourceKind getKind() {
|
||||
return ITSourceKind.values()[Dispatch.get(object, "Kind").getInt()];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total size of the source, if it has a fixed size.
|
||||
* @return Returns the total size of the source, if it has a fixed size.
|
||||
*/
|
||||
public double getCapacity() {
|
||||
return Dispatch.get(object, "Capacity").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the free space on the source, if it has a fixed size.
|
||||
* @return Returns the free space on the source, if it has a fixed size.
|
||||
*/
|
||||
public double getFreespace() {
|
||||
return Dispatch.get(object, "Freespace").getDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a collection containing the playlists in this source.
|
||||
* The source's primary playlist is always the first playlist in the
|
||||
* collection.
|
||||
* @return Collection of IITPlaylist objects.
|
||||
*/
|
||||
public ITPlaylistCollection getPlaylists() {
|
||||
Dispatch playlists = Dispatch.get(object, "Playlists").toDispatch();
|
||||
return new ITPlaylistCollection(playlists);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a collection of source objects.
|
||||
*
|
||||
* Note that collection indices are always 1-based.
|
||||
*
|
||||
* You can retrieve all the sources using <code>ITSource.getSources()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITSourceCollection {
|
||||
|
||||
protected Dispatch object;
|
||||
|
||||
public ITSourceCollection(Dispatch d) {
|
||||
object = d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of sources in the collection.
|
||||
* @return Returns the number of sources in the collection.
|
||||
*/
|
||||
public int getCount() {
|
||||
return Dispatch.get(object, "Count").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITSource object corresponding to the given index (1-based).
|
||||
* @param index Index of the source to retrieve, must be less than or
|
||||
* equal to <code>ITSourceCollection.getCount()</code>.
|
||||
* @return Returns an ITSource object corresponding to the given index.
|
||||
* Will be set to NULL if no source could be retrieved.
|
||||
*/
|
||||
public ITSource getItem (int index) {
|
||||
Dispatch item = Dispatch.call(object, "Item", index).toDispatch();
|
||||
return new ITSource(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITSource object withthe specified name.
|
||||
* @param name The name of the source to retrieve.
|
||||
* @return Returns an ITSource object corresponding to the given index.
|
||||
* Will be set to NULL if no source could be retrieved.
|
||||
*/
|
||||
public ITSource getItemByName (String name) {
|
||||
Dispatch item = Dispatch.call(object, "ItemByName", name).toDispatch();
|
||||
return new ITSource(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITSource object with the specified persistent ID. See the
|
||||
* documentation on ITObject for more information on persistent IDs.
|
||||
* @param highID The high 32 bits of the 64-bit persistent ID.
|
||||
* @param lowID The low 32 bits of the 64-bit persistent ID.
|
||||
* @return Returns an ITSource object with the specified persistent ID.
|
||||
* Will be set to NULL if no source could be retrieved.
|
||||
*/
|
||||
public ITSource getItemByPersistentID (int highID, int lowID) {
|
||||
Dispatch item = Dispatch.call(object, "ItemByPersistentID", highID, lowID).toDispatch();
|
||||
return new ITSource(item);
|
||||
}
|
||||
|
||||
}
|
||||
17
src/main/java/com/dt/iTunesController/ITSourceKind.java
Normal file
17
src/main/java/com/dt/iTunesController/ITSourceKind.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the source kind.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITSourceKind {
|
||||
ITSourceKindUnknown,
|
||||
ITSourceKindLibrary,
|
||||
ITSourceKindIPod,
|
||||
ITSourceKindAudioCD,
|
||||
ITSourceKindMP3CD,
|
||||
ITSourceKindDevice,
|
||||
ITSourceKindRadioTuner,
|
||||
ITSourceKindSharedLibrary;
|
||||
}
|
||||
494
src/main/java/com/dt/iTunesController/ITTrack.java
Normal file
494
src/main/java/com/dt/iTunesController/ITTrack.java
Normal file
@@ -0,0 +1,494 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.*;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Represents a track.
|
||||
*
|
||||
* A track represents a song in a single playlist. A song may be in more than
|
||||
* one playlist, in which case it would be represented by multiple tracks.
|
||||
*
|
||||
* You can retrieve the currently targeted (playing) track using
|
||||
* <code>iTunes.getCurrentTrack()</code>.
|
||||
*
|
||||
* Typically, an ITrack is accessed through an ITTrackCollection.
|
||||
*
|
||||
* You can retrieve all the tracks defined for a playlist using
|
||||
* <code>ITPlaylist.getTracks()</code>.
|
||||
*
|
||||
* You can retrieve the currently selected track or tracks using
|
||||
* <code>iTunes.getSelectedTracks()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITTrack extends ITObject {
|
||||
|
||||
public ITTrack (Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this object.
|
||||
*/
|
||||
public void delete() {
|
||||
Dispatch.call(object, "Delete");
|
||||
}
|
||||
|
||||
/**
|
||||
* Start playing this object.
|
||||
*/
|
||||
public void play() {
|
||||
Dispatch.call(object, "Play");
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name of the album containing the object.;
|
||||
* @param album The new name of the album containing the object.
|
||||
*/
|
||||
public void setAlbum(String album) {
|
||||
Dispatch.put(object, "Album", album);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the album containing the object.
|
||||
* @return Returns the name of the album containing the object.
|
||||
*/
|
||||
public String getAlbum() {
|
||||
return Dispatch.get(object, "Album").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name of the artist/source of the object.
|
||||
* @param artist The new artist/source of the object.
|
||||
*/
|
||||
public void setArtist(String artist) {
|
||||
Dispatch.put(object, "Artist", artist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the artist/source of the object.
|
||||
* @return Returns the name of the artist/source of the object.
|
||||
*/
|
||||
public String getArtist() {
|
||||
return Dispatch.get(object, "Artist").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the bit rate of the object (in kbps).
|
||||
* @return Returns the bit rate of the object (in kbps).
|
||||
*/
|
||||
public int getBitRate() {
|
||||
return Dispatch.get(object, "BitRate").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the tempo of the object (in beats per minute).
|
||||
* @param beatsPerMinute The new tempo of the object (in beats per minute).
|
||||
*/
|
||||
public void setBPM(int beatsPerMinute) {
|
||||
Dispatch.put(object, "BPM", beatsPerMinute);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the tempo of the object (in beats per minute).
|
||||
* @return Returns the tempo of the object (in beats per minute).
|
||||
*/
|
||||
public int getBPM() {
|
||||
return Dispatch.get(object, "BPM").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set freeform notes about the object.
|
||||
* @param comment The new freeform notes about the object.
|
||||
*/
|
||||
public void setComment(String comment) {
|
||||
Dispatch.put(object, "Comment", comment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns freeform notes about the object.
|
||||
* @return Returns freeform notes about the object.
|
||||
*/
|
||||
public String getComment() {
|
||||
return Dispatch.get(object, "Comment").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether this object is from a compilation album.
|
||||
* @param isCompilation True if this object should be from a compilation album.
|
||||
*/
|
||||
public void setCompilation(boolean isCompilation) {
|
||||
Dispatch.put(object, "Compilation", isCompilation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this object is from a compilation album.
|
||||
* @return Returns true if this object is from a compilation album.
|
||||
*/
|
||||
public boolean getCompilation() {
|
||||
return Dispatch.get(object, "Compilation").getBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the composer of the object.
|
||||
* @param composer The new composer of the object.
|
||||
*/
|
||||
public void setComposer (String composer) {
|
||||
Dispatch.put(object, "Composer", composer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the composer of the object.
|
||||
* @return Returns the composer of the object.
|
||||
*/
|
||||
public String getComposer() {
|
||||
return Dispatch.get(object, "Composer").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date the object was added to the playlist.
|
||||
* @return Returns the date the object was added to the playlist.
|
||||
*/
|
||||
public Date getDateAdded() {
|
||||
return Dispatch.get(object, "DateAdded").getJavaDate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the total number of discs in the source album.
|
||||
* @param discCount The new total number of discs in the source album.
|
||||
*/
|
||||
public void setDiscCount (int discCount) {
|
||||
Dispatch.put(object, "DiscCount", discCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total number of discs in the source album.
|
||||
* @return Returns the total number of discs in the source album.
|
||||
*/
|
||||
public int getDiscCount() {
|
||||
return Dispatch.get(object, "DiscCount").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the index of the disc containing the object on the source album.
|
||||
* @param discNumber The new index of the disc containing the object on the
|
||||
* source album.
|
||||
*/
|
||||
public void setDiscNumber (int discNumber) {
|
||||
Dispatch.put(object, "DiscNumber", discNumber);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the disc containing the object on the source album.
|
||||
* @return Returns the index of the disc containing the object on the source
|
||||
* album.
|
||||
*/
|
||||
public int getDiscNumber() {
|
||||
return Dispatch.get(object, "DiscNumber").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the length of the object (in seconds).
|
||||
* @return Returns the length of the object (in seconds).
|
||||
*/
|
||||
public int getDuration() {
|
||||
return Dispatch.get(object, "Duration").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether this object is checked for playback.
|
||||
* @param shouldBeEnabled True if the object should be checked for playback.
|
||||
*/
|
||||
public void setEnabled (boolean shouldBeEnabled) {
|
||||
Dispatch.put(object, "Enabled", shouldBeEnabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the object is checked for playback.
|
||||
* @return Returns true if the object is checked for playback.
|
||||
*/
|
||||
public boolean getEnabled() {
|
||||
return Dispatch.get(object, "Enabled").getBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name of the EQ preset of the object.
|
||||
* @param eq The new name of the EQ preset of the object.
|
||||
*/
|
||||
public void setEQ (String eq) {
|
||||
Dispatch.put(object, "EQ", eq);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the EQ preset of the object.
|
||||
* @return Returns the name of the EQ preset of the object.
|
||||
*/
|
||||
public String getEQ() {
|
||||
return Dispatch.get(object, "EQ").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the stop time of the object (in seconds).
|
||||
* @param finish The new stop time of the object (in seconds).
|
||||
*/
|
||||
public void setFinish(int finish) {
|
||||
Dispatch.put(object, "Finish", finish);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the stop time of the object (in seconds).
|
||||
* @return Returns the stop time of the object (in seconds).
|
||||
*/
|
||||
public int getFinish() {
|
||||
return Dispatch.get(object, "Finish").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the music/audio genre (category) of the object.
|
||||
* @param genre Returns the music/audio genre (category) of the object.
|
||||
*/
|
||||
public void setGenre(String genre) {
|
||||
Dispatch.put(object, "Genre", genre);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the music/audio genre (category) of the object.
|
||||
* @return The new music/audio genre (category) of the object.
|
||||
*/
|
||||
public String getGenre() {
|
||||
return Dispatch.get(object, "Genre").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the grouping (piece) of the object.
|
||||
* Generally used to denote movements within classical work.
|
||||
* @param grouping The new grouping (piece) of the object.
|
||||
*/
|
||||
public void setGrouping (String grouping) {
|
||||
Dispatch.put(object, "Grouping", grouping);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the grouping (piece) of the object.
|
||||
* Generally used to denote movements within classical work.
|
||||
* @return Returns the grouping (piece) of the object.
|
||||
*/
|
||||
public String getGrouping() {
|
||||
return Dispatch.get(object, "Grouping").getString();
|
||||
}
|
||||
|
||||
public ITTrackKind getKind() {
|
||||
return ITTrackKind.values()[Dispatch.get(object, "Kind").getInt()];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the text description of the object (e.g. "AAC audio file").
|
||||
* @return Returns the text description of the object (e.g. "AAC audio file").
|
||||
*/
|
||||
public String getKindAsString() {
|
||||
return Dispatch.get(object, "KindAsString").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the modification date of the content of the object.
|
||||
* @return Returns the modification date of the content of the object.
|
||||
*/
|
||||
public Date getModificationDate() {
|
||||
return Dispatch.get(object, "ModificationDate").getJavaDate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the number of times the object has been played. This property cannot
|
||||
* be set if the object is not playable (e.g. a PDF file).
|
||||
* @param playedCount The new number of times the object has been played.
|
||||
*/
|
||||
public void setPlayedCount (int playedCount) {
|
||||
Dispatch.put(object, "PlayedCount", playedCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of times the object has been played.
|
||||
* @return Returns the number of times the object has been played.
|
||||
*/
|
||||
public int getPlayedCount() {
|
||||
return Dispatch.get(object, "PlayedCount").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the date and time the object was last played. This property cannot be
|
||||
* set if the object is not playable (e.g. a PDF file).
|
||||
* A value of zero means no played date.
|
||||
* @param playedDate The new date and time the object was last played.
|
||||
*/
|
||||
public void setPlayedDate (Date playedDate) {
|
||||
Dispatch.put(object, "PlayedDate", playedDate);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date and time the object was last played.
|
||||
* A value of zero means no played date.
|
||||
* @return Returns the date and time the object was last played.
|
||||
*/
|
||||
public Date getPlayedDate() {
|
||||
return Dispatch.get(object, "PlayedDate").getJavaDate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITPlaylist object corresponding to the playlist that contains
|
||||
* the object. Use ITFileOrCDTrack::Playlists() or IITURLTrack::Playlists()
|
||||
* to get the collection of all playlists that contain the song this object
|
||||
* represents.
|
||||
* @return Returns an ITPlaylist object corresponding to the playlist that
|
||||
* contains the object.
|
||||
*/
|
||||
public ITPlaylist getPlaylist() {
|
||||
Dispatch playlist = Dispatch.get(object, "Playlist").toDispatch();
|
||||
return new ITPlaylist(playlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the play order index of the object in the owner playlist
|
||||
* (1-based).
|
||||
* You can pass this index to IITTrackCollection::ItemByPlayOrder() for the
|
||||
* collection returned by ITPlaylist::Tracks() to retrieve an ITTrack
|
||||
* object corresponding to this object.
|
||||
* @return Returns the play order index of the object in the owner playlist.
|
||||
*/
|
||||
public int getPlayOrderIndex() {
|
||||
return Dispatch.get(object, "PlayOrderIndex").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the rating of the object (0 to 100). If the object rating is set to 0,
|
||||
* it will be computed based on the album rating.
|
||||
* @param rating The new rating of the object (0 to 100).
|
||||
*/
|
||||
public void setRating (int rating) {
|
||||
Dispatch.put(object, "Rating", rating);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the rating of the object (0 to 100). If the object rating has never
|
||||
* been set, or has been set to 0, it will be computed based on the album
|
||||
* rating.
|
||||
* @return Returns the rating of the object (0 to 100).
|
||||
*/
|
||||
public int getRating() {
|
||||
return Dispatch.get(object, "Rating").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the sample rate of the object (in Hz).
|
||||
* @return Returns the sample rate of the object (in Hz).
|
||||
*/
|
||||
public int getSampleRate() {
|
||||
return Dispatch.get(object, "SampleRate").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the size of the object (in bytes).
|
||||
* @return Returns the size of the object (in bytes).
|
||||
*/
|
||||
public int getSize() {
|
||||
return Dispatch.get(object, "Size").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the start time of the object (in seconds).
|
||||
* @param start The new start time of the object (in seconds).
|
||||
*/
|
||||
public void setStart (int start) {
|
||||
Dispatch.put(object, "Start", start);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the start time of the object (in seconds).
|
||||
* @return Returns the start time of the object (in seconds).
|
||||
*/
|
||||
public int getStart() {
|
||||
return Dispatch.get(object, "Start").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the length of the object (in MM:SS format).
|
||||
* @return Returns the length of the object (in MM:SS format).
|
||||
*/
|
||||
public String getTime() {
|
||||
return Dispatch.get(object, "Time").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the total number of tracks on the source album.
|
||||
* @param trackCount The new total number of tracks on the source album.
|
||||
*/
|
||||
public void setTrackCount (int trackCount) {
|
||||
Dispatch.put(object, "TrackCount", trackCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total number of tracks on the source album.
|
||||
* @return Returns the total number of tracks on the source album.
|
||||
*/
|
||||
public int getTrackCount() {
|
||||
return Dispatch.get(object, "TrackCount").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the index of the object on the source album.
|
||||
* @param trackNumber The new index of the object on the source album.
|
||||
*/
|
||||
public void setTrackNumber (int trackNumber) {
|
||||
Dispatch.put(object, "TrackNumber", trackNumber);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the object on the source album.
|
||||
* @return Returns the index of the object on the source album.
|
||||
*/
|
||||
public int getTrackNumber() {
|
||||
return Dispatch.get(object, "TrackNumebr").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the relative volume adjustment of the object (-100% to 100%).
|
||||
* @param volumeAdjustment Set the relative volume adjustment of the object
|
||||
* (-100% to 100%).
|
||||
*/
|
||||
public void setVolumeAdjustment (int volumeAdjustment) {
|
||||
Dispatch.put(object, "VolumeAdjustment", volumeAdjustment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the relative volume adjustment of the object (-100% to 100%).
|
||||
* @return Returns the relative volume adjustment of the object (-100% to 100%).
|
||||
*/
|
||||
public int getVolumeAdjustment() {
|
||||
return Dispatch.get(object, "VolumeAdjustment").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the year the object was recorded/released.
|
||||
* @param year The new year the object was recorded/released.
|
||||
*/
|
||||
public void setYear (int year) {
|
||||
Dispatch.put(object, "Year", year);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the year the object was recorded/released.
|
||||
* @return Returns the year the object was recorded/released.
|
||||
*/
|
||||
public int getYear() {
|
||||
return Dispatch.get(object, "Year").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the track associated artworks
|
||||
* @return Returns the track associated artworks
|
||||
*/
|
||||
public ITArtworkCollection getArtwork() {
|
||||
Dispatch art = Dispatch.get(object, "Artwork").toDispatch();
|
||||
return new ITArtworkCollection(art);
|
||||
}
|
||||
}
|
||||
91
src/main/java/com/dt/iTunesController/ITTrackCollection.java
Normal file
91
src/main/java/com/dt/iTunesController/ITTrackCollection.java
Normal file
@@ -0,0 +1,91 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a collection of track objects.
|
||||
*
|
||||
* Note that collection indices are always 1-based.
|
||||
*
|
||||
* You can retrieve all the tracks defined for a playlist using
|
||||
* <code>ITPlaylist.getTracks()</code>.
|
||||
*
|
||||
* You can retrieve the currently selected track or tracks using
|
||||
* <code>iTunes.getSelectedTracks()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITTrackCollection {
|
||||
|
||||
protected Dispatch object;
|
||||
|
||||
public ITTrackCollection(Dispatch d) {
|
||||
object = d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of tracks in the collection.
|
||||
* @return Returns the number of tracks in the collection.
|
||||
*/
|
||||
public int getCount() {
|
||||
return Dispatch.get(object, "Count").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITTrack object corresponding to the given index (1-based).
|
||||
* @param index Index of the track to retrieve, must be less than or
|
||||
* equal to <code>ITTrackCollection.getCount()</code>.
|
||||
* @return Returns an ITTrack object corresponding to the given index.
|
||||
* Will be set to NULL if no track could be retrieved.
|
||||
*/
|
||||
public ITTrack getItem (int index) {
|
||||
Dispatch item = Dispatch.call(object, "Item", index).toDispatch();
|
||||
ITTrack track = new ITTrack(item);
|
||||
if (track.getKind()==ITTrackKind.ITTrackKindFile) {
|
||||
return new ITFileOrCDTrack(item);
|
||||
} else if (track.getKind()==ITTrackKind.ITTrackKindCD) {
|
||||
return new ITFileOrCDTrack(item);
|
||||
} else if (track.getKind()==ITTrackKind.ITTrackKindURL ) {
|
||||
return new ITURLTrack(item);
|
||||
} else {
|
||||
return track;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITTrack object corresponding to the given index (1-based).
|
||||
* @param index Index of the track to retrieve, must be less than or
|
||||
* equal to <code>ITTrackCollection.getCount()</code>.
|
||||
* @return Returns an ITTrack object corresponding to the given index.
|
||||
* Will be set to NULL if no track could be retrieved.
|
||||
*/
|
||||
public ITTrack getItemByPlayOrder(int index) {
|
||||
Dispatch item = Dispatch.call(object, "ItemByPlayOrder", index).toDispatch();
|
||||
return new ITTrack(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITTrack object withthe specified name.
|
||||
* @param name The name of the track to retrieve.
|
||||
* @return Returns an ITTrack object corresponding to the given index.
|
||||
* Will be set to NULL if no track could be retrieved.
|
||||
*/
|
||||
public ITTrack ItemByName (String name) {
|
||||
Dispatch item = Dispatch.call(object, "ItemByName", name).toDispatch();
|
||||
return new ITTrack(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITTrack object with the specified persistent ID. See the
|
||||
* documentation on ITObject for more information on persistent IDs.
|
||||
* @param highID The high 32 bits of the 64-bit persistent ID.
|
||||
* @param lowID The low 32 bits of the 64-bit persistent ID.
|
||||
* @return Returns an ITTrack object with the specified persistent ID.
|
||||
* Will be set to NULL if no track could be retrieved.
|
||||
*/
|
||||
public ITTrack getItemByPersistentID (int highID, int lowID) {
|
||||
Dispatch item = Dispatch.call(object, "ItemByPersistentID", highID, lowID).toDispatch();
|
||||
return new ITTrack(item);
|
||||
}
|
||||
|
||||
}
|
||||
15
src/main/java/com/dt/iTunesController/ITTrackKind.java
Normal file
15
src/main/java/com/dt/iTunesController/ITTrackKind.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the track kind.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITTrackKind {
|
||||
ITTrackKindUnknown,
|
||||
ITTrackKindFile,
|
||||
ITTrackKindCD,
|
||||
ITTrackKindURL,
|
||||
ITTrackKindDevice,
|
||||
ITTrackKindSharedLibrary;
|
||||
}
|
||||
175
src/main/java/com/dt/iTunesController/ITURLTrack.java
Normal file
175
src/main/java/com/dt/iTunesController/ITURLTrack.java
Normal file
@@ -0,0 +1,175 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a URL track.
|
||||
*
|
||||
* A URL track references a network audio stream.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITURLTrack extends ITTrack {
|
||||
|
||||
public ITURLTrack (Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the URL of the stream represented by this track.
|
||||
* @return The URL of the stream represented by this track.
|
||||
*/
|
||||
public String getURL () {
|
||||
return Dispatch.get(object, "URL").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the URL of the stream represented by this track.
|
||||
* @param url The URL of the stream represented by this track.
|
||||
*/
|
||||
public void setURL (String url) {
|
||||
Dispatch.call(object, "URL", url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this track is a podcast track. If a podcast track is an
|
||||
* <code>IITURLTrack</code>, the podcast episode has not been downloaded.
|
||||
* @return Returns true if this track is a podcast track.
|
||||
*/
|
||||
public boolean isPodcast () {
|
||||
return Dispatch.get(object, "Podcast").getBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the category for the track.
|
||||
* @return Returns the category for the track.
|
||||
*/
|
||||
public String getCategory () {
|
||||
return Dispatch.get(object, "Category").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the category for the track.
|
||||
* @param category Sets the category for the track.
|
||||
*/
|
||||
public void setCategory (String category) {
|
||||
Dispatch.call(object, "Category", category);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the description for the track.
|
||||
* @return Returns the description for the track.
|
||||
*/
|
||||
public String getDescription () {
|
||||
return Dispatch.get(object, "Description").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the description for the track.
|
||||
* @param description The new description for the track.
|
||||
*/
|
||||
public void setDescription (String description) {
|
||||
Dispatch.call(object, "Description", description);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the long description for the track.
|
||||
* @return Returns the description for the track.
|
||||
*/
|
||||
public String getLongDescription () {
|
||||
return Dispatch.get(object, "LongDescription").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the long description for the track.
|
||||
* @param longDescription The new long description for the track.
|
||||
*/
|
||||
public void setLongDescription (String longDescription) {
|
||||
Dispatch.call(object, "LongDescription", longDescription);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the user or computed rating of the album that this track belongs
|
||||
* to (0 to 100). If the album rating has never been set, or has been set to
|
||||
* 0, it will be computed based on the ratings of tracks in the album.
|
||||
* @return Returns the album rating of the album that this track belongs to (0 to 100).
|
||||
*/
|
||||
public long getAlbumRating () {
|
||||
return Dispatch.get(object, "AlbumRating").getLong();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the album rating of the album that this track belongs to (0 to 100).
|
||||
* If the album rating is set to 0, it will be computed based on the ratings
|
||||
* of tracks in the album.
|
||||
* @param albumRating The new album rating of the album that this track
|
||||
* belongs to (0 to 100). If rating is outside this range, it will be
|
||||
* pinned.
|
||||
*/
|
||||
public void setAlbumRating (long albumRating) {
|
||||
Dispatch.call(object, "AlbumRating", albumRating);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the album rating kind. If the album rating has never been set, or
|
||||
* has been set to 0, the kind is ITRatingKindComputed. Otherwise, the kind
|
||||
* is ITRatingKindUser.
|
||||
* @return Returns the album rating kind.
|
||||
*/
|
||||
public ITRatingKind getAlbumRatingKind () {
|
||||
return ITRatingKind.values()[Dispatch.get(object, "AlbumRatingKind").getInt()];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the track rating kind. If the track rating has never been set, or
|
||||
* has been set to 0, the kind is ITRatingKindComputed. Otherwise, the kind
|
||||
* is ITRatingKindUser.
|
||||
* @return Returns the track rating kind.
|
||||
*/
|
||||
public ITRatingKind getRatingKind () {
|
||||
return ITRatingKind.values()[Dispatch.get(object, "RatingKind").getInt()];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a collection of playlists that contain the song that this track
|
||||
* represents.
|
||||
*
|
||||
* This is the same collection of playlists that are shown in the "Show in
|
||||
* Playlist" contextual menu for a track, plus the specific playlist that
|
||||
* contains this track.
|
||||
*
|
||||
* A track represents a song in a single playlist, use
|
||||
* <code>ITTrack.getPlaylist()</code> to get the specific playlist that
|
||||
* contains this track.
|
||||
* @return Collection of ITPlaylist objects.
|
||||
*/
|
||||
public ITPlaylistCollection getPlaylists () {
|
||||
Dispatch playlists = Dispatch.get(object, "Playlists").toDispatch();
|
||||
return new ITPlaylistCollection(playlists);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the podcast feed for this track. This is equivalent to the user
|
||||
* choosing Update Podcast from the contextual menu for the podcast feed
|
||||
* that contains this track.
|
||||
*/
|
||||
public void updatePodcastFeed () {
|
||||
Dispatch.call(object, "UpdatePodcastFeed");
|
||||
}
|
||||
|
||||
/**
|
||||
* Start downloading the podcast episode that corresponds to this track.
|
||||
* This is equivalent to the user clicking the Get button next to this
|
||||
* track.
|
||||
*/
|
||||
public void downloadPodcastEpisode () {
|
||||
Dispatch.call(object, "DownloadPodcastEpisode");
|
||||
}
|
||||
|
||||
/**
|
||||
* Reveals the track in the main browser window.
|
||||
*/
|
||||
public void reveal() {
|
||||
Dispatch.call(object, "Reveal");
|
||||
}
|
||||
|
||||
}
|
||||
60
src/main/java/com/dt/iTunesController/ITUserPlaylist.java
Normal file
60
src/main/java/com/dt/iTunesController/ITUserPlaylist.java
Normal file
@@ -0,0 +1,60 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a user-defined playlist.
|
||||
*
|
||||
* A user playlist includes both smart and manual user-defined playlists.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITUserPlaylist extends ITPlaylist {
|
||||
|
||||
public ITUserPlaylist(Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a file or files inside a folder to the playlist.
|
||||
* You cannot use this method to add a file that requires conversion to be
|
||||
* added (e.g. a CD track), use <code>iTunes.convertFile()</code> or
|
||||
* <code>iTunes.convertFile2()</code> instead. If you add a folder that
|
||||
* contains files that require conversion, they will be skipped.
|
||||
* @param filePath The full path to the file or folder to add.
|
||||
* @return Returns an ITOperationStatus object corresponding to the
|
||||
* asynchronous operation. If an error occurs, or no files were added, this
|
||||
* will be set to <code>NULL</code>.
|
||||
*/
|
||||
public ITOperationStatus addFile (String filePath) {
|
||||
Dispatch status = Dispatch.call(object, "AddFile", filePath).toDispatch();
|
||||
return new ITOperationStatus(status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a streaming audio URL to the playlist.
|
||||
* @param url The URL to add. The length of the URL can be 255 characters or
|
||||
* less.
|
||||
* @return Returns an ITURLTrack object corresponding to the new track.
|
||||
*/
|
||||
public ITURLTrack addURL (String url) {
|
||||
Dispatch URLTrack = Dispatch.call(object, "AddURL", url).toDispatch();
|
||||
return new ITURLTrack(URLTrack);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an existing track to the playlist.
|
||||
* You cannot use this method to add a CD track (ITTrackKindCD) to another
|
||||
* playlist, use <code>iTunes.convertTrack()</code> or
|
||||
* <code>iTunes.convertTrack2()</code> instead.
|
||||
* You cannot add a shared library track (ITTrackKindSharedLibrary) to
|
||||
* another playlist.
|
||||
* @param track The track to add.
|
||||
* @return Returns an IITTrack object corresponding to the new track.
|
||||
*/
|
||||
public ITTrack addTrack (ITTrack track) {
|
||||
Dispatch trackToAdd = track.fetchDispatch();
|
||||
Dispatch addedTrack = Dispatch.call(object, "AddTrack", trackToAdd).toDispatch();
|
||||
return new ITTrack(addedTrack);
|
||||
}
|
||||
|
||||
}
|
||||
13
src/main/java/com/dt/iTunesController/ITVideoKind.java
Normal file
13
src/main/java/com/dt/iTunesController/ITVideoKind.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the Video kind.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITVideoKind {
|
||||
ITVideoKindNone,
|
||||
ITVideoKindMovie,
|
||||
ITVideoKindMusicVideo,
|
||||
ITVideoKindTVShow;
|
||||
}
|
||||
32
src/main/java/com/dt/iTunesController/ITWindow.java
Normal file
32
src/main/java/com/dt/iTunesController/ITWindow.java
Normal file
@@ -0,0 +1,32 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents an iTunes window.
|
||||
*/
|
||||
|
||||
public class ITWindow {
|
||||
|
||||
protected Dispatch object;
|
||||
|
||||
public ITWindow(Dispatch d) {
|
||||
object = d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the JACOB Dispatch object for this object.
|
||||
* @return Returns the JACOB Dispatch object for this object.
|
||||
*/
|
||||
public Dispatch fetchDispatch() {
|
||||
return object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the object.
|
||||
* @return Returns the name of the object.
|
||||
*/
|
||||
public String getName() {
|
||||
return Dispatch.get(object, "Name").getString();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a collection of window objects.
|
||||
*
|
||||
* Note that collection indices are always 1-based.
|
||||
*
|
||||
* You can retrieve all the windows using
|
||||
* <code>iTunes.getWindows()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITWindowCollection {
|
||||
|
||||
protected Dispatch object;
|
||||
|
||||
public ITWindowCollection(Dispatch d) {
|
||||
object = d;
|
||||
}
|
||||
|
||||
// TODO: iTunes.getWindows()
|
||||
|
||||
/**
|
||||
* Returns the number of playlists in the collection.
|
||||
* @return Returns the number of playlists in the collection.
|
||||
*/
|
||||
public int getCount() {
|
||||
return Dispatch.get(object, "Count").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITWindow object corresponding to the given index (1-based).
|
||||
* @param index Index of the playlist to retrieve, must be less than or
|
||||
* equal to <code>ITWindowCollection.getCount()</code>.
|
||||
* @return Returns an ITWindow object corresponding to the given index.
|
||||
* Will be set to NULL if no playlist could be retrieved.
|
||||
*/
|
||||
public ITWindow getItem (int index) {
|
||||
Dispatch item = Dispatch.call(object, "Item", index).toDispatch();
|
||||
return new ITWindow(item);
|
||||
}
|
||||
/**
|
||||
* Returns an ITWindow object with the specified name.
|
||||
* @param name The name of the window to retrieve.
|
||||
* @return Returns an ITWindow object corresponding to the given index.
|
||||
* Will be set to NULL if no ITWindow could be retrieved.
|
||||
*/
|
||||
public ITWindow ItemByName (String name) {
|
||||
Dispatch item = Dispatch.call(object, "ItemByName", name).toDispatch();
|
||||
return new ITWindow(item);
|
||||
}
|
||||
|
||||
}
|
||||
487
src/main/java/com/dt/iTunesController/iTunes.java
Normal file
487
src/main/java/com/dt/iTunesController/iTunes.java
Normal file
@@ -0,0 +1,487 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.activeX.ActiveXComponent;
|
||||
import com.jacob.com.Dispatch;
|
||||
import com.jacob.com.DispatchEvents;
|
||||
|
||||
/**
|
||||
* Defines the top-level iTunes application object.
|
||||
*
|
||||
* This interface defines the top-level iTunes application object. All other
|
||||
* iTunes interfaces are accessed through this object.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class iTunes {
|
||||
|
||||
ActiveXComponent iTunes;
|
||||
iTunesEvents iTunesEvents;
|
||||
DispatchEvents dispatchEvents;
|
||||
|
||||
/**
|
||||
* Initiate iTunes Controller.
|
||||
*/
|
||||
public iTunes() {
|
||||
iTunes = new ActiveXComponent("iTunes.Application");
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an event handler to the iTunes controller.
|
||||
* @param itef The class that will handle the iTunes events.
|
||||
*/
|
||||
public void addEventHandler(iTunesEventsInterface itef) {
|
||||
iTunesEvents = new iTunesEvents(itef);
|
||||
dispatchEvents = new DispatchEvents(iTunes, iTunesEvents);
|
||||
System.out.println("New event handler added.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Reposition to the beginning of the current track or go to the previous
|
||||
* track if already at start of current track.
|
||||
*/
|
||||
public void backTrack() {
|
||||
iTunes.invoke("BackTrack");
|
||||
}
|
||||
|
||||
/**
|
||||
* Skip forward in a playing track.
|
||||
*/
|
||||
public void fastForward() {
|
||||
iTunes.invoke("FastForward");
|
||||
}
|
||||
|
||||
/**
|
||||
* Advance to the next track in the current playlist.
|
||||
*/
|
||||
public void nextTrack() {
|
||||
iTunes.invoke("NextTrack");
|
||||
}
|
||||
|
||||
/**
|
||||
* Pause playback.
|
||||
*/
|
||||
public void pause() {
|
||||
iTunes.invoke("Pause");
|
||||
}
|
||||
|
||||
/**
|
||||
* Play the currently targeted track.
|
||||
*/
|
||||
public void play() {
|
||||
iTunes.invoke("ASDSDPlay");
|
||||
}
|
||||
|
||||
/**
|
||||
* Play the specified file path, adding it to the library if not already
|
||||
* present.
|
||||
*/
|
||||
public void playFile(String filePath) {
|
||||
iTunes.invoke("PlayFile", filePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle the playing/paused state of the current track.
|
||||
*/
|
||||
public void playPause() {
|
||||
iTunes.invoke("PlayPause");
|
||||
}
|
||||
|
||||
/**
|
||||
* Return to the previous track in the current playlist.
|
||||
*/
|
||||
public void previousTrack() {
|
||||
iTunes.invoke("PreviousTrack");
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable fast forward/rewind and resume playback, if playing.
|
||||
*/
|
||||
public void resume() {
|
||||
iTunes.invoke("Resume");
|
||||
}
|
||||
|
||||
/**
|
||||
* Skip backwards in a playing track.
|
||||
*/
|
||||
public void rewind() {
|
||||
iTunes.invoke("Rewind");
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop playback.
|
||||
*/
|
||||
public void stop() {
|
||||
iTunes.invoke("Stop");
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the current state of the player buttons in the window
|
||||
* containing the currently targeted track. If there is no currently
|
||||
* targeted track, returns the current state of the player buttons
|
||||
* in the main browser window.
|
||||
*/
|
||||
public void getPlayerButtonsState(boolean previousEnabled,
|
||||
String playPause, boolean nextEnabled) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this version of the iTunes type library is compatible
|
||||
* with the specified version.
|
||||
* @param majorVersion Major version of iTunes interface.
|
||||
* @param minorVersion Minor version of iTunes interface.
|
||||
* @return Returns true if this version is compatible with the indicated
|
||||
* interface version.
|
||||
*/
|
||||
public boolean getCheckVersion (int majorVersion, int minorVersion) {
|
||||
return iTunes.invoke("CheckVersion", majorVersion, minorVersion).getBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an IITObject corresponding to the specified IDs.
|
||||
* The object may be a source, playlist, or track.
|
||||
* @param sourceID The ID that identifies the source. Valid for a source,
|
||||
* playlist, or track.
|
||||
* @param playlistID The ID that identifies the playlist. Valid for a
|
||||
* playlist or track. Must be zero for a source.
|
||||
* @param trackID The ID that identifies the track within the playlist.
|
||||
* Valid for a track. Must be zero for a source or playlist.
|
||||
* @param databaseID The ID that identifies the track, independent of its
|
||||
* playlist. Valid for a track. Must be zero for a source or playlist.
|
||||
* @return Returns an IITObject object corresponding to the specified IDs.
|
||||
* Will be set to NULL if no object could be retrieved.
|
||||
*/
|
||||
public ITObject getITObjectByID(int sourceID, int playlistID, int trackID, int databaseID) {
|
||||
Dispatch object = Dispatch.call(iTunes, "GetITObjectByID", sourceID, playlistID, trackID, databaseID).toDispatch();
|
||||
return new ITObject(object);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new playlist in the main library.
|
||||
* @param playlistName The name of the new playlist (may be empty).
|
||||
* @return Returns an ITPlaylist object corresponding to the new playlist.
|
||||
*/
|
||||
public ITPlaylist createPlaylist(String playlistName) {
|
||||
Dispatch cplaylist = Dispatch.call(iTunes, "CreatePlaylist", playlistName).toDispatch();
|
||||
ITPlaylist playlist = new ITPlaylist(cplaylist);
|
||||
ITPlaylistKind playlistKind = playlist.getKind();
|
||||
if (playlistKind == ITPlaylistKind.ITPlaylistKindCD)
|
||||
return new ITAudioCDPlaylist(cplaylist);
|
||||
else if (playlist.getKind() == ITPlaylistKind.ITPlaylistKindLibrary)
|
||||
return new ITLibraryPlaylist(cplaylist);
|
||||
else if (playlist.getKind() == ITPlaylistKind.ITPlaylistKindUser)
|
||||
return new ITUserPlaylist(cplaylist);
|
||||
else
|
||||
return playlist;
|
||||
}
|
||||
|
||||
/**
|
||||
* Open the specified iTunes Store or streaming audio URL.
|
||||
* @param url The URL to open. The length of the URL cannot exceed 512
|
||||
* characters. iTunes Store URLs start with itms:// or itmss://. Streaming
|
||||
* audio URLs start with http://.
|
||||
*/
|
||||
public void openURL (String url) {
|
||||
iTunes.invoke("OpenURL", url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Go to the iTunes Store home page.
|
||||
*/
|
||||
public void gotoMusicStoreHomePage() {
|
||||
iTunes.invoke("GoToMusicStoreHomePage");
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the contents of the iPod.
|
||||
*/
|
||||
public void updateIPod() {
|
||||
iTunes.invoke("UpdateIPod");
|
||||
}
|
||||
|
||||
/**
|
||||
* Exits the iTunes application.
|
||||
*/
|
||||
public void quit() {
|
||||
iTunes.invoke("Quit");
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new EQ preset.
|
||||
* The EQ preset will be created "flat", i.e. the preamp and all band levels
|
||||
* will be set to 0.
|
||||
* EQ preset names cannot start with leading spaces. If you specify a name
|
||||
* that starts with leading spaces they will be stripped out.
|
||||
* If <code>eqPresetName</code> is empty, the EQ preset will be created with
|
||||
* a default name.
|
||||
* @param eqPresetName The name of the new EQ Preset (may be empty)
|
||||
* @return Returns an ITEQPreset object corresponding to the new EQ Preset.
|
||||
*/
|
||||
public ITEQPreset createEQPreset(String eqPresetName) {
|
||||
Dispatch eqPreset = Dispatch.call(iTunes, "CreateEQPreset", eqPresetName).toDispatch();
|
||||
return new ITEQPreset(eqPreset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new playlist in an existing source.
|
||||
* You may not be able to create a playlist in every source. For example,
|
||||
* you cannot create a playlist in an audio CD source, or in an iPod source
|
||||
* if it is in auto update mode.
|
||||
* If <code>playlistName</code> is empty, the playlist will be created with
|
||||
* a default name.
|
||||
* @param playlistName The name of the new playlist (may be empty).
|
||||
* @param source The source that will contain the new playlist.
|
||||
* @return Returns an ITPlaylist object corresponding to the new playlist.
|
||||
*/
|
||||
public ITPlaylist createPlaylistInSource(String playlistName, ITSource source) {
|
||||
Dispatch cplaylist = Dispatch.call(iTunes, "CreatePlaylistInSource", playlistName, source.fetchDispatch()).toDispatch();
|
||||
ITPlaylist playlist = new ITPlaylist(cplaylist);
|
||||
ITPlaylistKind playlistKind = playlist.getKind();
|
||||
if (playlistKind == ITPlaylistKind.ITPlaylistKindCD)
|
||||
return new ITAudioCDPlaylist(cplaylist);
|
||||
else if (playlist.getKind() == ITPlaylistKind.ITPlaylistKindLibrary)
|
||||
return new ITLibraryPlaylist(cplaylist);
|
||||
else if (playlist.getKind() == ITPlaylistKind.ITPlaylistKindUser)
|
||||
return new ITUserPlaylist(cplaylist);
|
||||
else
|
||||
return playlist;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribes to the specified podcast feed URL. Any "unsafe" characters in
|
||||
* the URL should already be converted into their corresponding escape
|
||||
* sequences, iTunes will not do this.
|
||||
* @param url The URL to subscribe to.
|
||||
*/
|
||||
public void subscribeToPodcast(String url) {
|
||||
iTunes.invoke("SubscribeToPodcast", url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates all podcast feeds. This is equivalent to the user pressing the
|
||||
* Update button when Podcasts is selected in the Source list.
|
||||
*/
|
||||
public void updatePodcastFeeds() {
|
||||
iTunes.invoke("UpdatePodcastFeeds");
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new folder in the main library.
|
||||
* If <code>folderName</code> is empty, the folder will be created with a
|
||||
* default name.
|
||||
* @param folderName The name of the new folder (may be empty).
|
||||
* @return Returns an ITPlaylist object corresponding to the new folder.
|
||||
*/
|
||||
public ITUserPlaylist createFolder(String folderName) {
|
||||
Dispatch folder = Dispatch.call(iTunes, "CreateFolder", folderName).toDispatch();
|
||||
return new ITUserPlaylist(folder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new folder in an existing source.
|
||||
* You may not be able to create a folder in every source. For example, you
|
||||
* cannot create a folder in an audio CD source, or in an iPod source if it
|
||||
* is in auto update mode.
|
||||
* If <code>folderName</code> is empty, the folder will be created with a
|
||||
* default name.
|
||||
* @param folderName The name of the new folder (may be empty)
|
||||
* @param iSource The source that will contain the new folder.
|
||||
* @return Returns an ITPlaylist object corresponding to the new folder.
|
||||
*/
|
||||
public ITUserPlaylist createFolderInSource(String folderName, ITSource iSource) {
|
||||
Dispatch folder = Dispatch.call(iTunes, "CreateFolderInSource", folderName, iSource.fetchDispatch()).toDispatch();
|
||||
return new ITUserPlaylist(folder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a collection of music sources (music library, CD, device, etc.).
|
||||
* @return Collection of ITSource objects.
|
||||
*/
|
||||
public ITSourceCollection getSources() {
|
||||
Dispatch sources = Dispatch.call(iTunes, "Sources").toDispatch();
|
||||
return new ITSourceCollection(sources);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the sound output volume (0=minimum, 100=maximum).
|
||||
* @param volume New sound output volume
|
||||
*/
|
||||
public void setSoundVolume(int volume) {
|
||||
iTunes.setProperty("SoundVolume", volume);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the sound output volume (0=minimum, 100=maximum).
|
||||
* @return Current sound output volume
|
||||
*/
|
||||
public int getSoundVolume() {
|
||||
return iTunes.getPropertyAsInt("SoundVolume");
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets sound output mute state.
|
||||
* @param shouldMute If true, sound output will be muted.
|
||||
*/
|
||||
public void setMute(boolean shouldMute) {
|
||||
iTunes.setProperty("Mute", shouldMute);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the sound output is muted.
|
||||
* @return True if sound output is muted.
|
||||
*/
|
||||
public boolean getMute() {
|
||||
return iTunes.getPropertyAsBoolean("Mute");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current player state.
|
||||
* @return Returns the current player state.
|
||||
*/
|
||||
public ITPlayerState getPlayerState() {
|
||||
return ITPlayerState.values()[Dispatch.get(iTunes, "PlayerState").getInt()];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the player's position within the currently playing track in
|
||||
* seconds.
|
||||
* If playerPos specifies a position before the beginning of the track,
|
||||
* the position will be set to the beginning. If playerPos specifies a
|
||||
* position after the end of the track, the position will be set to the
|
||||
* end.
|
||||
* @param playerPos The player's position within the currently playing
|
||||
* track in seconds.
|
||||
*/
|
||||
public void setPlayerPosition(int playerPos) {
|
||||
iTunes.setProperty("playerPosition", playerPos);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the player's position within the currently playing track in
|
||||
* seconds.
|
||||
* @return The player's position within the currently playing track in
|
||||
* seconds.
|
||||
*/
|
||||
public int getPlayerPosition() {
|
||||
return iTunes.getPropertyAsInt("playerPosition");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the source that represents the main library.
|
||||
* You can also find the main library source by iterating over
|
||||
* <code>iTunes.getSources()</code> and looking for an <code>ITSource</code>
|
||||
* of kind <code>ITSourceKindLibrary</code>.
|
||||
* @return Returns the source that represents the main library.
|
||||
*/
|
||||
public ITSource getLibrarySource() {
|
||||
Dispatch lsource = iTunes.getProperty("LibrarySource").toDispatch();
|
||||
return new ITSource(lsource);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the main library playlist in the main library source.
|
||||
* @return An IITLibraryPlaylist object corresponding to the main library
|
||||
* playlist.
|
||||
*/
|
||||
public ITLibraryPlaylist getLibraryPlaylist() {
|
||||
Dispatch lplaylist = iTunes.getProperty("LibraryPlaylist").toDispatch();
|
||||
return new ITLibraryPlaylist(lplaylist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the currently targetd track.
|
||||
* @return An ITTrack object corresponding to the currently targeted track.
|
||||
* Will be set to NULL if there is no currently targeted track.
|
||||
*/
|
||||
public ITTrack getCurrentTrack() {
|
||||
Dispatch item = iTunes.getProperty("CurrentTrack").toDispatch();
|
||||
ITTrack track = new ITTrack(item);
|
||||
if (track.getKind()==ITTrackKind.ITTrackKindFile) {
|
||||
return new ITFileOrCDTrack(item);
|
||||
} else if (track.getKind()==ITTrackKind.ITTrackKindCD) {
|
||||
return new ITFileOrCDTrack(item);
|
||||
} else if (track.getKind()==ITTrackKind.ITTrackKindURL ) {
|
||||
return new ITURLTrack(item);
|
||||
} else {
|
||||
return track;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the playlist containing the currently targeted track.
|
||||
* @return An ITPlaylist object corresponding to the playlist containing the
|
||||
* currently targeted track.
|
||||
* Will be set to NULL if there is no currently targeted playlist.
|
||||
*/
|
||||
public ITPlaylist getCurrentPlaylist() {
|
||||
Dispatch cplaylist = iTunes.getProperty("CurrentPlaylist").toDispatch();
|
||||
ITPlaylist playlist = new ITPlaylist(cplaylist);
|
||||
ITPlaylistKind playlistKind = playlist.getKind();
|
||||
if (playlistKind == ITPlaylistKind.ITPlaylistKindCD)
|
||||
return new ITAudioCDPlaylist(cplaylist);
|
||||
else if (playlist.getKind() == ITPlaylistKind.ITPlaylistKindLibrary)
|
||||
return new ITLibraryPlaylist(cplaylist);
|
||||
else if (playlist.getKind() == ITPlaylistKind.ITPlaylistKindUser)
|
||||
return new ITUserPlaylist(cplaylist);
|
||||
else
|
||||
return playlist;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a collection containing the currently selected track or tracks.
|
||||
* The frontmost visible window in iTunes must be a browser or playlist
|
||||
* window. If there is no frontmost visible window (e.g. iTunes is minimized
|
||||
* to the system tray), the main browser window is used.
|
||||
* @return Collection of ITrack objects.
|
||||
* Will be set to NULL if there is no current selection.
|
||||
*/
|
||||
public ITTrackCollection getSelectedTracks() {
|
||||
Dispatch stracks = iTunes.getProperty("SelectedTracks").toDispatch();
|
||||
return new ITTrackCollection(stracks);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the version of the iTunes application.
|
||||
* @return
|
||||
*/
|
||||
public String getVersion() {
|
||||
return iTunes.getPropertyAsString("Version");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the high 32 bits of the persistent ID of the specified IITObject.
|
||||
* See the documentation on IITObject for more information on persistent
|
||||
* IDs.
|
||||
*
|
||||
* The object may be a source, playlist, or track.
|
||||
* @param iObject The object to fetch the High Persistent ID.
|
||||
* @return The high 32 bits of the 64-bit persistent ID.
|
||||
*/
|
||||
public long getITObjectPersistentIDHigh (ITObject iObject) {
|
||||
Dispatch object = iObject.fetchDispatch();
|
||||
return Dispatch.call(object, "GetObjectPersistentIDHigh", object).getLong();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the low 32 bits of the persistent ID of the specified IITObject.
|
||||
* See the documentation on IITObject for more information on persistent
|
||||
* IDs.
|
||||
*
|
||||
* The object may be a source, playlist, or track.
|
||||
* @param iObject The object to fetch the Low Persistent ID.
|
||||
* @return The low 32 bits of the 64-bit persistent ID.
|
||||
*/
|
||||
public long getITObjectPersistentIDLow (ITObject iObject) {
|
||||
Dispatch object = iObject.fetchDispatch();
|
||||
return Dispatch.call(object, "GetObjectPersistentIDLow", object).getLong();
|
||||
}
|
||||
|
||||
public ITObjectPersistentID getObjectPersistentIDs(ITObject iObject){
|
||||
return new ITObjectPersistentID(getITObjectPersistentIDHigh(iObject),getITObjectPersistentIDLow(iObject));
|
||||
}
|
||||
|
||||
public ITBrowserWindow getBrowserWindow(){
|
||||
Dispatch window = iTunes.getProperty("BrowserWindow").toDispatch();
|
||||
return new ITBrowserWindow(window);
|
||||
}
|
||||
}
|
||||
62
src/main/java/com/dt/iTunesController/iTunesEvents.java
Normal file
62
src/main/java/com/dt/iTunesController/iTunesEvents.java
Normal file
@@ -0,0 +1,62 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
import com.jacob.com.Variant;
|
||||
|
||||
/**
|
||||
* This class is used to forward all iTunes COM Events to a class that
|
||||
* implements <code>iTunesEventsInterface</code>. To receive events, create
|
||||
* a class that implements the interface, and then use
|
||||
* <code>iTunes.addEventHandler()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class iTunesEvents {
|
||||
|
||||
private iTunesEventsInterface eventHandler;
|
||||
|
||||
public iTunesEvents (iTunesEventsInterface itef) {
|
||||
eventHandler = itef;
|
||||
}
|
||||
|
||||
public void OnDatabaseChangedEvent(Variant[] args) {
|
||||
// Not currently implemented
|
||||
}
|
||||
|
||||
public void OnPlayerPlayEvent(Variant[] args) {
|
||||
ITTrack itt = new ITTrack((Dispatch)args[0].getDispatch());
|
||||
eventHandler.onPlayerPlayEvent(itt);
|
||||
}
|
||||
|
||||
public void OnPlayerStopEvent(Variant[] args) {
|
||||
ITTrack itt = new ITTrack((Dispatch)args[0].getDispatch());
|
||||
eventHandler.onPlayerStopEvent(itt);
|
||||
}
|
||||
|
||||
public void OnPlayerPlayingTrackChangedEvent(Variant[] args) {
|
||||
ITTrack itt = new ITTrack((Dispatch)args[0].getDispatch());
|
||||
eventHandler.onPlayerPlayingTrackChangedEvent(itt);
|
||||
}
|
||||
|
||||
public void OnCOMCallsDisabledEvent(Variant[] args) {
|
||||
ITCOMDisabledReason reason = ITCOMDisabledReason.values()[args[0].getInt()];
|
||||
eventHandler.onCOMCallsDisabledEvent(reason);
|
||||
}
|
||||
|
||||
public void OnCOMCallsEnabledEvent(Variant[] args) {
|
||||
eventHandler.onCOMCallsEnabledEvent();
|
||||
}
|
||||
|
||||
public void OnQuittingEvent(Variant[] args) {
|
||||
eventHandler.onQuittingEvent();
|
||||
}
|
||||
|
||||
public void OnAboutToPromptUserToQuitEvent(Variant[] args) {
|
||||
eventHandler.onAboutToPromptUserToQuitEvent();
|
||||
}
|
||||
|
||||
public void OnSoundVolumeChangedEvent(Variant[] args) {
|
||||
eventHandler.onSoundVolumeChangedEvent(args[0].getInt());
|
||||
}
|
||||
|
||||
}
|
||||
115
src/main/java/com/dt/iTunesController/iTunesEventsInterface.java
Normal file
115
src/main/java/com/dt/iTunesController/iTunesEventsInterface.java
Normal file
@@ -0,0 +1,115 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Interface for receiving iTunes events.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public interface iTunesEventsInterface {
|
||||
|
||||
/**
|
||||
* <strong>Not currently implemented</strong>.
|
||||
*
|
||||
* The ITEventDatabaseChanged event is fired when the iTunes database is
|
||||
* changed.
|
||||
*
|
||||
* Each parameter is a two-dimensional array of integers. The first
|
||||
* dimension is the number of objects. The second dimension is always 4 and
|
||||
* specifies each of the 4 ITObject IDs, where index 0 is the source ID,
|
||||
* index 1 is the playlist ID, index 2 is the track ID, and index 3 is the
|
||||
* track database ID. For more information on object IDs, see
|
||||
* <code>ITObject</code>.
|
||||
*
|
||||
* Note that you can use <code>iTunes.getITObjectByID()</code> to retrieve
|
||||
* changed ITObject, but not for deleted objects (since they no longer
|
||||
* exist).
|
||||
*
|
||||
* @param deletedObjectIDs
|
||||
* @param changedObjectIDs
|
||||
*/
|
||||
public void onDatabaseChangedEvent(int[][] deletedObjectIDs, int[][] changedObjectIDs);
|
||||
|
||||
/**
|
||||
* The ITEventPlayerPlay event is fired when a track begins playing.
|
||||
* @param iTrack An ITTrack object corresponding to the track that has
|
||||
* started playing.
|
||||
*/
|
||||
public void onPlayerPlayEvent (ITTrack iTrack);
|
||||
|
||||
/**
|
||||
* The ITEventPlayerStop event is fired when a track stops playing.
|
||||
* @param iTrack An ITTrack object corresponding to the track that has
|
||||
* stopped playing.
|
||||
*/
|
||||
public void onPlayerStopEvent (ITTrack iTrack);
|
||||
|
||||
/**
|
||||
* The ITEventPlayerPlayingTrackChanged event is fired when information
|
||||
* about the currently playing track has changed.
|
||||
* This event is fired when the user changes information about the currently
|
||||
* playing track (e.g. the name of the track).
|
||||
* This event is also fired when iTunes plays the next joined CD track in a
|
||||
* CD playlist, since joined CD tracks are treated as a single track.
|
||||
* @param iTrack An ITTrack object corresponding to the track that is now
|
||||
* playing.
|
||||
*/
|
||||
public void onPlayerPlayingTrackChangedEvent(ITTrack iTrack);
|
||||
|
||||
/**
|
||||
* The ITEventCOMCallsDisabled event is fired when calls to the iTunes COM
|
||||
* interface will be deferred.
|
||||
* Typically, iTunes will defer COM calls when any modal dialog is being
|
||||
* displayed. When the user dismisses the last modal dialog, COM calls will
|
||||
* be enabled again, and any deferred COM calls will be executed. You can
|
||||
* use this event to avoid making a COM call which will be deferred.
|
||||
* @param reason The reason the COM interface is being disabled. This is
|
||||
* typically <code>ITCOMDisabledReasonDialog</code>.
|
||||
*/
|
||||
public void onCOMCallsDisabledEvent(ITCOMDisabledReason reason);
|
||||
|
||||
/**
|
||||
* The ITEventCOMCallsEnabled event is fired when calls to the iTunes COM
|
||||
* interface will no longer be deferred.
|
||||
* Typically, iTunes will defer COM calls when any modal dialog is being
|
||||
* displayed. When the user dismisses the last modal dialog, COM calls will
|
||||
* be enabled again, and any deferred COM calls will be executed.
|
||||
*/
|
||||
public void onCOMCallsEnabledEvent();
|
||||
|
||||
/**
|
||||
* The ITEventQuitting event is fired when iTunes is about to quit.
|
||||
* If the user attempts to quit iTunes while a client still has outstanding
|
||||
* iTunes COM objects instantiated, iTunes will display a warning dialog.
|
||||
* The user can still choose to quit iTunes anyway, in which case this event
|
||||
* will be fired. After this event is fired, any existing iTunes COM objects
|
||||
* will no longer be valid.
|
||||
* This event is only used to notify clients that iTunes is quitting,
|
||||
* clients cannot prevent this from happening.
|
||||
*/
|
||||
public void onQuittingEvent();
|
||||
|
||||
/**
|
||||
* The ITEventAboutToPromptUserToQuit event is fired when iTunes is about
|
||||
* prompt the user to quit.
|
||||
* This event gives clients the opportunity to prevent the warning dialog
|
||||
* prompt from occurring.
|
||||
* If the user attempts to quit iTunes while a client still has outstanding
|
||||
* iTunes COM objects instantiated, iTunes will display a warning dialog.
|
||||
* This event is fired just before the warning dialog is shown. iTunes will
|
||||
* then wait up to 5 seconds for clients to release any outstanding iTunes
|
||||
* COM objects. If all objects are released during this time, the warning
|
||||
* dialog will not be shown and iTunes will quit immediately.
|
||||
* Otherwise, the warning dialog will be shown. If the user chooses to quit
|
||||
* iTunes anyway, the ITEventQuitting event is fired. See
|
||||
* <code>iTunesEventsInterface.onQuittingEvent()</code> for more details.
|
||||
*/
|
||||
public void onAboutToPromptUserToQuitEvent();
|
||||
|
||||
/**
|
||||
* The ITEventSoundVolumeChanged event is fired when the sound output volume
|
||||
* has changed.
|
||||
* @param newVolume The new sound output volume (0 = minimum, 100 = maximum).
|
||||
*/
|
||||
public void onSoundVolumeChangedEvent(int newVolume);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user