changeset 256:6ad17bc3d1a6

Add 'trash' option to 'clean' command to clean up any unmanaged files residing inside thumbnail/medium image subdirectories. Also clarify the help for 'clean' command.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 12 Dec 2018 15:11:41 +0200
parents d0bcc6c7fc66
children 67a807666405
files mgtool.php
diffstat 1 files changed, 44 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/mgtool.php	Wed Dec 12 14:52:00 2018 +0200
+++ b/mgtool.php	Wed Dec 12 15:11:41 2018 +0200
@@ -35,6 +35,7 @@
 
 define("GCLEAN_CACHES"    , 0x01);
 define("GCLEAN_IMAGES"    , 0x02);
+define("GCLEAN_TRASH"     , 0x04);
 define("GCLEAN_ALL"       , 0x0f);
 
 define("GUPD_MED_IMAGE"   , 0x01);
@@ -364,8 +365,9 @@
 }
 
 
-function mgDeleteQuiet($path, &$noDelete)
+function mgDeleteConditional($path, &$noDelete)
 {
+  global $flagDoDelete, $countDoDelete;
   if (is_dir($path))
   {
     if (($dirHandle = @opendir($path)) === FALSE)
@@ -374,22 +376,28 @@
     while (($dirFile = @readdir($dirHandle)) !== FALSE)
     {
       if ($dirFile != "." && $dirFile != "..")
-        mgDeleteQuiet($path."/".$dirFile, $noDelete);
+        mgDeleteConditional($path."/".$dirFile, $noDelete);
     }
 
     closedir($dirHandle);
 
     if (!array_key_exists($path, $noDelete))
     {
-      //echo "DEL DIR '".$path."'\n";
-      rmdir($path);
+      $countDoDelete++;
+      if ($flagDoDelete)
+        rmdir($path);
+      else
+        echo "DEL DIR '".$path."'\n";
     }
   }
   else
   if (file_exists($path) && !array_key_exists($path, $noDelete))
   {
-    //echo "DEL FILE '".$path."'\n";
-    unlink($path);
+    $countDoDelete++;
+    if ($flagDoDelete)
+      unlink($path);
+    else
+      echo "DEL FILE '".$path."'\n";
   }
 }
 
@@ -532,6 +540,12 @@
 
   mgCheckQuit();
 
+  $tnPath = $path."/".$galTNPath;
+  $medPath = $path."/".$galMedPath;
+  $generatedFiles = [];
+  $generatedFiles[$tnPath] = 1;
+  $generatedFiles[$medPath] = 1;
+
   // Cleanup mode
   if ($mode == GCMD_CLEAN)
   {
@@ -547,6 +561,21 @@
         mgDelete($path."/".$galTNPath, FALSE);
         mgDelete($path."/".$galMedPath, FALSE);
       }
+
+      if ($galCleanFlags & GCLEAN_TRASH)
+      {
+        foreach ($entries as $ename => &$edata)
+        {
+          $medFilename = $medPath."/".$ename.".".mgGetSetting("med_format");
+          $tnFilename = $tnPath."/".$ename.".".mgGetSetting("tn_format");
+          $generatedFiles[$medFilename] = 1;
+          $generatedFiles[$tnFilename] = 1;
+        }
+
+        // Delete any "trash" files from medium/thumbnail dirs
+        mgDeleteConditional($tnPath, $generatedFiles);
+        mgDeleteConditional($medPath, $generatedFiles);
+      }
     }
   }
   else
@@ -572,12 +601,6 @@
     }
 
     // Start actual processing
-    $tnPath = $path."/".$galTNPath;
-    $medPath = $path."/".$galMedPath;
-    $generatedFiles = [];
-    $generatedFiles[$tnPath] = 1;
-    $generatedFiles[$medPath] = 1;
-
     $nentries = count($entries);
     $nentry = 0;
     echo $path." .. ";
@@ -587,6 +610,9 @@
 
       $nentry++;
       $efilename = $path."/".$ename;
+      $medFilename = $medPath."/".$ename.".".mgGetSetting("med_format");
+      $tnFilename = $tnPath."/".$ename.".".mgGetSetting("tn_format");
+      $capFilename = $path."/".$edata["base"].".txt";
 
       if (array_key_exists($ename, $galEntries))
         $galEntry = &$galEntries[$ename];
@@ -602,17 +628,10 @@
           $edata[$ckey] = $cval;
       }
 
-
       // Handle entry based on type
       if ($edata["type"] == 0)
       {
         $updFlags = 0;
-        $medFilename = $medPath."/".$ename.".".mgGetSetting("med_format");
-        $tnFilename = $tnPath."/".$ename.".".mgGetSetting("tn_format");
-        $capFilename = $path."/".$edata["base"].".txt";
-
-        $generatedFiles[$medFilename] = 1;
-        $generatedFiles[$tnFilename] = 1;
 
         // Check what we need to update ..
         if (!file_exists($medFilename) || filemtime($medFilename) < $edata["mtime"])
@@ -691,10 +710,6 @@
       }
     }
 
-    // Delete any "trash" files from medium/thumbnail dirs
-    mgDeleteQuiet($tnPath, $generatedFiles);
-    mgDeleteQuiet($medPath, $generatedFiles);
-
     echo "\r".$path." ..... DONE\n";
 
     mgCheckQuit(TRUE);
@@ -847,9 +862,11 @@
     "    and EXIF/caption/etc information to be re-scanned even\n".
     "    if the file timestamps do not justify re-scanning.\n".
     "\n".
-    "  clean <all|caches|images> [path]\n".
-    "    Delete all generated files, or data cache files or\n".
-    "    everything inside medium/thumbnail image directories.\n".
+    "  clean <option> [path]\n".
+    "    all    - Delete all generated files\n".
+    "    images - Delete generated images (thumbnails/mediums)\n".
+    "    caches - Delete mgallery data cache files\n".
+    "    trash  - Delete any 'unmanaged' files inside thumbnail/medium dirs\n".
     "\n".
     "  config|dump\n".
     "    Display configuration values (with extra information) or\n".
@@ -913,6 +930,7 @@
       case "al": $galCleanFlags = GCLEAN_ALL; break;
       case "ca": $galCleanFlags = GCLEAN_CACHES; break;
       case "im": $galCleanFlags = GCLEAN_IMAGES; break;
+      case "tr": $galCleanFlags = GCLEAN_TRASH; break;
       case FALSE:
         mgFatal("Cleaning requires a mode argument.\n");