package org.limewire.http.webservice; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import org.cometd.Channel; import org.cometd.Client; import org.limewire.core.api.FilePropertyKey; import org.limewire.core.api.endpoint.RemoteHost; import org.limewire.core.api.library.LibraryManager; import org.limewire.core.api.search.SearchListener; import org.limewire.core.api.search.SearchResult; import org.limewire.core.api.search.sponsored.SponsoredResult; public class CometSearchListener implements SearchListener { private Channel channel; private Client client; private LibraryManager libraryManager; public CometSearchListener(Channel channel, Client client, LibraryManager libraryManager) { this.channel = channel; this.client = client; this.libraryManager = libraryManager; System.out.println("instantiated listener."); } @Override public void handleSearchResult(org.limewire.core.api.search.Search search, SearchResult searchResult) { HashMap<String, Object> response = new HashMap<String, Object>(); response.put("filename", searchResult.getFileName()); response.put("magnet_url", searchResult.getMagnetURL()); response.put("category", searchResult.getCategory()); response.put("spam", searchResult.isSpam()); response.put("sha1", searchResult.getUrn().toString().replaceFirst("urn:sha1:", "")); response.put("album", searchResult.getProperty(FilePropertyKey.ALBUM)); response.put("name", searchResult.getProperty(FilePropertyKey.NAME)); response.put("title", searchResult.getProperty(FilePropertyKey.TITLE)); response.put("author", searchResult.getProperty(FilePropertyKey.AUTHOR)); response.put("created_at", searchResult.getProperty(FilePropertyKey.DATE_CREATED)); response.put("length", searchResult.getProperty(FilePropertyKey.LENGTH)); response.put("genre", searchResult.getProperty(FilePropertyKey.GENRE)); response.put("file_size", searchResult.getSize()); if(this.libraryManager.getLibraryManagedList().contains(searchResult.getUrn())) { response.put("in_library", true); } ArrayList<HashMap> sources = new ArrayList<HashMap>(); for(RemoteHost source : searchResult.getSources()) { HashMap<String, String> sourceProps = new HashMap<String, String>(); sourceProps.put("guid", source.getFriendPresence().getPresenceId()); sourceProps.put("location", source.getFriendPresence().getFriend().getName()); sources.add(sourceProps); } response.put("sources", sources); channel.publish(this.client, response, searchResult.getUrn().toString()); System.out.println("got result"); } @Override public void handleSearchResults(org.limewire.core.api.search.Search search, Collection<? extends SearchResult> searchResults) { for(SearchResult result : searchResults) { this.handleSearchResult(search, result); } } @Override public void handleSponsoredResults(org.limewire.core.api.search.Search search, List<SponsoredResult> sponsoredResults) { // TODO Auto-generated method stub } @Override public void searchStarted(org.limewire.core.api.search.Search search) { // TODO Auto-generated method stub } @Override public void searchStopped(org.limewire.core.api.search.Search search) { // TODO Auto-generated method stub } }