mirror of https://github.com/zlatinb/muwire
backend plumbing for deleting collections
parent
e762691c39
commit
4faa09f601
|
@ -17,6 +17,7 @@ import com.muwire.core.chat.UIConnectChatEvent
|
|||
import com.muwire.core.chat.UIDisconnectChatEvent
|
||||
import com.muwire.core.collections.CollectionManager
|
||||
import com.muwire.core.collections.UICollectionCreatedEvent
|
||||
import com.muwire.core.collections.UICollectionDeletedEvent
|
||||
import com.muwire.core.connection.ConnectionAcceptor
|
||||
import com.muwire.core.connection.ConnectionEstablisher
|
||||
import com.muwire.core.connection.ConnectionEvent
|
||||
|
@ -297,6 +298,7 @@ public class Core {
|
|||
eventBus.with {
|
||||
register(AllFilesLoadedEvent.class, collectionManager)
|
||||
register(UICollectionCreatedEvent.class, collectionManager)
|
||||
register(UICollectionDeletedEvent.class, collectionManager)
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -117,7 +117,7 @@ class CollectionManager {
|
|||
private synchronized void addToIndex(InfoHash infoHash, FileCollection collection) {
|
||||
rootToCollection.put(infoHash, collection)
|
||||
collection.files.each {
|
||||
Set<Collection> set = fileRootToCollections.get(it.infoHash)
|
||||
Set<FileCollection> set = fileRootToCollections.get(it.infoHash)
|
||||
if (set == null) {
|
||||
set = new HashSet<>()
|
||||
fileRootToCollections.put(infoHash, set)
|
||||
|
@ -134,4 +134,32 @@ class CollectionManager {
|
|||
this.payload = payload
|
||||
}
|
||||
}
|
||||
|
||||
void onUICollectionDeletedEvent(UICollectionDeletedEvent e) {
|
||||
diskIO.execute({delete(e.collection)} as Runnable)
|
||||
}
|
||||
|
||||
private void delete(FileCollection collection) {
|
||||
PayloadAndIH pih = infoHash(collection)
|
||||
String hashB64 = Base64.encode(pih.infoHash.getRoot())
|
||||
String fileName = "${hashB64}_${collection.author.getHumanReadableName()}_${collection.timestamp}.mwcollection"
|
||||
|
||||
File file = new File(localCollections, fileName)
|
||||
file.delete()
|
||||
|
||||
removeFromIndex(pih.infoHash, collection)
|
||||
}
|
||||
|
||||
private synchronized void removeFromIndex(InfoHash infoHash, FileCollection collection) {
|
||||
rootToCollection.remove(infoHash)
|
||||
collection.files.each {
|
||||
Set<FileCollection> set = fileRootToCollections.get(it.infoHash)
|
||||
if (set == null)
|
||||
return // ?
|
||||
set.remove(collection)
|
||||
if (set.isEmpty())
|
||||
fileRootToCollections.remove(it.infoHash)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
package com.muwire.core.collections
|
||||
|
||||
import com.muwire.core.Event
|
||||
|
||||
class UICollectionDeletedEvent extends Event {
|
||||
FileCollection collection
|
||||
}
|
Loading…
Reference in New Issue