package com.limegroup.gnutella.library;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.List;
import org.limewire.concurrent.ListeningFuture;
import org.limewire.core.api.library.FileProcessingEvent;
import org.limewire.listener.EventListener;
import com.limegroup.gnutella.xml.LimeXMLDocument;
/**
* The list of all files that this library is managing.
* This list can include files that are shared, are not shared,
* are files from the store, are shared with friends, are incomplete, etc...
*
* Inclusion in this list means only that LimeWire knows about this file.
*/
public interface Library extends FileCollection {
void addManagedListStatusListener(EventListener<LibraryStatusEvent> listener);
void removeManagedListStatusListener(EventListener<LibraryStatusEvent> listener);
void addPropertyChangeListener(PropertyChangeListener listener);
void removePropertyChangeListener(PropertyChangeListener listener);
void addFileProcessingListener(EventListener<FileProcessingEvent> listener);
void removeFileProcessingListener(EventListener<FileProcessingEvent> listener);
/** Returns true if the initial load of the library has finished. */
boolean isLoadFinished();
/** Informs the library that the file 'oldName' has been renamed to 'newName'. */
ListeningFuture<FileDesc> fileRenamed(File oldName, File newName);
/** Informs the library that the file 'file' has changed. */
ListeningFuture<FileDesc> fileChanged(File file, List<? extends LimeXMLDocument> xmlDocs);
/** Returns true if this is allowed to many any programs. */
boolean isProgramManagingAllowed();
/** Cancels any pending file tasks. */
void cancelPendingTasks();
/** Returns the number of files in the share list directly from the raw library db */
int peekPublicSharedListCount();
}