handle hash searches for collections

pull/53/head
Zlatin Balevsky 2020-11-02 01:04:06 +00:00
parent 4e8a3c2296
commit dd622b1c0d
No known key found for this signature in database
GPG Key ID: A72832072D525E41
2 changed files with 23 additions and 1 deletions

View File

@ -305,6 +305,7 @@ public class Core {
register(UIDownloadCollectionEvent.class, collectionManager)
register(FileDownloadedEvent.class, collectionManager)
register(FileUnsharedEvent.class, collectionManager)
register(SearchEvent.class, collectionManager)
}
log.info("initializing mesh manager")

View File

@ -13,12 +13,15 @@ import java.util.concurrent.ThreadFactory
import java.util.logging.Level
import com.muwire.core.EventBus
import com.muwire.core.SharedFile
import com.muwire.core.InfoHash
import com.muwire.core.MuWireSettings
import com.muwire.core.files.AllFilesLoadedEvent
import com.muwire.core.files.FileDownloadedEvent
import com.muwire.core.files.FileManager
import com.muwire.core.files.FileUnsharedEvent
import com.muwire.core.search.ResultsEvent
import com.muwire.core.search.SearchEvent
import groovy.transform.CompileStatic
import groovy.util.logging.Log
@ -247,6 +250,24 @@ class CollectionManager {
affected.each { c ->
diskIO.execute({delete(c)} as Runnable)
}
}
synchronized void onSearchEvent(SearchEvent e) {
if (e.searchHash == null)
return
InfoHash ih = new InfoHash(e.searchHash)
def collection = rootToCollection.get(ih)
if (collection == null)
return
List<SharedFile> sharedFiles = new ArrayList<>()
collection.files.each { item ->
def sfs = fileManager.getRootToFiles().get(item.infoHash)
if (sfs == null || sfs.isEmpty())
return // hmm
sfs.each { sf -> sf.hit(e.persona, e.timestamp, "Collection Search")}
sharedFiles.addAll(sfs)
}
def resultEvent = new ResultsEvent(results : sharedFiles.toArray(new SharedFile[0]), uuid : e.uuid, searchEvent : e)
eventBus.publish(resultEvent)
}
}