From 24ef1057328a7ef3636b764c8b4ef7b6d8757493 Mon Sep 17 00:00:00 2001
From: advplyr <advplyr@protonmail.com>
Date: Wed, 12 Apr 2023 17:20:11 -0500
Subject: [PATCH] Fix:Empty podcasts marked as missing & removing episodes when
 deleted in folder #1671

---
 server/objects/mediaTypes/Podcast.js |  2 +-
 server/scanner/Scanner.js            | 21 ++++++++++++++++-----
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/server/objects/mediaTypes/Podcast.js b/server/objects/mediaTypes/Podcast.js
index 743512e8..efce8bb2 100644
--- a/server/objects/mediaTypes/Podcast.js
+++ b/server/objects/mediaTypes/Podcast.js
@@ -166,7 +166,7 @@ class Podcast {
   }
 
   removeFileWithInode(inode) {
-    this.episodes = this.episodes.filter(ep => ep.ino !== inode)
+    this.episodes = this.episodes.filter(ep => ep.audioFile.ino !== inode)
   }
 
   findFileWithInode(inode) {
diff --git a/server/scanner/Scanner.js b/server/scanner/Scanner.js
index 2280f0e3..d6f20930 100644
--- a/server/scanner/Scanner.js
+++ b/server/scanner/Scanner.js
@@ -200,11 +200,22 @@ class Scanner {
       // Find library item folder with matching inode or matching path
       const dataFound = libraryItemDataFound.find(lid => lid.ino === libraryItem.ino || comparePaths(lid.relPath, libraryItem.relPath))
       if (!dataFound) {
-        libraryScan.addLog(LogLevel.WARN, `Library Item "${libraryItem.media.metadata.title}" is missing`)
-        Logger.warn(`[Scanner] Library item "${libraryItem.media.metadata.title}" is missing (inode "${libraryItem.ino}")`)
-        libraryScan.resultsMissing++
-        libraryItem.setMissing()
-        itemsToUpdate.push(libraryItem)
+        // Podcast folder can have no episodes and still be valid
+        if (libraryScan.libraryMediaType === 'podcast' && await fs.pathExists(libraryItem.path)) {
+          Logger.info(`[Scanner] Library item "${libraryItem.media.metadata.title}" folder exists but has no episodes`)
+          if (libraryItem.isMissing) {
+            libraryScan.resultsUpdated++
+            libraryItem.isMissing = false
+            libraryItem.setLastScan()
+            itemsToUpdate.push(libraryItem)
+          }
+        } else {
+          libraryScan.addLog(LogLevel.WARN, `Library Item "${libraryItem.media.metadata.title}" is missing`)
+          Logger.warn(`[Scanner] Library item "${libraryItem.media.metadata.title}" is missing (inode "${libraryItem.ino}")`)
+          libraryScan.resultsMissing++
+          libraryItem.setMissing()
+          itemsToUpdate.push(libraryItem)
+        }
       } else {
         const checkRes = libraryItem.checkScanData(dataFound)
         if (checkRes.newLibraryFiles.length || libraryScan.scanOptions.forceRescan) { // Item has new files