Avoid sorting items and creating thumbnails when loading metadata

Otherwice it has a big performance impact: it causes lots of
thumbnail reloads and resorts of FileThumbnailView.

Signed-off-by: Alexander Golubev <fatzer2@gmail.com>
(cherry picked from commit 53ce37eeca)
pull/34/head
Alexander Golubev 1 year ago committed by Michele Calgaro
parent a5931c83bd
commit db4080c183
Signed by: MicheleC
GPG Key ID: 2A75B7CA8ADED5CF

@ -251,7 +251,7 @@ void FileDetailView::updateView( bool b )
} }
} }
void FileDetailView::updateView( const KFileItem *i ) void FileDetailView::updateView( const KFileItem *i, bool /*metaDataOnly*/ )
{ {
if ( !i ) return; if ( !i ) return;

@ -55,7 +55,8 @@ public:
virtual void clearView(); virtual void clearView();
virtual void updateView( bool ); virtual void updateView( bool );
virtual void updateView(const KFileItem*); using FileViewBase::updateView;
virtual void updateView(const KFileItem*, bool metaInfoOnly);
virtual void removeItem( const KFileItem* ); virtual void removeItem( const KFileItem* );
virtual void listingCompleted(); virtual void listingCompleted();

@ -454,15 +454,19 @@ void FileThumbnailView::insertItem(KFileItem* item) {
} }
void FileThumbnailView::updateView(const KFileItem* fileItem) { void FileThumbnailView::updateView(const KFileItem* fileItem, bool metaInfoOnly) {
if (!fileItem) return; if (!fileItem) return;
FileThumbnailViewItem* iconItem=viewItem(this, fileItem); FileThumbnailViewItem* iconItem=viewItem(this, fileItem);
if (iconItem) { if (iconItem) {
iconItem->setText(fileItem->text()); if (metaInfoOnly) {
updateThumbnail(fileItem); iconItem->updateLines();
// Note: resort will be done when metadata is completely loaded
} else {
iconItem->setText(fileItem->text());
updateThumbnail(fileItem);
sortView();
}
} }
sort();
} }
@ -565,7 +569,7 @@ void FileThumbnailView::setSorting(TQDir::SortSpec spec) {
if (iconItem) setSortingKey(iconItem, item); if (iconItem) setSortingKey(iconItem, item);
} }
TDEIconView::sort(! (spec & TQDir::Reversed) ); sortView();
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
@ -769,6 +773,10 @@ void FileThumbnailView::prefetchDone() {
} }
} }
void FileThumbnailView::sortView() {
TDEIconView::sort( !(KFileView::sorting() & TQDir::Reversed) );
}
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// //
// Protected // Protected

@ -65,7 +65,7 @@ public:
void setSelected(const KFileItem* item,bool enable); void setSelected(const KFileItem* item,bool enable);
bool isSelected(const KFileItem* item) const; bool isSelected(const KFileItem* item) const;
void removeItem(const KFileItem* item); void removeItem(const KFileItem* item);
void updateView(const KFileItem* item); void updateView(const KFileItem* item, bool metaInfoOnly);
void setSorting(TQDir::SortSpec); void setSorting(TQDir::SortSpec);
KFileItem* firstFileItem() const; KFileItem* firstFileItem() const;
@ -95,6 +95,8 @@ public slots:
void showThumbnailDetailsDialog(); void showThumbnailDetailsDialog();
void sortView();
signals: signals:
void dropped(TQDropEvent*, KFileItem* target); void dropped(TQDropEvent*, KFileItem* target);

@ -34,9 +34,15 @@ public:
KFileItem* shownFileItem() const { return mShownFileItem; } KFileItem* shownFileItem() const { return mShownFileItem; }
virtual void setShownFileItem(KFileItem* fileItem) { mShownFileItem=fileItem; } virtual void setShownFileItem(KFileItem* fileItem) { mShownFileItem=fileItem; }
virtual void updateFromSettings() {} virtual void updateFromSettings() {}
using KFileView::updateView;
void updateView(const KFileItem* fileItem) override {
updateView(fileItem, false);
}
virtual void updateView(const KFileItem* fileItem, bool metaDataOnly) = 0;
protected: protected:
KFileItem* mShownFileItem; KFileItem* mShownFileItem;
}; };

@ -1063,10 +1063,11 @@ void FileViewController::dirListerRefreshItems(const KFileItemList& list) {
for (; *it!=0L; ++it) { for (; *it!=0L; ++it) {
updateViewItem(*it); updateViewItem(*it);
} }
loadMetaInfo(list, true);
} }
void FileViewController::updateViewItem(const KFileItem *item) { void FileViewController::updateViewItem(const KFileItem *item, bool metaDataOnly) {
currentFileView()->updateView(item); currentFileView()->updateView(item, metaDataOnly);
if (item==currentFileView()->shownFileItem()) { if (item==currentFileView()->shownFileItem()) {
emit shownFileItemRefreshed(item); emit shownFileItemRefreshed(item);
} }
@ -1114,7 +1115,7 @@ void FileViewController::delayedDirListerCompleted() {
// around is not in firstFileItem() because it's const and sort() is a non // around is not in firstFileItem() because it's const and sort() is a non
// const method // const method
if (mMode!=FILE_LIST) { if (mMode!=FILE_LIST) {
mFileThumbnailView->sort(mFileThumbnailView->sortDirection()); mFileThumbnailView->sortView();
} }
if (mChangeDirStatus != CHANGE_DIR_STATUS_NONE) { if (mChangeDirStatus != CHANGE_DIR_STATUS_NONE) {
@ -1339,7 +1340,14 @@ KFileItem* FileViewController::findItemByFileName(const TQString& fileName) cons
// //
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void FileViewController::loadMetaInfo(const KFileItemList& items) { void FileViewController::loadMetaInfo(const KFileItemList& items, bool forceReload) {
if (forceReload) {
// Reset metadata of all items if we want MetaInfoJob to reload it
for(const auto& item: items) {
item->setMetaInfo(KFileMetaInfo());
}
}
if(d->mMetaInfoTodo.isEmpty()) { if(d->mMetaInfoTodo.isEmpty()) {
d->mMetaInfoTodo = items; d->mMetaInfoTodo = items;
} else { } else {
@ -1359,10 +1367,16 @@ void FileViewController::nextMetaInfoJob() {
connect( d->mMetaInfoJob, TQ_SIGNAL(result(TDEIO::Job *)), connect( d->mMetaInfoJob, TQ_SIGNAL(result(TDEIO::Job *)),
this, TQ_SLOT(nextMetaInfoJob()) ); this, TQ_SLOT(nextMetaInfoJob()) );
connect( d->mMetaInfoJob, TQ_SIGNAL( gotMetaInfo(const KFileItem *)), connect( d->mMetaInfoJob, TQ_SIGNAL( gotMetaInfo(const KFileItem *)),
this, TQ_SLOT(updateViewItem(const KFileItem *)) ); this, TQ_SLOT(updateItemMetaInfo(const KFileItem *)) );
d->mMetaInfoTodo.clear(); d->mMetaInfoTodo.clear();
} else { } else {
d->mMetaInfoJob = NULL; d->mMetaInfoJob = NULL;
// When we finished all metadata load we should update view sorting
// We can't do it during the item update due to performance impact
if (mMode!=FILE_LIST) {
mFileThumbnailView->sortView();
}
} }
} }
@ -1374,4 +1388,8 @@ void FileViewController::stopMetaInfoUpdate() {
} }
} }
void FileViewController::updateItemMetaInfo(const KFileItem *item) {
updateViewItem(item, /* metaInfoOnly = */ true);
}
} // namespace } // namespace

@ -174,7 +174,6 @@ private slots:
void toggleShowDotFiles(); void toggleShowDotFiles();
void setSorting(); void setSorting();
void updateSortMenu(TQDir::SortSpec); void updateSortMenu(TQDir::SortSpec);
void updateViewItem(const KFileItem *item);
// Dir lister slots // Dir lister slots
void dirListerDeleteItem(KFileItem* item); void dirListerDeleteItem(KFileItem* item);
@ -185,10 +184,11 @@ private slots:
void dirListerCanceled(); void dirListerCanceled();
void dirListerCompleted(); void dirListerCompleted();
// Metadata info loader jobs // Metadata info loader job's slots
void loadMetaInfo(const KFileItemList& items); void loadMetaInfo(const KFileItemList& items, bool forceReload=false);
void nextMetaInfoJob(); void nextMetaInfoJob();
void stopMetaInfoUpdate(); void stopMetaInfoUpdate();
void updateItemMetaInfo(const KFileItem *item);
void openDropURLMenu(TQDropEvent*, KFileItem*); void openDropURLMenu(TQDropEvent*, KFileItem*);
@ -246,6 +246,7 @@ private:
void emitURLChanged(); void emitURLChanged();
void updateActions(); void updateActions();
void prefetch( KFileItem* item ); void prefetch( KFileItem* item );
void updateViewItem(const KFileItem *item, bool metaInfoOnly=false);
KFileItem* findFirstImage() const; KFileItem* findFirstImage() const;
KFileItem* findLastImage() const; KFileItem* findLastImage() const;

Loading…
Cancel
Save