aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenen92 <92enen@gmail.com>2022-07-05 15:35:09 +0100
committerenen92 <92enen@gmail.com>2022-07-06 09:38:51 +0100
commitdb48e286808aaea48ab24704c83ae3a7c130ec04 (patch)
tree670114644ead4ed719a39d1fff69c985f0ddc8e3
parentc57641461bbe6b86f3387deea7a9f80d2a8131fa (diff)
[infoscanner][discs] Check .nomedia before stacking
-rw-r--r--xbmc/FileItem.cpp7
-rw-r--r--xbmc/FileItem.h1
-rw-r--r--xbmc/video/VideoInfoScanner.cpp6
3 files changed, 14 insertions, 0 deletions
diff --git a/xbmc/FileItem.cpp b/xbmc/FileItem.cpp
index 03c1c12cc7..091c4ce1a5 100644
--- a/xbmc/FileItem.cpp
+++ b/xbmc/FileItem.cpp
@@ -2268,6 +2268,13 @@ void CFileItemList::Remove(CFileItem* pItem)
}
}
+VECFILEITEMS::iterator CFileItemList::erase(VECFILEITEMS::iterator first,
+ VECFILEITEMS::iterator last)
+{
+ std::unique_lock<CCriticalSection> lock(m_lock);
+ return m_items.erase(first, last);
+}
+
void CFileItemList::Remove(int iItem)
{
std::unique_lock<CCriticalSection> lock(m_lock);
diff --git a/xbmc/FileItem.h b/xbmc/FileItem.h
index 4286bac23f..99cb8f89cf 100644
--- a/xbmc/FileItem.h
+++ b/xbmc/FileItem.h
@@ -808,6 +808,7 @@ public:
VECFILEITEMS::iterator begin() { return m_items.begin(); }
VECFILEITEMS::iterator end() { return m_items.end(); }
+ VECFILEITEMS::iterator erase(VECFILEITEMS::iterator first, VECFILEITEMS::iterator last);
VECFILEITEMS::const_iterator begin() const { return m_items.begin(); }
VECFILEITEMS::const_iterator end() const { return m_items.end(); }
VECFILEITEMS::const_iterator cbegin() const { return m_items.cbegin(); }
diff --git a/xbmc/video/VideoInfoScanner.cpp b/xbmc/video/VideoInfoScanner.cpp
index f5f86f14d7..c402a9c9c0 100644
--- a/xbmc/video/VideoInfoScanner.cpp
+++ b/xbmc/video/VideoInfoScanner.cpp
@@ -298,6 +298,12 @@ namespace VIDEO
{ // need to fetch the folder
CDirectory::GetDirectory(strDirectory, items, CServiceBroker::GetFileExtensionProvider().GetVideoExtensions(),
DIR_FLAG_DEFAULTS);
+ // do not consider inner folders with .nomedia
+ items.erase(std::remove_if(items.begin(), items.end(),
+ [this](const CFileItemPtr& item) {
+ return item->m_bIsFolder && HasNoMedia(item->GetPath());
+ }),
+ items.end());
items.Stack();
// check whether to re-use previously computed fast hash