📄 .#ui.java.1.8.2.3
字号:
MediaServer servers = null;
MenuUpdateAlert mua = null;
public void run() {
try {
mua = new MenuUpdateAlert(
"Updating media servers",
(CancelAction)this,
this);
mua.start();
oneppSettings.updateMediaServerList();
LOG.debug("Starting to enum MS");
MediaServer[] msList = oneppSettings.getMediaServerList();
System.out.println("msList.length: " + msList.length);
for(int i = 0; i < msList.length; i++) {
LOG.debug("MS Name: " + msList[i].getFriendlyName());
meServers.addChild(new MenuElement(msList[i].getFriendlyName()));
}
} catch (/*IO*/Exception e) {
LOG.fatal(
"Exception occured while updating media server menu");
LOG.fatal(e);
e.printStackTrace();
} finally {
LOG.debug("Finished updating media server menu");
servers = null;
meServers.addChild(meServersRefresh);
Display d = Display.getDisplay(m);
if (d.getCurrent() == mua) {
LOG.debug("Current displayable is MUA");
d.setCurrent(mua.getPrevDisplayable());
} else {
LOG.debug("Current displayable is " + d.getCurrent());
}
}
oneppMenu.repaint();
}
public void cancel() throws IOException {
if (oneppSettings.isUpdatingMediaServerList()) {
oneppSettings.cancelUpdateMediaServerList();
} else {
throw new IllegalStateException("Currently no discovery going on");
}
}
}
public void favouriteMediaRendererUpdate(String locationUrl, String UDN) {
LOG.debug("updateMediaRendererMenu");
meRenderers.removeAllChildren();
FavouriteMediaRendererUpdate fmrupdateThread = new FavouriteMediaRendererUpdate();
fmrupdateThread.setLocationUrl(locationUrl);
fmrupdateThread.setUDN(UDN);
fmrupdateThread.start();
}
private class FavouriteMediaRendererUpdate extends Thread implements CancelAction {
String locationUrl = "";
String UDN = "";
public void setLocationUrl(String locationUrl) {
this.locationUrl = locationUrl;
}
public void setUDN(String UDN) {
this.UDN = UDN;
}
public void run () {
MenuUpdateAlert mua = null;
try {
oneppSettings.addMediaRendererByLocationUrl(locationUrl);
}
catch (/*IO*/Exception e) {
LOG.fatal(
"Exception occured while adding mediarenderer by device description");
LOG.fatal(e);
e.printStackTrace();
}
try {
MediaRenderer[] mrList = oneppSettings.getMediaRendererList();
System.out.println("mrList.length: " + mrList.length);
if (mrList == null || mrList.length == 0) {
mua = new MenuUpdateAlert(
"Finding favourite media renderers",
(CancelAction)this,
this);
mua.start();
oneppSettings.addMediaRendererByUDN(UDN);
}
for(int i = 0; i < mrList.length; i++) {
LOG.debug("MR Name: " + mrList[i].getFriendlyName());
meRenderers.addChild(new MenuElement(mrList[i].getFriendlyName()));
}
} catch (/*IO*/Exception e) {
LOG.fatal(
"Exception occured while updating (favourite) media renderer menu");
LOG.fatal(e);
e.printStackTrace();
} finally {
LOG.debug("Finished updating media renderer menu");
meRenderers.addChild(meRenderersRefresh);
Display d = Display.getDisplay(m);
if (d.getCurrent() == mua) {
LOG.debug("Current displayable is MUA");
d.setCurrent(mua.getPrevDisplayable());
} else {
LOG.debug("Current displayable is " + d.getCurrent());
}
}
oneppMenu.repaint();
}
public void cancel() throws IOException {
if (oneppSettings.isUpdatingMediaServerList()) {
oneppSettings.cancelUpdateMediaServerList();
} else {
throw new IllegalStateException("Currently not discovery going on");
}
}
}
private void updateMediaRendererMenu() throws IOException, InterruptedException {
LOG.debug("updateMediaRendererMenu");
meRenderers.removeAllChildren();
MediaRendererMenuUpdate mrupdateThread = new MediaRendererMenuUpdate();
mrupdateThread.start();
LOG.debug("updateMediaRendererMenu waiting for thread to finish");
}
private class MediaRendererMenuUpdate extends Thread implements CancelAction {
MenuUpdateAlert mua = null;
MediaRenderer renderers = null;
public void run() {
try {
mua = new MenuUpdateAlert(
"Updating media renderers",
(CancelAction)this,
this);
mua.start();
oneppSettings.updateMediaRendererList();
LOG.debug("Starting to enum MR");
MediaRenderer[] mrList = oneppSettings.getMediaRendererList();
System.out.println("mrList.length: " + mrList.length);
for(int i = 0; i < mrList.length; i++) {
meRenderers.addChild(new MenuElement(mrList[i].getFriendlyName()));
LOG.debug("MR Name: " + mrList[i].getFriendlyName());
}
} catch (/*IO*/Exception e) {
LOG.fatal(
"Exception occured while updating media renderer menu");
LOG.fatal(e);
} finally {
LOG.debug("Update of media renderer menu finished, one way or the other way");
renderers = null;
meRenderers.addChild(meRenderersRefresh);
Display d = Display.getDisplay(m);
if (d.getCurrent() == mua) {
LOG.debug("Current displayable is MUA");
d.setCurrent(mua.getPrevDisplayable());
} else {
LOG.debug("Current displayable is " + d.getCurrent());
LOG.debug("MUA is " + mua);
}
}
}
public void cancel() throws IOException {
if (oneppSettings.isUpdatingMediaRendererList()) {
oneppSettings.cancelUpdateMediaRendererList();
} else {
throw new IllegalStateException("Currently no discovery going on");
}
}
}
private class MenuUpdateAlert extends Alert implements Runnable, CommandListener {
private final Logger LOGMUA = Logger.getLogger("MUA");
Displayable prevDisp;
Gauge progress;
Command stop;
CancelAction action;
Thread owner;
public MenuUpdateAlert(String title, CancelAction cancelAction, Thread ownerThread) {
super(title);
try {
action = cancelAction;
owner = ownerThread;
progress = new Gauge(
null,
false,
Gauge.INDEFINITE,
Gauge.CONTINUOUS_RUNNING);
stop = new Command("Stop", Command.STOP, 1);
addCommand(stop);
setCommandListener(this);
setString("Please wait...");
setTimeout(Alert.FOREVER); // XXX Or something more 'sophisticated'?
setType(AlertType.INFO);
setIndicator(progress);
setImage(Image.createImage("/aml_noalpha.png"));
} catch (IOException ioe) {
LOGMUA.debug("Probably error loading aml_noalpha.png for MenuUpdateAlert");
LOGMUA.debug(ioe);
}
}
public void start() {
LOG.debug("Starting a new thread for this MUA");
Thread t = new Thread(this);
t.start();
LOG.debug("Thread should now be running....");
}
public void run() {
LOG.debug("Running thread. Switching current display to: " + toString());
Display d = Display.getDisplay(m);
prevDisp = d.getCurrent();
d.setCurrent(this);
}
public void commandAction(Command c, Displayable d) {
if (c == stop) {
try {
setString("Stop was pressed. Cancel disco");
LOGMUA.debug("Stop was pressed. Cancel disco");
action.cancel();
owner.interrupt();
} catch (IllegalStateException ise) {
setString(getString() + "\nIllegalStateException while stopping discovery.");
LOGMUA.fatal("IllegalStateException while stopping discovery");
LOGMUA.fatal(ise);
} catch (IOException ioe) {
setString(getString() + "\nIOException while stopping disco");
LOGMUA.fatal("IOException while stopping the discovery");
LOGMUA.fatal(ioe);
// TODO What to do next?
// 1) Change text of this alert to something like
// 'could not stop disco'
// 2) Do the removeCommand anyways...
} finally {
setString(getString() + "\nCleaning up...");
removeCommand(stop);
setCommandListener(null);
addCommand(Alert.DISMISS_COMMAND);
setTimeout(1);
setString(getString() + "\nWhat happends now?!?!?");
setString(getString() + "\nPrevDisp = " + prevDisp);
//disp.setCurrent(LOG.getLogCanvas());
Display disp = Display.getDisplay(m);
disp.setCurrent(prevDisp);
}
} else {
LOGMUA.debug("Unknown command pressed");
setString(getString() + "\r\nUnknown command pressed");
}
}
public Displayable getPrevDisplayable() {
return prevDisp;
}
public String toString() {
return getTitle() + "@" + hashCode();
}
}
/**
* User navigates 'into' or 'right'.
*
* @param me MenuElement which is marked/selected by the user, and where
* the action occurs. Notice that for MenuElementComboShift
* the parent of a sub-MenuElement will be me, and not the
* selected sub-element.
*/
public int menuNavigateInto(MenuElement me) {
if (me == meSetupBack) {
return MENUACTION_DISPLAY_GRANDPARENT;
} else if (me == meSetupRepeat) {
oneppSettings.setRepeatSetting(!oneppSettings.getRepeatSetting());
LOG.debug(
"Repeat setting: " + oneppSettings.getRepeatSetting());
} else if (me == meSetupShuffle) {
oneppSettings.setShuffleSetting(!oneppSettings.getShuffleSetting());
LOG.debug(
"Shuffle setting: " + oneppSettings.getShuffleSetting());
} else if (me == meSetupHostingPort) {
oneppSettings.toggleHostingPortSetting();
LOG.debug(
"Hosting port setting: " + oneppSettings.getHostingPortSetting());
} else if (me == meBrowse) {
LOG.debug("Browse (into)");
// TODO Need to detect which media server is current
LOG.debug("" + meServers.getCurrentIndex() + " " +
meServers.getCurrentChild());
if (meServers.getCurrentChild() == meServersRefresh) {
return MENUACTION_DO_NOTHING;
}
try {
currentMS = oneppSettings.getCurrentMediaServer();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -