Refresh library on a timer. Use case-insensitive string comparator. GitHub issue #84

auto-update
Zlatin Balevsky 2021-10-14 14:25:11 +01:00
parent 5261fd37c5
commit 6c7a9e3309
No known key found for this signature in database
GPG Key ID: A72832072D525E41
2 changed files with 21 additions and 9 deletions

View File

@ -40,7 +40,6 @@ import com.muwire.core.filefeeds.FeedLoadedEvent
import com.muwire.core.filefeeds.UIDownloadFeedItemEvent
import com.muwire.core.filefeeds.UIFeedConfigurationEvent
import com.muwire.core.files.AllFilesLoadedEvent
import com.muwire.core.files.DirectoryUnsharedEvent
import com.muwire.core.files.FileDownloadedEvent
import com.muwire.core.files.FileHashedEvent
import com.muwire.core.files.FileHashingEvent
@ -105,7 +104,9 @@ class MainFrameModel {
volatile Filterer filterer
boolean treeVisible = true
private final Set<SharedFile> allSharedFiles = Collections.synchronizedSet(new LinkedHashSet<>())
def shared
List<SharedFile> shared
private boolean libraryDirty
private final javax.swing.Timer libraryTimer = new javax.swing.Timer(1000, {refreshLibrary()})
TreeModel sharedTree
DefaultMutableTreeNode allFilesTreeRoot, treeRoot
final Map<SharedFile, TreeNode> fileToNode = new HashMap<>()
@ -313,6 +314,8 @@ class MainFrameModel {
core.eventBus.publish(new ContentControlEvent(term : it, regex: true, add: true))
}
libraryTimer.start()
chatServerRunning = core.chatServer.isRunning()
timer.schedule({
@ -454,7 +457,7 @@ class MainFrameModel {
if (filter(e.sharedFile)) {
shared << e.sharedFile
insertIntoTree(e.sharedFile, treeRoot, null)
view.refreshSharedFiles()
libraryDirty = true
}
}
}
@ -468,7 +471,7 @@ class MainFrameModel {
insertIntoTree(e.loadedFile, allFilesTreeRoot, fileToNode)
shared << e.loadedFile
insertIntoTree(e.loadedFile, treeRoot, null)
view.refreshSharedFiles()
libraryDirty = true
}
}
@ -608,7 +611,7 @@ class MainFrameModel {
wrapper.updateUploader(e.uploader)
else {
uploads << new UploaderWrapper(uploader: e.uploader)
view.refreshSharedFilesTable()
libraryDirty = true
}
updateTablePreservingSelection("uploads-table")
}
@ -659,7 +662,7 @@ class MainFrameModel {
void onSearchEvent(SearchEvent e) {
runInsideUIAsync {
view.refreshSharedFilesTable()
libraryDirty = true
}
}
@ -764,7 +767,7 @@ class MainFrameModel {
if (filter(e.downloadedFile)) {
shared << e.downloadedFile
insertIntoTree(e.downloadedFile,treeRoot, null)
view.refreshSharedFiles()
libraryDirty = true
}
}
}
@ -1013,4 +1016,11 @@ class MainFrameModel {
def folder = application.mvcGroupManager.createMVCGroup('message-folder', "folder-${e.name}", props)
view.addUserMessageFolder(folder)
}
private void refreshLibrary() {
if (libraryDirty) {
libraryDirty = false
view.refreshSharedFiles()
}
}
}

View File

@ -910,11 +910,13 @@ class MainFrameView {
}
// shared files table and tree
def sharedFilesTable = builder.getVariable("shared-files-table")
JTable sharedFilesTable = builder.getVariable("shared-files-table")
sharedFilesTable.columnModel.getColumn(1).setCellRenderer(new SizeRenderer())
sharedFilesTable.rowSorter.addRowSorterListener({ evt -> lastSharedSortEvent = evt })
sharedFilesTable.rowSorter.setSortsOnUpdates(true)
// default collator comparator is very slow
sharedFilesTable.rowSorter.setComparator(0, String.CASE_INSENSITIVE_ORDER)
sharedFilesTable.addMouseListener(sharedFilesMouseListener)