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.UIDownloadFeedItemEvent
import com.muwire.core.filefeeds.UIFeedConfigurationEvent import com.muwire.core.filefeeds.UIFeedConfigurationEvent
import com.muwire.core.files.AllFilesLoadedEvent import com.muwire.core.files.AllFilesLoadedEvent
import com.muwire.core.files.DirectoryUnsharedEvent
import com.muwire.core.files.FileDownloadedEvent import com.muwire.core.files.FileDownloadedEvent
import com.muwire.core.files.FileHashedEvent import com.muwire.core.files.FileHashedEvent
import com.muwire.core.files.FileHashingEvent import com.muwire.core.files.FileHashingEvent
@ -105,7 +104,9 @@ class MainFrameModel {
volatile Filterer filterer volatile Filterer filterer
boolean treeVisible = true boolean treeVisible = true
private final Set<SharedFile> allSharedFiles = Collections.synchronizedSet(new LinkedHashSet<>()) 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 TreeModel sharedTree
DefaultMutableTreeNode allFilesTreeRoot, treeRoot DefaultMutableTreeNode allFilesTreeRoot, treeRoot
final Map<SharedFile, TreeNode> fileToNode = new HashMap<>() final Map<SharedFile, TreeNode> fileToNode = new HashMap<>()
@ -313,6 +314,8 @@ class MainFrameModel {
core.eventBus.publish(new ContentControlEvent(term : it, regex: true, add: true)) core.eventBus.publish(new ContentControlEvent(term : it, regex: true, add: true))
} }
libraryTimer.start()
chatServerRunning = core.chatServer.isRunning() chatServerRunning = core.chatServer.isRunning()
timer.schedule({ timer.schedule({
@ -454,7 +457,7 @@ class MainFrameModel {
if (filter(e.sharedFile)) { if (filter(e.sharedFile)) {
shared << e.sharedFile shared << e.sharedFile
insertIntoTree(e.sharedFile, treeRoot, null) insertIntoTree(e.sharedFile, treeRoot, null)
view.refreshSharedFiles() libraryDirty = true
} }
} }
} }
@ -468,7 +471,7 @@ class MainFrameModel {
insertIntoTree(e.loadedFile, allFilesTreeRoot, fileToNode) insertIntoTree(e.loadedFile, allFilesTreeRoot, fileToNode)
shared << e.loadedFile shared << e.loadedFile
insertIntoTree(e.loadedFile, treeRoot, null) insertIntoTree(e.loadedFile, treeRoot, null)
view.refreshSharedFiles() libraryDirty = true
} }
} }
@ -608,7 +611,7 @@ class MainFrameModel {
wrapper.updateUploader(e.uploader) wrapper.updateUploader(e.uploader)
else { else {
uploads << new UploaderWrapper(uploader: e.uploader) uploads << new UploaderWrapper(uploader: e.uploader)
view.refreshSharedFilesTable() libraryDirty = true
} }
updateTablePreservingSelection("uploads-table") updateTablePreservingSelection("uploads-table")
} }
@ -659,7 +662,7 @@ class MainFrameModel {
void onSearchEvent(SearchEvent e) { void onSearchEvent(SearchEvent e) {
runInsideUIAsync { runInsideUIAsync {
view.refreshSharedFilesTable() libraryDirty = true
} }
} }
@ -764,7 +767,7 @@ class MainFrameModel {
if (filter(e.downloadedFile)) { if (filter(e.downloadedFile)) {
shared << e.downloadedFile shared << e.downloadedFile
insertIntoTree(e.downloadedFile,treeRoot, null) 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) def folder = application.mvcGroupManager.createMVCGroup('message-folder', "folder-${e.name}", props)
view.addUserMessageFolder(folder) 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 // 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.columnModel.getColumn(1).setCellRenderer(new SizeRenderer())
sharedFilesTable.rowSorter.addRowSorterListener({ evt -> lastSharedSortEvent = evt }) sharedFilesTable.rowSorter.addRowSorterListener({ evt -> lastSharedSortEvent = evt })
sharedFilesTable.rowSorter.setSortsOnUpdates(true) sharedFilesTable.rowSorter.setSortsOnUpdates(true)
// default collator comparator is very slow
sharedFilesTable.rowSorter.setComparator(0, String.CASE_INSENSITIVE_ORDER)
sharedFilesTable.addMouseListener(sharedFilesMouseListener) sharedFilesTable.addMouseListener(sharedFilesMouseListener)