From f720567c446bf1a136c8b5bec303801931f5ae76 Mon Sep 17 00:00:00 2001
From: "Alan J. Pippin" <ajp@server.pippins.net>
Date: Wed, 28 May 2008 22:01:49 -0600
Subject: [PATCH] Added support for generic sites that have embedded videos on
 them. Fixed google video thumbnail parsing.

---
 ItemAddEmbedVideo.inc           | 71 ++++++++++++++++++++++++++++++---
 templates/ItemAddEmbedVideo.tpl |  1 +
 2 files changed, 67 insertions(+), 5 deletions(-)

diff --git a/ItemAddEmbedVideo.inc b/ItemAddEmbedVideo.inc
index ac7b1cf..b2a4539 100644
--- a/ItemAddEmbedVideo.inc
+++ b/ItemAddEmbedVideo.inc
@@ -71,6 +71,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	   global $width, $height, $externalFlvPlayer, $externalFlvPlayerVars;
 	   global $flvThumbnail, $useRemoteSize, $autoStart;
 	   global $watermarkVideos, $watermarkImage, $watermarkAlignment;
+	   global $unsupported_url;
 
 	   /* Find out what value our parameters should have by looking to see if they
             * are defined in our overrides section or default section. If they are not
@@ -169,6 +170,9 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	   $gallery2_flv_thumbnail = "modules/embedvideo/images/G2video_thumbnail.jpg";
 	   $gallery2_video_watermark = "modules/embedvideo/images/G2video_watermark1.png";
 	   $gallery2_flv_player = "modules/flashvideo/lib/G2flv.swf";
+
+	   /* Unsupported URLs */
+	   $unsupported_url=0;
 	   
 	   /* Store the passed URL in a shorter local variable */
 	   $url = $form['webPage']['URL'];
@@ -194,7 +198,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 
 	       /* If extra params were given, handle them here */
 	       if(strcmp($extra_params,"")) {
-		 /* Handle the HD format information */
+		 /* Handle the high quality format information */
 		 if(preg_match("/fmt=(\d+)/",$extra_params,$matches)) {
 		   $extra_params="&ap=%2526fmt%3D".$matches[1];
 		 }
@@ -325,10 +329,11 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	       }
 
 	       /* Extract the thumbnail URL from the webpage contents */
-	       preg_match('/<img src="(http:\/\/video\.google\.com\/ThumbnailServer2.+?)" /i',
+	       preg_match('/thumbnail: \'(http:\/\/.*?\/ThumbnailServer2.+?)\'/i',
 			  $contents, $matches);
 	       $thumbnail=$matches[1];
-	       $thumbnail=preg_replace("/offsetms=0/","offsetms=0",$thumbnail);
+	       $thumbnail=preg_replace("/\\\\x26/","&",$thumbnail);
+	       $thumbnail=preg_replace("/\\\\x3d/","=",$thumbnail);
 
 	       /* Determine what our width and height should be based on our useRemoteSize parameter */
 	       if(!strcmp($useRemoteSize,"true")) {
@@ -942,13 +947,69 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 		   $description.= 'pluginspage="http://www.macromedia.com/go/getflashplayer"/>';
 		   $description.= '</object></div>';
 	       }
-	       
+
+	   /*
+	    **********************************
+	    * Embed a generic <object ... <embed ... video
+	    **********************************
+            */ 
+	   } else {
+
+	     /* Grab the contents of the webpage used to display the video */
+	     list ($successfullyCopied, $contents, $response, $headers) =
+	       GalleryCoreApi::fetchWebPage($url, $extraHeaders);
+	     if (!$successfullyCopied) {
+	       return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+						  "Unable to get video information at url: $url - $response"),NULL,NULL);
+	     }
+
+	     /* Extract the URL base (site name) */
+	     preg_match("/(http:\/\/.+?)\//i",$url,$matches);
+	     $site = $matches[1];
+	     print "site: $site<br>";
+	     
+	     /* Extract the summary from the webpage contents */
+	     $summary="Unknown";
+	     if(preg_match('/<meta name="description" content="(.+?)"/si', $contents, $matches)) {
+	       $summary=$matches[1];
+	     }
+
+	     /* Extract the title from the webpage contents */
+	     $title="Unknown";
+	     if(preg_match('/<title>(.+?)<\/title>/i', $contents, $matches)) {
+	       $title=$matches[1];
+	     }
+
+	     /*
+	      * Set the thumbnail to some generic jpg image,
+	      * since we can't extract it from a generic website.
+	      * If no parameter is set, set it to a default value.
+	      */
+	     if(preg_match("/\w+/", $flvThumbnail)) {
+	       $thumbnail = $flvThumbnail;
+	     } else {
+	       $thumbnail = $gallery2_url.$gallery2_flv_thumbnail;
+	     }
+
+	     /* Format the description to hold a reference to the embedded video */
+	     if(preg_match('/(<object.+?<embed.+?<\/object>)/', $contents, $matches)) { 
+	       $description=$matches[1];
+	       if(!strcmp($useRemoteSize,"false")) {
+		 $description=preg_replace("/width=\"\d+\"/","width=\"".$width."\"",$description);
+		 $description=preg_replace("/height=\"\d+\"/","height=\"".$height."\"",$description);
+	       }
+	       $description=preg_replace("/src=\"\//","src=\"".$site."\/",$description);
+	     } else {
+	       $unsupported_url=1;
+	     }
+	   }
+	   
 	  /*
 	   **********************************
 	   * Unsupported URL to embed
 	   **********************************
            */   
-	   } else {
+	   if($unsupported_url == 1) {
 	       return array(GalleryCoreApi::error(ERROR_UNSUPPORTED_FILE_TYPE,__FILE__,__LINE__,
 			    "Unable to embed video from: $url"),null,null);
 	   }
diff --git a/templates/ItemAddEmbedVideo.tpl b/templates/ItemAddEmbedVideo.tpl
index 4bb80b3..a4660a5 100644
--- a/templates/ItemAddEmbedVideo.tpl
+++ b/templates/ItemAddEmbedVideo.tpl
@@ -31,6 +31,7 @@
     <b>Myspace1:</b> http://vids.myspace.com/index.cfm?fuseaction=vids.individual&VideoID=xxxxxxxx<br>
     <b>Myspace2:</b> http://myspacetv.com/index.cfm?fuseaction=vids.individual&videoid=xxxxxxxx<br>
     <b>Vimeo:</b> http://www.vimeo.com/xxxxxx<br>
+    <b>Generic:</b> Any webpage with an '&lt;object ... &lt;embed ...' style video on its page<br>
     <br>
     <b><u>Supported File Types:</u></b><br>
     <b>FlashVideo (.flv):</b> http://aaa.bbb.ccc/video.flv<br>
-- 
2.34.1