1 /*
2  * aTunes
3  * Copyright (C) Alex Aranda, Sylvain Gaudard and contributors
4  *
5  * See http://www.atunes.org/wiki/index.php?title=Contributing for information about contributors
6  *
7  * http://www.atunes.org
8  * http://sourceforge.net/projects/atunes
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  */
20 
21 package net.sourceforge.atunes.kernel.modules.tags;
22 
23 import java.util.Collection;
24 
25 import net.sourceforge.atunes.kernel.PlayListEventListeners;
26 import net.sourceforge.atunes.model.ILocalAudioObject;
27 import net.sourceforge.atunes.model.INavigationHandler;
28 import net.sourceforge.atunes.model.IPlayListHandler;
29 import net.sourceforge.atunes.model.IPlayerHandler;
30 import net.sourceforge.atunes.model.IUIHandler;
31 
32 /**
33  * Refreshes tags after being modified
34  *
35  * @author alex
36  *
37  */
38 public final class RefreshTagAfterModifyRunnable implements Runnable {
39 
40 	private Collection<ILocalAudioObject> audioFilesEditing;
41 	private IPlayListHandler playListHandler;
42 	private IPlayerHandler playerHandler;
43 	private INavigationHandler navigationHandler;
44 	private IUIHandler uiHandler;
45 	private PlayListEventListeners playListEventListeners;
46 
47 	/**
48 	 * @param playListEventListeners
49 	 */
setPlayListEventListeners( final PlayListEventListeners playListEventListeners)50 	public void setPlayListEventListeners(
51 			final PlayListEventListeners playListEventListeners) {
52 		this.playListEventListeners = playListEventListeners;
53 	}
54 
55 	/**
56 	 * @param uiHandler
57 	 */
setUiHandler(final IUIHandler uiHandler)58 	public void setUiHandler(final IUIHandler uiHandler) {
59 		this.uiHandler = uiHandler;
60 	}
61 
62 	/**
63 	 * @param navigationHandler
64 	 */
setNavigationHandler(final INavigationHandler navigationHandler)65 	public void setNavigationHandler(final INavigationHandler navigationHandler) {
66 		this.navigationHandler = navigationHandler;
67 	}
68 
69 	/**
70 	 * @param playerHandler
71 	 */
setPlayerHandler(final IPlayerHandler playerHandler)72 	public void setPlayerHandler(final IPlayerHandler playerHandler) {
73 		this.playerHandler = playerHandler;
74 	}
75 
76 	/**
77 	 * @param playListHandler
78 	 */
setPlayListHandler(final IPlayListHandler playListHandler)79 	public void setPlayListHandler(final IPlayListHandler playListHandler) {
80 		this.playListHandler = playListHandler;
81 	}
82 
83 	/**
84 	 * @param audioFilesEditing
85 	 */
setAudioFilesEditing( final Collection<ILocalAudioObject> audioFilesEditing)86 	public void setAudioFilesEditing(
87 			final Collection<ILocalAudioObject> audioFilesEditing) {
88 		this.audioFilesEditing = audioFilesEditing;
89 	}
90 
91 	@Override
run()92 	public void run() {
93 		// update Swing components if necessary
94 		boolean playListContainsRefreshedFile = false;
95 		for (ILocalAudioObject lao : this.audioFilesEditing) {
96 			if (this.playListHandler.getVisiblePlayList().contains(lao)) {
97 				playListContainsRefreshedFile = true;
98 			}
99 
100 			// Changed current playing song
101 			if (this.playListHandler.getCurrentAudioObjectFromCurrentPlayList() != null
102 					&& this.playListHandler
103 							.getCurrentAudioObjectFromCurrentPlayList().equals(
104 									lao)) {
105 
106 				this.playListEventListeners.selectedAudioObjectHasChanged(lao);
107 
108 				if (this.playerHandler.isEnginePlaying()) {
109 					this.uiHandler.updateTitleBar(lao);
110 				}
111 			}
112 		}
113 		if (playListContainsRefreshedFile) {
114 			this.playListHandler.refreshPlayList();
115 		}
116 		this.navigationHandler.repositoryReloaded();
117 	}
118 }