backend plumbing for deleting collections

pull/53/head
Zlatin Balevsky 2020-10-31 03:47:15 +00:00
parent e762691c39
commit 4faa09f601
No known key found for this signature in database
GPG Key ID: A72832072D525E41
3 changed files with 38 additions and 1 deletions

View File

@ -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)
}

View File

@ -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)
}
}
}

View File

@ -0,0 +1,7 @@
package com.muwire.core.collections
import com.muwire.core.Event
class UICollectionDeletedEvent extends Event {
FileCollection collection
}