changeset 889:0fbf63bbb8f4

More work.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 26 Nov 2014 19:14:09 +0200
parents e0903d0c3954
children d6548ad68134
files msite.inc.php
diffstat 1 files changed, 74 insertions(+), 84 deletions(-) [+]
line wrap: on
line diff
--- a/msite.inc.php	Wed Nov 26 18:06:08 2014 +0200
+++ b/msite.inc.php	Wed Nov 26 19:14:09 2014 +0200
@@ -906,92 +906,82 @@
 }
 
 
-function stGetEntryPreviewData($compo, $entry, $probePreview, $fullData)
+function stGetEntryPreviewFile($entry, $previewPath, $previewURL, $type, $addPath)
 {
-  $res = array();
-  $entryPath = stGetSetting("entryPath");
-  $previewPath = stGetSetting("previewPath");
-  $previewURL = stGetSetting("previewURL");
-  $thumbDir = stGetSetting("thumbnailSubDir");
+  global $fileTypeData;
+  if (!isset($fileTypeData[$type]))
+    return stLogError("Invalid file type: ".$type);
 
-  $filename = $entry["filename"];
-
-  // Data for the actual entry file
-  $res["previewType"] = ($entry["preview_type"] != EPREV_NONE) ? $entry["preview_type"] : $compo["preview_type"];
-  $res["entryFile"] = stMakePath(FALSE, FALSE, array($entryPath, $compo["cpath"], $filename));
-  if ($fullData)
-  {
-    $res["entrySize"] = @filesize($res["entryFile"]);
-  }
+  $fileBase = sprintf("%03d.%s", $entry["id"], $fileTypeData[$type]["fext"]);
+  $fileName = stMakePath(FALSE, TRUE, array($previewPath, $addPath, $fileBase));
 
-  // Based on preview type, set some basics
-  switch ($res["previewType"])
-  {
-    case EPREV_IMAGE:
-      $res["fileBase"] = stMakePath(FALSE, "_sshot", array($filename));
-      $res["preferType"] = "PNG";
-      $fileTypeList = array(
-        "PNG"  => array(".png", ".PNG"),
-        "GIF"  => array(".gif", ".GIF"),
-        "JPEG" => array(".jpg", ".JPG"),
-      );
-      break;
-    
-    case EPREV_AUDIO:
-      $res["fileBase"] = stMakePath(FALSE, "_sample", array($filename));
-      $res["preferType"] = "PNG";
-      $fileTypeList = array(
-        "audio/mpeg" => array(".mp3", ".MP3"),
-        "audio/ogg; codecs=vorbis" => array(".ogg", ".OGG", ".oga", ".OGA"),
-      );
-      break;
-    
-    default:
-      return FALSE;
-  }
-
-  // Find the preview file(s)
-  foreach ($fileTypeList as $fileType => $fileExts)
-  {
-    foreach ($fileExts as $fext)
-    {
-      $filename = stMakePath(FALSE, $fext, array($previewPath, $compo["cpath"], $res["fileBase"]));
-      if ($probePreview == FALSE || file_exists($filename))
-      {
-        $res["previewFileType"]  = $fileType;
-        $res["previewPath"]  = $filename;
-        $res["previewURL"]   = stMakePath(TRUE, $fext, array($previewURL, $compo["cpath"], $res["fileBase"]));
-
-        if ($res["previewType"] == EPREV_IMAGE)
-        {
-          $res["thumbPath"] = stMakePath(FALSE, $fext, array($previewPath, $compo["cpath"], $thumbDir, $res["fileBase"]));
-          $res["thumbURL"]  = stMakePath(TRUE, $fext, array($previewURL, $compo["cpath"], $thumbDir, $res["fileBase"]));
-        }
-
-        if ($fullData)
-        {
-          $res["previewSize"]  = @filesize($res["previewPath"]);
-          $res["thumbSize"] = @filesize($res["thumbPath"]);
-        }
-
-        return $res;
-      }
-    }
-  }
-
-  return FALSE;
+  return array(
+    "type"   => $type,
+    "mime"   => $fileTypeData[$type]["mime"],
+    "file"   => $fileName,
+    "exists" => @file_exists($fileName),
+    "mtime"  => @filemtime($fileName),
+    "url"    => stMakePath(TRUE, TRUE, array($previewURL, $addPath, $fileBase)),
+  );
 }
 
 
 function stPrintPreviewElements($compo, $entry)
 {
-  if (($pdata = stGetEntryPreviewData($compo, $entry, FALSE, TRUE)) === FALSE)
+  if (($efile = stFetchSQL("SELECT * FROM files WHERE deleted=0 AND id=".$entry["preview_id"])) === false)
     return FALSE;
 
-  switch ($pdata["previewType"])
+  $previewPath = stGetSetting("previewPath");
+  $previewURL = stGetSetting("previewURL");
+  $previewType = $compo["preview_type"];
+  $previewOK = TRUE;
+
+  switch ($previewType)
   {
     case EPREV_IMAGE:
-      if ($pdata["previewSize"] === FALSE || $pdata["thumbSize"] === FALSE)
+      $sprev = stGetEntryPreviewFile(
+        $entry, $previewPath, $previewURL,
+        stGetSetting("previewImageType"), "");
+
+      $sthumb = stGetEntryPreviewFile(
+        $entry, $previewPath, $previewURL,
+        stGetSetting("previewThumbType"),
+        stGetSetting("thumbnailSubDir"));
+
+      if ($sprev["exists"] === false ||
+          $sthumb["exists"] === false ||
+          $sprev["mtime"] < $efile["utime"] ||
+          $sthumb["mtime"] < $efile["utime"])
+        $previewOK = FALSE;
+      break;
+    
+    case EPREV_AUDIO:
+      $sprev = array();
+      foreach (stGetSetting("sampleType") as $type)
+      {
+        $sres = stGetEntryPreviewFile(
+          $entry, $previewPath, $previewURL,
+          $type, "");
+
+        if ($sres["exists"] === false ||
+            $sres["mtime"] < $efile["utime"])
+        {
+          $previewOK = FALSE;
+          break;
+        }
+        
+        $sprev[] = $sres;
+      }
+      break;
+
+    default:
+      return FALSE;
+  }
+
+  switch ($previewType)
+  {
+    case EPREV_IMAGE:
+      if (!$previewOK)
       {
         echo
           "<img class=\"imagePreview\" src=\"img/nopreview_tn.png\" alt=\"Preview\" />";
@@ -999,25 +989,25 @@
       else
       {
         echo
-          "<a href=\"".ihentities($pdata["previewURL"]).
-          "\" onClick=\"return jsShowPreviewImage('".ihentities($pdata["previewURL"])."');\">".
-          "<img class=\"imagePreview\" src=\"".ihentities($pdata["thumbURL"]).
+          "<a href=\"".ihentities($sprev["url"]).
+          "\" onClick=\"return jsShowPreviewImage('".ihentities($sprev["url"])."');\">".
+          "<img class=\"imagePreview\" src=\"".ihentities($sthumb["url"]).
           "\" alt=\"Preview\" /></a>";
       }
       break;
 
     case EPREV_AUDIO:
-      if ($pdata["previewSize"] !== FALSE)
+      if ($previewOK && count($sprev) > 0)
       {
-        echo
-          "<audio controls preload=\"none\" class=\"audioPreview\">".
-          "<source src=\"".ihentities($pdata["previewURL"])."\" type=\"".$pdata["previewFileType"]."\">".
-          "</audio>";
+        echo "<audio controls preload=\"none\" class=\"audioPreview\">";
+        foreach ($sprev as $pfile)
+        {
+          echo "<source src=\"".ihentities($pfile["url"])."\" type=\"".$pfile["mime"]."\">";
+        }
+        echo "</audio>";
       }
       break;
   }
-
-  return TRUE;
 }