UserAlertspublic class UserAlerts extends Object Contains methods to alert the user of certain events. |
Fields Summary |
---|
private AudioClip | audio_clip | private String | audio_resource | private org.gudy.azureus2.core3.util.AEMonitor | this_mon | private boolean | startup |
Constructors Summary |
---|
public UserAlerts(org.gudy.azureus2.core3.global.GlobalManager global_manager)
final DownloadManagerAdapter download_manager_listener =
new DownloadManagerAdapter()
{
public void
downloadComplete(DownloadManager manager)
{
if( !manager.getDownloadState().getFlag( DownloadManagerState.FLAG_LOW_NOISE )){
activityFinished(true, manager.getDisplayName(), manager);
}
}
};
final DiskManagerListener disk_listener =
new DiskManagerListener()
{
public void
stateChanged(
int oldState,
int newState )
{
}
public void
filePriorityChanged(
DiskManagerFileInfo file )
{
}
public void
pieceDoneChanged(
DiskManagerPiece piece )
{
}
public void
fileAccessModeChanged(
DiskManagerFileInfo file,
int old_mode,
int new_mode )
{
DownloadManager dm = file.getDownloadManager();
if ( old_mode == DiskManagerFileInfo.WRITE &&
new_mode == DiskManagerFileInfo.READ ){
if( dm == null || !dm.getDownloadState().getFlag( DownloadManagerState.FLAG_LOW_NOISE )){
activityFinished(false, file.getFile(true).getName(), file.getDiskManager());
}
}
/*
System.out.println(
"amc:" +
file.getDownloadManager().getDisplayName() + "/" +
file.getName() + ":" + old_mode + " -> " + new_mode );
*/
}
};
final DownloadManagerDiskListener dm_disk_listener =
new DownloadManagerDiskListener()
{
public void
diskManagerAdded(
DiskManager dm )
{
dm.addListener( disk_listener );
}
public void
diskManagerRemoved(
DiskManager dm )
{
dm.removeListener( disk_listener );
}
public boolean
syncInvokeRequired()
{
return( false );
}
};
global_manager.addListener(
new GlobalManagerAdpater()
{
public void
downloadManagerAdded(DownloadManager manager)
{
// don't pop up for non-persistent as these get added late in the day every time
// so we'll notify for each download every startup
if (!startup && manager.isPersistent()) {
boolean bPopup = COConfigurationManager.getBooleanParameter("Popup Download Added");
if ( bPopup ){
if( !manager.getDownloadState().getFlag( DownloadManagerState.FLAG_LOW_NOISE )){
String popup_text = MessageText.getString("popup.download.added",
new String[] { manager.getDisplayName()
});
Logger.log(new LogAlert(manager, true, LogAlert.AT_INFORMATION, popup_text));
}
}
}
manager.addListener( download_manager_listener );
manager.addDiskListener( dm_disk_listener );
}
public void
downloadManagerRemoved(DownloadManager manager)
{
manager.removeListener(download_manager_listener);
manager.removeDiskListener( dm_disk_listener );
}
public void
destroyed()
{
tidyUp();
}
});
startup = false;
|
Methods Summary |
---|
protected void | activityFinished(boolean download, java.lang.String item_name, java.lang.Object relatedObject)
final String sound_enabler;
final String sound_file;
final String default_sound = "org/gudy/azureus2/ui/icons/downloadFinished.wav";
final String speech_enabler;
final String speech_text;
final String popup_enabler;
final String popup_def_text;
if ( download ){
sound_enabler = "Play Download Finished";
sound_file = "Play Download Finished File";
speech_enabler = "Play Download Finished Announcement";
speech_text = "Play Download Finished Announcement Text";
popup_enabler = "Popup Download Finished";
popup_def_text = "popup.download.finished";
}else{
sound_enabler = "Play File Finished";
sound_file = "Play File Finished File";
speech_enabler = "Play File Finished Announcement";
speech_text = "Play File Finished Announcement Text";
popup_enabler = "Popup File Finished";
popup_def_text = "popup.file.finished";
}
try{
this_mon.enter();
if (COConfigurationManager.getBooleanParameter(popup_enabler)) {
String popup_text = MessageText.getString(popup_def_text, new String[]{item_name});
Logger.log(new LogAlert(relatedObject, true, LogAlert.AT_INFORMATION, popup_text));
}
if(Constants.isOSX) { // OS X cannot concurrently use SWT and AWT
new AEThread("DownloadSound") {
public void runSupport()
{
try {
if(COConfigurationManager.getBooleanParameter( speech_enabler ))
Runtime.getRuntime().exec(new String[]{"say", COConfigurationManager.getStringParameter( speech_text )}); // Speech Synthesis services
if(COConfigurationManager.getBooleanParameter( sound_enabler ))
Runtime.getRuntime().exec(new String[]{"osascript", "-e" ,"beep"}); // Beep alert type is in accordance with System Preferences
Thread.sleep(2500);
}
catch(Throwable e) {}
}
}.start();
}
else if( COConfigurationManager.getBooleanParameter( sound_enabler, false)){
String file = COConfigurationManager.getStringParameter( sound_file );
file = file.trim();
// turn "<default>" into blank
if ( file.startsWith( "<" )){
file = "";
}
if ( audio_clip == null || !file.equals( audio_resource )){
audio_clip = null;
// try explicit file
if ( file.length() != 0 ){
File f = new File( file );
try{
if ( f.exists()){
URL file_url = f.toURL();
audio_clip = Applet.newAudioClip( file_url );
}
}catch( Throwable e ){
Debug.printStackTrace(e);
}finally{
if ( audio_clip == null ){
Logger.log(new LogAlert(relatedObject, LogAlert.UNREPEATABLE,
LogAlert.AT_ERROR, "Failed to load audio file '" + file
+ "'"));
}
}
}
// either non-explicit or explicit missing
if ( audio_clip == null ){
audio_clip = Applet.newAudioClip(UserAlerts.class.getClassLoader().getResource( default_sound ));
}
audio_resource = file;
}
if ( audio_clip != null ){
new AEThread("DownloadSound")
{
public void
runSupport()
{
try{
audio_clip.play();
Thread.sleep(2500);
}catch( Throwable e ){
}
}
}.start();
}
}
}catch( Throwable e ){
Debug.printStackTrace( e );
}finally{
this_mon.exit();
}
| protected void | tidyUp()
/*
The Java audio system keeps some threads running even after playback is finished.
One of them, named "Java Sound event dispatcher", is *not* a daemon
thread and keeps the VM alive.
We have to locate and interrupt it explicitely.
*/
try{
ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
Thread[] threadList = new Thread[threadGroup.activeCount()];
threadGroup.enumerate(threadList);
for (int i = 0; i < threadList.length; i++){
if(threadList[i] != null && "Java Sound event dispatcher".equals(threadList[i].getName())){
threadList[i].interrupt();
}
}
}catch( Throwable e ){
Debug.printStackTrace( e );
}
|
|