Package org.jampa.controllers

Source Code of org.jampa.controllers.DisplayUpdateOnPodcastUpdateRunnable

/*
* Jampa
* Copyright (C) 2008-2009 J. Devauchelle and contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 3 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*/

package org.jampa.controllers;

import java.beans.PropertyChangeListener;
import java.lang.reflect.InvocationTargetException;
import java.util.List;

import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.action.StatusLineContributionItem;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IPerspectiveListener3;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.PlatformUI;
import org.jampa.Activator;
import org.jampa.controllers.core.DownloadController;
import org.jampa.controllers.core.EqualizerController;
import org.jampa.controllers.core.HSQLController;
import org.jampa.controllers.core.PlaylistController;
import org.jampa.controllers.core.RadioController;
import org.jampa.controllers.core.StatisticsController;
import org.jampa.controllers.events.EventConstants;
import org.jampa.controllers.events.EventController;
import org.jampa.controllers.ui.DNDController;
import org.jampa.controllers.ui.MenuController;
import org.jampa.controllers.ui.ToolbarController;
import org.jampa.controllers.ui.TrayController;
import org.jampa.engine.IEngine;
import org.jampa.engine.PlaybackEngine;
import org.jampa.engine.jlayer.JLayerEngine;
import org.jampa.engine.mplayer.MPlayerEngine;
import org.jampa.gui.components.osd.JampaOSD;
import org.jampa.gui.runnables.DatabaseAdder;
import org.jampa.gui.runnables.LibraryUpdater;
import org.jampa.gui.translations.Messages;
import org.jampa.gui.wizard.firstrun.FirstRunWizard;
import org.jampa.logging.Log;
import org.jampa.model.IAudioItem;
import org.jampa.model.disk.RootDirectoryItem;
import org.jampa.model.library.Library;
import org.jampa.model.podcasts.PodcastItem;
import org.jampa.model.radio.RadioItem;
import org.jampa.net.podcast.PodcastAutomaticUpdater;
import org.jampa.net.podcast.PodcastUpdaterJob;
import org.jampa.net.version.VersionCheckerJobLauncher;
import org.jampa.preferences.PreferenceConstants;
import org.jampa.utils.CommandLineParser;
import org.jampa.utils.Constants;
import org.jampa.utils.SystemUtils;
import org.jampa.utils.Utils;

/**
* The controller class. Owns all others controllers.
* No other controller should be created outside this class.
* @author jerem
*
*/
public class Controller implements PropertyChangeListener {
 
  private static Controller _instance = null;
 
  private RootDirectoryItem _dirList = null;
  private Library _library = null;
  private IEngine _engine = null;
  private EventController _eventController = null;
  private HSQLController _dbController = null;
  private TrayController _trayController = null;
  private PlaylistController _playlistController = null;
  private EqualizerController _equalizerController = null;
  private StatisticsController _statisticsController = null;
  private DNDController _dndController = null;
  private DownloadController _downloadController = null;
  private ToolbarController _toolbarController = null;
  private MenuController _menuController = null;
  private RadioController _radioController = null;
 
  private IStatusLineManager _statuslineManager;
  private StatusLineContributionItem _perspectiveStatusLine;
 
  private CommandLineParser _parser = null;
 
  private IPreferenceStore prefStore;
 
  private PodcastAutomaticUpdater _podcastUpdater = null;

  private boolean _boApplicationStopping = false;   

 
  /**
   * Private constructor, to implement singleton pattern.
   */
  private Controller() {
    prefStore = Activator.getDefault().getPreferenceStore();     
  }
 
  /**
   * Static method to get the current controller instance.
   * @return The current controller instance.
   */
  public static Controller getInstance() {
    if (_instance == null) {
      _instance = new Controller();           
    }
    return _instance;
  }
 
  /**
   * Get the current engine.
   * @return The current engine instance.
   */
  public IEngine getEngine() {
    return _engine;
  }
 
  public EventController getEventController() {
    return _eventController;
  }
 
  /**
   * Get the current PlaylistController.
   * @return The current PlaylistController instance.
   */
  public PlaylistController getPlaylistController() {
    return _playlistController;
  }
 
  /**
   * Get the current library.
   * @return The current library instance.
   */
  public Library getLibrary() {   
    return _library;
  }
 
  /**
   * Get the current TrayController.
   * @return The current TrayController.
   */
  public TrayController getTrayController() {   
    return _trayController;
  }
 
  /**
   * Get the current HSQLController.
   * @return The current HSQLController instance.
   */
  public HSQLController getHSQLController() {   
    return _dbController;
  }
 
  /**
   * Get the current EqualizerController.
   * @return The current EqualizerController instance.
   * @see EqualizerController
   */
  public EqualizerController getEqualizerController() {   
    return _equalizerController;
  }
 
  /**
   * Get the current StatisticsController.
   * @return The current StatisticsController instance.
   * @see StatisticsController
   */
  public StatisticsController getStatisticsController() {
    return _statisticsController;
  }
 
  /**
   * Get the current DNDController.
   * @return The current DNDController instance.
   * @see DNDController
   */
  public DNDController getDNDController() {
    return _dndController;
  }
 
  public DownloadController getDownloadController() {
    return _downloadController;
  }
 
  /**
   * Get the current library root item. 
   * @return The current library root item.
   */
  public RootDirectoryItem getRootDirectoryItem() {
    return _dirList;
  }
 
  public void setCommandLineParser(CommandLineParser parser) {
    _parser = parser;
  }
 
  public CommandLineParser getCommandLineParser() {
    return _parser;
  }
 
  /**
   * Get the preference store.
   * @return The preference store.
   */
  public IPreferenceStore getPreferenceStore() {
    return prefStore;
 
 
  public void setStatusLineManager(IStatusLineManager value) {
    _statuslineManager = value;
  }
 
  public IStatusLineManager getStatusLineManager() {
    return _statuslineManager;
  }
 
  public void initializePerspectiveStatusLine(IStatusLineManager statusLine) {
    _perspectiveStatusLine = new StatusLineContributionItem("PerspectiveId");
    statusLine.add(_perspectiveStatusLine);   
  }
 
  public StatusLineContributionItem getPerspectiveStatusLine() {
    return _perspectiveStatusLine;
  }
 
  public ToolbarController getToolbarController() {
    return _toolbarController;
  }
 
  public MenuController getMenuController() {
    return _menuController;
  }
 
  public RadioController getRadioController() {
    return _radioController;
  }
 
  /**
   * Tell if the application is currently stopping.
   * @return True if the application is stopping
   */
  public boolean isAplicationStopping() {
    return _boApplicationStopping;
  }
 
  /**
   * Set the application stopping flag.
   * @param value
   */
  public void setApplicationStopping(boolean value) {
    _boApplicationStopping = value;
   
    if (_boApplicationStopping) {
      if (_podcastUpdater != null) {
          _podcastUpdater.stopCheck();
          _podcastUpdater = null;
        }
    }
  }
 
  /**
   * Run the first-run wizard.
   */
  public void runWizard() {
    FirstRunWizard wizard = new FirstRunWizard();
   
    WizardDialog dialog = new WizardDialog(Display.getDefault().getActiveShell(), wizard);
    if (dialog.open() != Dialog.OK) {
      PlatformUI.getWorkbench().close();
    }
  }
 
  public void loadEngine() {
    if (PlaybackEngine.getValueOf(getPreferenceStore().getString(PreferenceConstants.PLAYBACK_ENGINE)) == PlaybackEngine.JLAYER) {
      _engine = new JLayerEngine(getPreferenceStore().getInt(PreferenceConstants.PLAYBACK_VOLUME));
    } else if (PlaybackEngine.getValueOf(getPreferenceStore().getString(PreferenceConstants.PLAYBACK_ENGINE)) == PlaybackEngine.MPLAYER) {
      _engine = new MPlayerEngine(getPreferenceStore().getString(PreferenceConstants.P_MPLAYER_PATH), getPreferenceStore().getInt(PreferenceConstants.PLAYBACK_VOLUME));
    }
  }
 
  /**
   * Perform all application initialization. Engine, controllers and library.
   */
  public void initialize() {
    Log.getInstance(Controller.class).debug("Initializing Engine."); //$NON-NLS-1$
   
    loadEngine();
       
    Log.getInstance(Controller.class).debug("Initializing Controllers."); //$NON-NLS-1$
    _eventController = new EventController();
    _menuController = new MenuController();
    _toolbarController = new ToolbarController();
    _dbController = new HSQLController();
    _statisticsController = new StatisticsController();
    _playlistController = new PlaylistController();
    _trayController = new TrayController();
    _equalizerController = new EqualizerController(getPreferenceStore());
    _dndController = new DNDController();
    _downloadController = new DownloadController();
    _radioController = new RadioController();
   
    Log.getInstance(Controller.class).debug("Initializing Library."); //$NON-NLS-1$
    _library = new Library();
   
    getEventController().addAudioItemChangeListener(this);
    getEventController().addPodcastsUpdateChangeListener(this);
    getEventController().addRadioChangeListeners(this);
  }
   
  /**
   * Perform initialization operations.
   * Scan directory structure, and fill the database if the wizard has run.
   */
  public void onApplicationStarted() {   
   
    prefStore.addPropertyChangeListener(new IPropertyChangeListener() {
      public void propertyChange(PropertyChangeEvent event) {
       
        String property = event.getProperty();
       
        if (property.equals(PreferenceConstants.P_LIBRARY_PATH)) {
          Log.getInstance(Controller.class).debug("Library path changed."); //$NON-NLS-1$
          doUpdateLibrary();
        } else if (property.equals(PreferenceConstants.P_MPLAYER_PATH)) {
          getEngine().setEnginePath(getPreferenceStore().getString(PreferenceConstants.P_MPLAYER_PATH));
        } else if (property.equals(PreferenceConstants.DISKVIEW_MERGE_FOLDER)) {
          doScanDirectories();
        } else if (property.equals(PreferenceConstants.PODCAST_AUTOMATIC_UPDATE)) {
          if ((_podcastUpdater != null) &&
              (!getPreferenceStore().getBoolean(PreferenceConstants.PODCAST_AUTOMATIC_UPDATE))) {
            _podcastUpdater.stopCheck();
            _podcastUpdater = null;
          } else if ((_podcastUpdater == null) &&
              (getPreferenceStore().getBoolean(PreferenceConstants.PODCAST_AUTOMATIC_UPDATE))) {
            _podcastUpdater = new PodcastAutomaticUpdater();
            _podcastUpdater.start();
          }
        } else if (property.equals(PreferenceConstants.PODCAST_AUTOMATIC_UPDATE_INTERVAL)) {
          if (_podcastUpdater != null) {
            _podcastUpdater.setNewInterval(getPreferenceStore().getInt(PreferenceConstants.PODCAST_AUTOMATIC_UPDATE_INTERVAL));
          }
        }
       
        // Change of properties for which application restart is needed.
        if ((property.equals(PreferenceConstants.PLAYBACK_ENGINE)) ||
            (property.equals(PreferenceConstants.USE_STATISTICS)) ||
            (property.equals(PreferenceConstants.PLAYERVIEW_SHOW_IN_TOOLBAR)) ||
            (property.equals(PreferenceConstants.PLAYERVIEW_USE_NATIVE_SLIDER)) ||
            (property.equals(PreferenceConstants.PLAYERVIEW_TOOLBAR_SIZE))) {
         
          // Prompt the user to restart
          boolean confirm = MessageDialog.openConfirm(Display.getCurrent().getActiveShell(),
              Messages.getString("Controller.RestartApplicationTitle"), //$NON-NLS-1$
              Messages.getString("Controller.RestartApplicationQuestion")); //$NON-NLS-1$
         
          // Restart
          if (confirm) {
            PlatformUI.getWorkbench().restart();
          }
        }
      }
    });
   
    PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(new IPerspectiveListener3() {
      @Override
      public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {
        if (_perspectiveStatusLine != null) {
          _perspectiveStatusLine.setText(perspective.getLabel());
        }       
      }
     
      @Override
      public void perspectiveSavedAs(IWorkbenchPage page,  IPerspectiveDescriptor oldPerspective, IPerspectiveDescriptor newPerspective) {       
        if (_perspectiveStatusLine != null) {
          _perspectiveStatusLine.setText(newPerspective.getLabel());
        }
      }

      @Override
      public void perspectiveChanged(IWorkbenchPage page,  IPerspectiveDescriptor perspective, String changeId) {}

      @Override
      public void perspectiveClosed(IWorkbenchPage page, IPerspectiveDescriptor perspective) {}

      @Override
      public void perspectiveDeactivated(IWorkbenchPage page,  IPerspectiveDescriptor perspective) {}

      @Override
      public void perspectiveOpened(IWorkbenchPage page, IPerspectiveDescriptor perspective) {}     

      @Override
      public void perspectiveChanged(IWorkbenchPage page,  IPerspectiveDescriptor perspective,  IWorkbenchPartReference partRef, String changeId) {}     
    });
   
    getEqualizerController().loadPresets();
   
    if (getHSQLController().getLibraryTableReseted()) {
      // getLibraryTableReseted() is true either on first run, or after a
      // database update. In both case, we need to scan the library.
      getEngine().setEnginePath(getPreferenceStore().getString(PreferenceConstants.P_MPLAYER_PATH));
      doScanLibrary();
    } else {
      doScanDirectories();
    }
   
    /**
     * Check for library modifications.
     */
    if (getPreferenceStore().getBoolean(PreferenceConstants.AUTOMATIC_LIBRARY_UPDATE)) {
      if (_dirList.countAllFileItems() != getHSQLController().getLibraryRecordCount()) {
        Log.getInstance(Controller.class).info("Library is not synchonized, forced update."); //$NON-NLS-1$
        doUpdateLibrary();
      }
    }
   
    /**
     * Process command line.
     */
    if (getCommandLineParser() != null) {
      if (getCommandLineParser().hasFileOnCLI()) {
        processCLIFiles(getCommandLineParser().getFileList());
      }
    }
   
    /**
     * Check for new version.
     */
    if (getPreferenceStore().getBoolean(PreferenceConstants.VERSION_CHECK_AT_STARTUP)) {
      new VersionCheckerJobLauncher().start();
    }
   
    /**
     * Update podcasts if required.
     */
    if (getPreferenceStore().getBoolean(PreferenceConstants.PODCAST_UPDATE_AT_STARTUP)) {
      new PodcastUpdaterJob(getPlaylistController().getPodcastListAsList()).schedule();
    }
   
    /**
     * Launch podcast updater if required.
     */
    if (getPreferenceStore().getBoolean(PreferenceConstants.PODCAST_AUTOMATIC_UPDATE)) {
      _podcastUpdater = new PodcastAutomaticUpdater();
      _podcastUpdater.start();
    }
   
    getStatusLineManager().setMessage(String.format(Messages.getString("Controller.WelcomeText"),
        Integer.toString(Controller.getInstance().getStatisticsController().getLibraryRecordCount()),
        Utils.seconds2HourString(Controller.getInstance().getStatisticsController().getLibraryTotalTime())));
   
    _perspectiveStatusLine.setText(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getPerspective().getLabel());
 
 
  private void processCLIFiles(List<String> fileList) {
    boolean isFirstItem = true;
    String firstItem = null;
   
    for (int i = 0; i < fileList.size(); i++) {
      String fileName = fileList.get(i);
      if (SystemUtils.isValidAudioFile(fileName)) {
        if (isFirstItem) {
          isFirstItem = false;
          firstItem = fileName;
        }
        getPlaylistController().addFileToPlayList(Constants.DEFAULT_PLAYLIST_ID, fileName, false, false);
      } else if (SystemUtils.isValidPlaylist(fileName)) { 
        String playlistName = getPlaylistController().buildPlaylistNameFromFile(fileName);
        if (isFirstItem) {
          isFirstItem = false;
          firstItem = playlistName;
        }
        getPlaylistController().importPlaylist(playlistName, fileName);
      }
    }
    if ((firstItem != null) &&
        !firstItem.isEmpty()) {     
      if (SystemUtils.isValidAudioFile(firstItem)) {
        getPlaylistController().playFile(Constants.DEFAULT_PLAYLIST_ID, firstItem);
      } else if (getPlaylistController().doesPlaylistExist(firstItem)) {       
        getPlaylistController().playPlaylist(firstItem);
      }
    }
  }
 
  /**
   * Build the directory structure and notify the listeners.
   */
  private void doScanDirectories() {
    List<String> removableDirList = null;
    if (_dirList != null) {
      removableDirList = _dirList.getCurrentRemovableDirList();
    } else {
      removableDirList = null;
    }
    _dirList = new RootDirectoryItem(prefStore.getString(PreferenceConstants.P_LIBRARY_PATH), removableDirList);
    _dirList.scanDirectory();
    getEventController().fireLibraryChange(EventConstants.EVT_LIBRARY_DIRECTORY_CHANGE, null, null);
  }       
 
  /**
   * Build the library structure, and notify listeners.
   */
  public void doScanLibrary() {
   
    getStatusLineManager().setMessage(Messages.getString("Controller.StartLibraryScan"));
   
    getHSQLController().doResetLibraryDatabase();
   
    // Update directories structure
    doScanDirectories();
   
    DatabaseAdder dbAdder = new DatabaseAdder(_dirList);
    ProgressMonitorDialog dialog = new ProgressMonitorDialog(Display.getDefault().getActiveShell());
   
    try {
      dialog.run(true, true, dbAdder);
    } catch (InvocationTargetException e) {
      Log.getInstance(Controller.class).error(e.getMessage());
    } catch (InterruptedException e) {
      Log.getInstance(Controller.class).error(e.getMessage());     
    }
    getHSQLController().doCommitDatabase();
   
    // HSQL updated, _library does not correspond anymore.
    _library = new Library();
   
    getEventController().fireLibraryChange(EventConstants.EVT_LIBRARY_SCAN_CHANGE, null, null);
    // Force reload of AudioItem's, and notify openned playlists to refresh.
    getPlaylistController().invalidateAllLoadedTags();
   
    getStatusLineManager().setMessage(Messages.getString("Controller.EndLibraryScan"));
  }
 
  /**
   * Update the Library. "Updating" means: 1) add the items existing on disk but not in the library; 2) remove the items from the library that do not exists anymore on disk.
   */
  public void doUpdateLibrary() {
    Log.getInstance(Controller.class).info("Start updating library."); //$NON-NLS-1$
   
    getStatusLineManager().setMessage(Messages.getString("Controller.StartLibraryUpdate"));
   
    // First update directories structure
    doScanDirectories();
   
    LibraryUpdater libraryUpdater = new LibraryUpdater(_dirList);
    ProgressMonitorDialog dialog = new ProgressMonitorDialog(Display.getDefault().getActiveShell());             
   
    try {
      dialog.run(true, true, libraryUpdater);
    } catch (InvocationTargetException e) {
      Log.getInstance(Controller.class).error(e.getMessage());
    } catch (InterruptedException e) {
      Log.getInstance(Controller.class).error(e.getMessage());     
    }
    getHSQLController().doCommitDatabase();

    // HSQL updated, _library does not correspond anymore.
    _library = new Library();
   
    getEventController().fireLibraryChange(EventConstants.EVT_LIBRARY_SCAN_CHANGE, null, null);
   
    getStatusLineManager().setMessage(Messages.getString("Controller.EndLibraryUpdate"));
   
    Log.getInstance(Controller.class).info("End of library update."); //$NON-NLS-1$
  }
 
  public void notifyInvalidEngine() {
    Log.getInstance().notifyUser(Messages.getString("Controller.InvalidEngineTitle"), String.format(Messages.getString("Controller.InvalidEngine"), getPreferenceStore().getString(PreferenceConstants.P_MPLAYER_PATH)));
  }
 
  /**
   * Reset the system tray icon tooltip.
   */
  private void onStopPlayback(IAudioItem oldItem) {
    if (!isAplicationStopping()) {
      String message = Constants.APP_NAME + " - " + Messages.getString("Controller.TooltipStopped"); //$NON-NLS-1$ //$NON-NLS-2$
      getTrayController().setToolTipText(message);
     
      PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setText(Constants.APP_NAME);
     
      if (oldItem instanceof RadioItem) {
        getStatusLineManager().setMessage(Messages.getString("Controller.RadioPlaybackStopped"));
      } else {
        getStatusLineManager().setMessage(Messages.getString("Controller.PlaybackStopped"));
      }
    }
  }
 
  /**
   * Update the system tray icon tooltip and application title bar.
   * @param item The current playling item.
   */
  private void updateUI(IAudioItem item) {
    if (!isAplicationStopping()) {
     
      getTrayController().setToolTipText(item.getToolTipMessage());      
      PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setText(item.getTitleBarMessage());
    }
  }
 
  private void showOSD(IAudioItem item) {
    if (!isAplicationStopping()) {
      if (getPreferenceStore().getBoolean(PreferenceConstants.OSD_SHOW)) {
        if (!getPreferenceStore().getBoolean(PreferenceConstants.OSD_ONLY_SHOW_MINIMIZED) ||
            (getPreferenceStore().getBoolean(PreferenceConstants.OSD_ONLY_SHOW_MINIMIZED) &&
                getTrayController().isApplicationMinimized())) {
          new JampaOSD(item.getOSDMessage()).start();
        }
      }
    }
  }
 
  private void onPlayNewItem(IAudioItem item) {
    updateUI(item);
    showOSD(item);
   
    if (!isAplicationStopping()) {
      getStatusLineManager().setMessage(item.getStatusBarMessageOnPlay());
    }
  }
 
  public void notifyMetadataChange() {
    // HSQL updated, _library does not correspond anymore.
    _library = new Library();
    getEventController().fireLibraryChange(EventConstants.EVT_LIBRARY_SCAN_CHANGE, null, null);
  }
 
  private void updateDisplayOnNewPodcastItems(int newItemsCount) {
    if (!isAplicationStopping()) {
      if ((getPreferenceStore().getBoolean(PreferenceConstants.OSD_SHOW_ON_PODCAST_UPDATE)) &&
          (newItemsCount > 0)) {
        String osdMessage = Messages.getString("Controller.NewPodcastItemsTitle") + "\n" +
        String.format(Messages.getString("Controller.NewPodcastItems"), newItemsCount);
        new JampaOSD(osdMessage).start();
      }
      if (newItemsCount >= 0) {
        getStatusLineManager().setMessage(Messages.getString("Controller.NewPodcastItemsTitle") + " " + String.format(Messages.getString("Controller.NewPodcastItems"), newItemsCount));
      }
    }
  }
 
  private void updateDisplayOnPodcastDowloadEnd(IAudioItem item) {
    if (!isAplicationStopping()) {
      if (getPreferenceStore().getBoolean(PreferenceConstants.OSD_SHOW_ON_PODCAST_DOWNLOAD_END)) {
        String osdMessage = Messages.getString("Controller.DownloadEnd") + "\n" + item.getPropertiesList().get(PodcastItem.PODCAST_NAME);
        new JampaOSD(osdMessage).start();
      }
     
      getStatusLineManager().setMessage(Messages.getString("Controller.DownloadEnd") + " " + item.getPropertiesList().get(PodcastItem.PODCAST_NAME));
    }
  }

  @Override
  public void propertyChange(java.beans.PropertyChangeEvent evt) {
   
    if (evt.getPropertyName().equals(EventConstants.EVT_PLAY_NEW_AUDIO_ITEM)) {
      class DisplayUpdateOnPlayNewItem implements Runnable {
        IAudioItem _newItem;
        public DisplayUpdateOnPlayNewItem(IAudioItem newItem) {
          _newItem = newItem;
        }
        public void run() {
          onPlayNewItem(_newItem);
        }
      }
      Display.getDefault().asyncExec(new DisplayUpdateOnPlayNewItem((IAudioItem) evt.getNewValue()));
    }
    if ((evt.getPropertyName().equals(EventConstants.EVT_PAUSE_PLAYBACK)) ||
        (evt.getPropertyName().equals(EventConstants.EVT_RADIO_CHANGE_STREAM_TITLE))) { 
      class RunUpdateUI implements Runnable {
        IAudioItem _newItem;
        public RunUpdateUI(IAudioItem newItem) {
          _newItem = newItem;
        }
        public void run() {
          updateUI(_newItem);
        }
      }
      Display.getDefault().asyncExec(new RunUpdateUI((IAudioItem) evt.getNewValue()));
    }
    if (evt.getPropertyName().equals(EventConstants.EVT_STOP_PLAYBACK)) {
      class DisplayUpdateOnStopPlayback implements Runnable {
       
        private IAudioItem _oldItem;
       
        public DisplayUpdateOnStopPlayback(IAudioItem oldItem) {
          _oldItem = oldItem;
        }
       
        public void run() {
          onStopPlayback(_oldItem);
        }
      }
      Display.getDefault().asyncExec(new DisplayUpdateOnStopPlayback((IAudioItem) evt.getOldValue()));
    }
    if (evt.getPropertyName().equals(EventConstants.EVT_PODCAST_UPDATE_END)) {
      class DisplayUpdateOnPodcastUpdateRunnable implements Runnable {
        int _newItemsCount;
        public DisplayUpdateOnPodcastUpdateRunnable(int newItemsCount) {
          _newItemsCount = newItemsCount;
        }
        public void run() {
          updateDisplayOnNewPodcastItems(_newItemsCount);
        }
      }
      Display.getDefault().asyncExec(new DisplayUpdateOnPodcastUpdateRunnable(((Integer) evt.getNewValue()).intValue()));
    }
    if (evt.getPropertyName().equals(EventConstants.EVT_PODCAST_DOWNLOAD_END)) {
      class DisplayUpdateOnPodcastDownloadEndRunnable implements Runnable {
        IAudioItem _item;
        public DisplayUpdateOnPodcastDownloadEndRunnable(IAudioItem item) {
          _item = item;
        }
        public void run() {
          updateDisplayOnPodcastDowloadEnd(_item);
        }
      }
     
      // getOldValue() : true if download has been cancelled or non finished.
      if (!((Boolean) evt.getOldValue()).booleanValue()) {
        Display.getDefault().asyncExec(new DisplayUpdateOnPodcastDownloadEndRunnable((IAudioItem) evt.getNewValue()));
      }
    }
  }   
   
    public void dispose() {
      if (_podcastUpdater != null) {
        _podcastUpdater.stopCheck();
        _podcastUpdater = null;
      }
    getEventController().removeAudioItemChangeListener(this);
    getEventController().removePodcastsUpdateChangeListener(this);
    getEventController().removeRadioChangeListeners(this);
  }
}
TOP

Related Classes of org.jampa.controllers.DisplayUpdateOnPodcastUpdateRunnable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.