package org.limewire.ui.swing.library; import java.io.File; import java.util.List; import javax.swing.SwingUtilities; import org.limewire.core.api.Category; import org.limewire.core.api.URN; import org.limewire.core.api.library.LibraryManager; import org.limewire.core.api.library.LocalFileItem; import org.limewire.core.api.library.SharedFileList; import org.limewire.inject.LazySingleton; import org.limewire.ui.swing.library.navigator.LibraryNavItem; import org.limewire.ui.swing.nav.NavCategory; import org.limewire.ui.swing.nav.NavItem; import org.limewire.ui.swing.nav.NavMediator; import org.limewire.ui.swing.nav.Navigator; import com.google.inject.Inject; import com.google.inject.Provider; @LazySingleton public class LibraryMediator implements NavMediator<LibraryPanel> { public static final String NAME = "Library"; private Provider<LibraryPanel> libraryProvider; private LibraryPanel libraryPanel; private final Provider<Navigator> navigatorProvider; private final Provider<LibraryManager> libraryManager; @Inject public LibraryMediator(Provider<LibraryPanel> libraryProvider, Provider<Navigator> navigatorProvider, Provider<LibraryManager> libraryManager) { this.libraryProvider = libraryProvider; this.navigatorProvider = navigatorProvider; this.libraryManager = libraryManager; } @Override public LibraryPanel getComponent() { if(libraryPanel == null) { libraryPanel = libraryProvider.get(); } return libraryPanel; } public void selectInLibrary(File file) { showLibrary(); getComponent().selectLocalFileList(libraryManager.get().getLibraryManagedList()); getComponent().selectAndScrollTo(file); } private void showLibrary(){ NavItem item = navigatorProvider.get().getNavItem(NavCategory.LIBRARY, NAME); item.select(); } /** * Selects the specified SharedFileList in the library nav and starts editing on its name. * @param sharedFileList can not be the public shared list */ public void selectAndRenameSharedList(final SharedFileList sharedFileList) { assert(!sharedFileList.isPublic()); showLibrary(); //allow library to show before selecting and editing or the list won't display properly SwingUtilities.invokeLater(new Runnable() { @Override public void run() { getComponent().editSharedListName(sharedFileList); } }); } public void selectInLibrary(URN urn) { NavItem item = navigatorProvider.get().getNavItem(NavCategory.LIBRARY, NAME); item.select(); getComponent().selectLocalFileList(libraryManager.get().getLibraryManagedList()); getComponent().selectAndScrollTo(urn); } public void showSharedFileList(SharedFileList list) { showSharedFileList(list, false); } /** * Opens the My files view and selects the given share list. * * @param showEditingMode whether to open the panel up in friends editing mode. */ public void showSharedFileList(SharedFileList list, boolean showEditingMode) { NavItem item = navigatorProvider.get().getNavItem(NavCategory.LIBRARY, NAME); item.select(); getComponent().selectLocalFileList(list); // if sharedList can be edited, enable it if (showEditingMode) { getComponent().showEditMode(); } } /** * Returns true if the library has been initialized. */ public boolean isInitialized() { return libraryPanel != null; } /** * Clears any active filters on the library. */ public void clearFilters() { getComponent().clearFilters(); } /** * Returns the LibraryNavItem that is currently selected. */ public LibraryNavItem getSelectedNavItem() { return getComponent().getSelectedNavItem(); } /** * Returns the category that is currently selected within the * currently selected LibraryNavItem. */ public Category getSelectedCategory() { return getComponent().getSelectedCategory(); } public List<LocalFileItem> getPlayableList() { return getComponent().getPlayableList(); } /** * Returns the items that are currently selected. */ public List<LocalFileItem> getSelectedItems() { return getComponent().getSelectedItems(); } }