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.chat.UIDisconnectChatEvent
|
||||||
import com.muwire.core.collections.CollectionManager
|
import com.muwire.core.collections.CollectionManager
|
||||||
import com.muwire.core.collections.UICollectionCreatedEvent
|
import com.muwire.core.collections.UICollectionCreatedEvent
|
||||||
|
import com.muwire.core.collections.UICollectionDeletedEvent
|
||||||
import com.muwire.core.connection.ConnectionAcceptor
|
import com.muwire.core.connection.ConnectionAcceptor
|
||||||
import com.muwire.core.connection.ConnectionEstablisher
|
import com.muwire.core.connection.ConnectionEstablisher
|
||||||
import com.muwire.core.connection.ConnectionEvent
|
import com.muwire.core.connection.ConnectionEvent
|
||||||
|
@ -297,6 +298,7 @@ public class Core {
|
||||||
eventBus.with {
|
eventBus.with {
|
||||||
register(AllFilesLoadedEvent.class, collectionManager)
|
register(AllFilesLoadedEvent.class, collectionManager)
|
||||||
register(UICollectionCreatedEvent.class, collectionManager)
|
register(UICollectionCreatedEvent.class, collectionManager)
|
||||||
|
register(UICollectionDeletedEvent.class, collectionManager)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ class CollectionManager {
|
||||||
private synchronized void addToIndex(InfoHash infoHash, FileCollection collection) {
|
private synchronized void addToIndex(InfoHash infoHash, FileCollection collection) {
|
||||||
rootToCollection.put(infoHash, collection)
|
rootToCollection.put(infoHash, collection)
|
||||||
collection.files.each {
|
collection.files.each {
|
||||||
Set<Collection> set = fileRootToCollections.get(it.infoHash)
|
Set<FileCollection> set = fileRootToCollections.get(it.infoHash)
|
||||||
if (set == null) {
|
if (set == null) {
|
||||||
set = new HashSet<>()
|
set = new HashSet<>()
|
||||||
fileRootToCollections.put(infoHash, set)
|
fileRootToCollections.put(infoHash, set)
|
||||||
|
@ -134,4 +134,32 @@ class CollectionManager {
|
||||||
this.payload = payload
|
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