Selectors aanzienlijk algemener gemaakt en alle bijbehorende aanpassingen gemaakt. Devices en applications zijn Activatable's. Ze worden eenmalig geïnitialiseerd. Hierbij worden alleen broodnodige dingen gedaan, maar applicaties worden nog niet gestart en er wordt nog niet naar devices gezocht. Dat gebeurd pas als er wordt geactiveerd. Als er wordt gedeactiveerd moet het object beschikbaar blijven, alleen moet de verbinding met de applicatie of het device tijdelijk worden onderbroken, om vervolgens weer opnieuw geactiveerd te kunnen worden. Pas als de exit methode wordt aangeroepen, dan moet er definitief worden verbroken. Deze methodiek moet overal nog worden ingevoerd! Er moet nog worden gewerkt aan een systeem zodat de selector ziet of een applicatie of device actief is. Het liefst met zo'n wait notify achtige truck.
This commit is contained in:
14
java/src/pm/application/ApplicationSelector.java
Normal file
14
java/src/pm/application/ApplicationSelector.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package pm.application;
|
||||
|
||||
import pm.Application;
|
||||
import pm.Selector;
|
||||
|
||||
public class ApplicationSelector extends Selector<Application> {
|
||||
protected static final long serialVersionUID = 1L;
|
||||
|
||||
protected final static String TITLE = "MIMIS Application Selector";
|
||||
|
||||
public ApplicationSelector(Application[] applicationArray) {
|
||||
super(applicationArray);
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,6 @@ package pm.application.cmd;
|
||||
import java.io.IOException;
|
||||
|
||||
import pm.Application;
|
||||
import pm.exception.application.ApplicationExitException;
|
||||
import pm.exception.application.ApplicationInitialiseException;
|
||||
import pm.util.Native;
|
||||
|
||||
public abstract class CMDApplication extends Application {
|
||||
@@ -15,11 +13,12 @@ public abstract class CMDApplication extends Application {
|
||||
protected Process process;
|
||||
|
||||
public CMDApplication(String program, String title) {
|
||||
super(title);
|
||||
this.program = program;
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public void initialise() throws ApplicationInitialiseException {
|
||||
public void initialise() {
|
||||
String key = String.format("%s\\%s", REGISTRY, program);
|
||||
// Check of naam is gevonden in register
|
||||
String path = Native.getValue(key);
|
||||
@@ -29,16 +28,14 @@ public abstract class CMDApplication extends Application {
|
||||
process = Runtime.getRuntime().exec(command);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
throw new ApplicationInitialiseException();
|
||||
//throw new ApplicationInitialiseException();
|
||||
}
|
||||
}
|
||||
|
||||
public void exit() throws ApplicationExitException {
|
||||
public void exit() {
|
||||
if (process != null) {
|
||||
process.destroy();
|
||||
}
|
||||
super.exit();
|
||||
}
|
||||
|
||||
abstract public String title();
|
||||
}
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
package pm.application.cmd.windows;
|
||||
|
||||
import pm.application.cmd.CMDApplication;
|
||||
import pm.exception.application.ApplicationExitException;
|
||||
import pm.exception.application.ApplicationInitialiseException;
|
||||
import pm.util.Windows;
|
||||
import pm.value.Command;
|
||||
import pm.value.Key;
|
||||
import pm.value.Type;
|
||||
|
||||
abstract public class WindowsApplication extends CMDApplication {
|
||||
public abstract class WindowsApplication extends CMDApplication {
|
||||
protected final static int TERMINATE_SLEEP = 500;
|
||||
protected final static int START_SLEEP = 500;
|
||||
|
||||
@@ -23,7 +21,7 @@ abstract public class WindowsApplication extends CMDApplication {
|
||||
handle = -1;
|
||||
}
|
||||
|
||||
public void initialise() throws ApplicationInitialiseException {
|
||||
public void initialise() {
|
||||
handle = Windows.findWindow(name, null);
|
||||
if (handle < 1) {
|
||||
super.initialise();
|
||||
@@ -31,7 +29,7 @@ abstract public class WindowsApplication extends CMDApplication {
|
||||
handle = Windows.findWindow(name, null);
|
||||
}
|
||||
if (handle < 1) {
|
||||
throw new ApplicationInitialiseException();
|
||||
//throw new ApplicationInitialiseException();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,8 +35,4 @@ public class GomPlayerApplication extends WindowsApplication {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public String title() {
|
||||
return TITLE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package pm.application.windows.winamp;
|
||||
package pm.application.cmd.windows.winamp;
|
||||
|
||||
import pm.application.cmd.windows.WindowsApplication;
|
||||
import pm.value.Action;
|
||||
@@ -2,7 +2,6 @@ package pm.application.cmd.windows.wmp;
|
||||
|
||||
import pm.application.cmd.windows.WindowsApplication;
|
||||
import pm.value.Action;
|
||||
import pm.value.Command;
|
||||
|
||||
public class WMPApplication extends WindowsApplication {
|
||||
protected final static String PROGRAM = "wmplayer.exe";
|
||||
@@ -49,8 +48,4 @@ public class WMPApplication extends WindowsApplication {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public String title() {
|
||||
return TITLE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
package pm.application.example;
|
||||
|
||||
import pm.Application;
|
||||
import pm.value.Action;
|
||||
|
||||
public class ExampleApplication extends Application {
|
||||
protected void action(Action action) {
|
||||
System.out.println("ExampleApplication: " + action);
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package pm.application.itunes;
|
||||
|
||||
import pm.Application;
|
||||
import pm.event.Feedback;
|
||||
import pm.exception.application.ApplicationExitException;
|
||||
import pm.value.Action;
|
||||
|
||||
import com.dt.iTunesController.ITCOMDisabledReason;
|
||||
@@ -11,7 +10,7 @@ import com.dt.iTunesController.iTunes;
|
||||
import com.dt.iTunesController.iTunesEventsInterface;
|
||||
|
||||
public class iTunesApplication extends Application implements iTunesEventsInterface {
|
||||
protected static final String NAME = "iTunes";
|
||||
protected static final String TITLE = "iTunes";
|
||||
|
||||
protected static final int POSTION_CHANGE_RATE = 1;
|
||||
protected static final int VOLUME_CHANGE_RATE = 5;
|
||||
@@ -21,22 +20,22 @@ public class iTunesApplication extends Application implements iTunesEventsInterf
|
||||
protected iTunes iTunes;
|
||||
|
||||
public iTunesApplication() {
|
||||
super();
|
||||
super(TITLE);
|
||||
iTunes = new iTunes();
|
||||
}
|
||||
|
||||
public void initialise() {
|
||||
public void activate() {
|
||||
iTunes.connect();
|
||||
iTunes.addEventHandler(this);
|
||||
}
|
||||
|
||||
public void exit() throws ApplicationExitException {
|
||||
public void exit() {
|
||||
System.out.println("Exit iTunesApplication");
|
||||
super.exit();
|
||||
try {
|
||||
iTunes.quit(); // Todo: wachten totdat ook daadwerkelijk gestart? Anders wordt iTunes niet afgesloten.
|
||||
} catch (Exception e) {
|
||||
throw new ApplicationExitException();
|
||||
//throw new ApplicationExitException();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,12 +90,16 @@ public class iTunesApplication extends Application implements iTunesEventsInterf
|
||||
/* iTunesEventInterface => naar eigen class? */
|
||||
public void onDatabaseChangedEvent(int[][] deletedObjectIDs, int[][] changedObjectIDs) {}
|
||||
public void onPlayerPlayEvent(ITTrack iTrack) {
|
||||
System.out.println("iTunes play");
|
||||
eventSpreader.add(new Feedback());
|
||||
if (active) {
|
||||
System.out.println("iTunes play");
|
||||
eventSpreader.add(new Feedback());
|
||||
}
|
||||
}
|
||||
public void onPlayerStopEvent(ITTrack iTrack) {
|
||||
System.out.println("iTunes stop");
|
||||
eventSpreader.add(new Feedback());
|
||||
if (active) {
|
||||
System.out.println("iTunes stop");
|
||||
eventSpreader.add(new Feedback());
|
||||
}
|
||||
}
|
||||
public void onPlayerPlayingTrackChangedEvent(ITTrack iTrack) {}
|
||||
public void onCOMCallsDisabledEvent(ITCOMDisabledReason reason) {}
|
||||
@@ -104,8 +107,4 @@ public class iTunesApplication extends Application implements iTunesEventsInterf
|
||||
public void onQuittingEvent() {}
|
||||
public void onAboutToPromptUserToQuitEvent() {}
|
||||
public void onSoundVolumeChangedEvent(int newVolume) {}
|
||||
|
||||
public String title() {
|
||||
return NAME;
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,6 @@ import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
import pm.application.cmd.CMDApplication;
|
||||
import pm.exception.application.ApplicationInitialiseException;
|
||||
import pm.value.Action;
|
||||
|
||||
public class VLCApplication extends CMDApplication {
|
||||
@@ -26,16 +25,11 @@ public class VLCApplication extends CMDApplication {
|
||||
super(PROGRAM, TITLE);
|
||||
}
|
||||
|
||||
public void initialise() throws ApplicationInitialiseException {
|
||||
super.initialise();
|
||||
}
|
||||
|
||||
|
||||
public void command(String command) {
|
||||
String request = "http://" + HOST + ":" + PORT + "/requests/status.xml?command=" + command;
|
||||
try {
|
||||
int response = ((HttpURLConnection)(new URL(request)).openConnection()).getResponseCode();
|
||||
//System.out.printf("Response: %d\n", response);
|
||||
System.out.printf("Response: %d\n", response);
|
||||
} catch (MalformedURLException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
package pm.application.winamp;
|
||||
|
||||
import pm.Application;
|
||||
import pm.exception.application.ApplicationExitException;
|
||||
import pm.exception.application.ApplicationInitialiseException;
|
||||
import pm.value.Action;
|
||||
|
||||
import com.qotsa.exception.InvalidHandle;
|
||||
import com.qotsa.exception.InvalidParameter;
|
||||
import com.qotsa.jni.controller.WinampController;
|
||||
|
||||
public class WinampApplication extends Application {
|
||||
protected static final String TITLE = "Winamp";
|
||||
|
||||
protected boolean muted;
|
||||
protected int volume;
|
||||
|
||||
public void initialise() throws ApplicationInitialiseException {
|
||||
try {
|
||||
WinampController.run();
|
||||
volume = 0; // UnsatisfiedLinkError: com.qotsa.jni.controller.JNIWinamp.getVolume()I
|
||||
muted = volume == 0;
|
||||
} catch (Exception e) {
|
||||
throw new ApplicationInitialiseException();
|
||||
}
|
||||
}
|
||||
|
||||
public void exit() throws ApplicationExitException {
|
||||
System.out.println("Exit WinampApplication");
|
||||
super.exit();
|
||||
try {
|
||||
WinampController.exit(); // Todo: wachten totdat ook daadwerkelijk gestart? Anders crashed Winamp.
|
||||
} catch (InvalidHandle e) {
|
||||
throw new ApplicationExitException();
|
||||
}
|
||||
}
|
||||
|
||||
protected void action(Action action) {
|
||||
System.out.println("WinampApplication: " + action);
|
||||
try {
|
||||
switch (action) {
|
||||
case PLAY:
|
||||
WinampController.play();
|
||||
case NEXT:
|
||||
WinampController.nextTrack();
|
||||
break;
|
||||
case PREVIOUS:
|
||||
WinampController.previousTrack();
|
||||
break;
|
||||
case FORWARD:
|
||||
WinampController.fwd5Secs();
|
||||
break;
|
||||
case REWIND:
|
||||
WinampController.rew5Secs();
|
||||
break;
|
||||
case MUTE:
|
||||
toggleMute();
|
||||
break;
|
||||
case VOLUME_UP:
|
||||
WinampController.increaseVolume();
|
||||
break;
|
||||
case VOLUME_DOWN:
|
||||
WinampController.decreaseVolume();
|
||||
break;
|
||||
}
|
||||
} catch (InvalidHandle e) {}
|
||||
}
|
||||
|
||||
protected void toggleMute() throws InvalidHandle {
|
||||
if (!muted) {
|
||||
volume = WinampController.getVolume();
|
||||
}
|
||||
try {
|
||||
WinampController.setVolume(muted ? volume : 0);
|
||||
} catch (InvalidParameter e) {}
|
||||
muted = !muted;
|
||||
}
|
||||
|
||||
public String title() {
|
||||
return TITLE;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user