diff --git a/boot.php b/boot.php index 143d850a9a..86a37ce90b 100644 --- a/boot.php +++ b/boot.php @@ -6,6 +6,7 @@ require_once('include/plugin.php'); require_once('include/text.php'); require_once("include/pgettext.php"); require_once('include/nav.php'); +require_once('include/cache.php'); define ( 'FRIENDIKA_PLATFORM', 'Free Friendika'); define ( 'FRIENDIKA_VERSION', '2.3.1144' ); diff --git a/images/icons/10/play.png b/images/icons/10/play.png new file mode 100644 index 0000000000..a9f99e4d18 Binary files /dev/null and b/images/icons/10/play.png differ diff --git a/images/icons/16/play.png b/images/icons/16/play.png new file mode 100644 index 0000000000..19ad05bf2e Binary files /dev/null and b/images/icons/16/play.png differ diff --git a/images/icons/22/play.png b/images/icons/22/play.png new file mode 100644 index 0000000000..a7a8b61241 Binary files /dev/null and b/images/icons/22/play.png differ diff --git a/images/icons/48/play.png b/images/icons/48/play.png new file mode 100644 index 0000000000..fce5893704 Binary files /dev/null and b/images/icons/48/play.png differ diff --git a/images/icons/Makefile b/images/icons/Makefile index 39428d1545..6a96fb6762 100644 --- a/images/icons/Makefile +++ b/images/icons/Makefile @@ -1,7 +1,8 @@ IMAGES=add.png edit.png gear.png info.png menu.png \ notify_off.png star.png delete.png feed.png group.png \ - lock.png notice.png notify_on.png user.png link.png + lock.png notice.png notify_on.png user.png link.png \ + play.png DESTS=10/ 16/ 22/ 48/ \ $(addprefix 10/, $(IMAGES)) \ diff --git a/images/icons/play.png b/images/icons/play.png new file mode 100644 index 0000000000..7c942072e7 Binary files /dev/null and b/images/icons/play.png differ diff --git a/include/bbcode.php b/include/bbcode.php index b33be686e4..a8c66d30fd 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -9,6 +9,22 @@ function stripcode_br_cb($s) { return '[code]' . str_replace('
', '', $s[1]) . '[/code]'; } +function tryoembed($match){ + $url = ((count($match)==2)?$match[1]:$match[2]); + + $o = oembed_fetch_url($url); + + //echo "
"; var_dump($match, $url, $o); killme();
+
+	if ($o->type=="error") return $match[0];
+	
+	$html = oembed_format_object($o);
+	
+	return $html;
+	
+}
+
+
 
 	// BBcode 2 HTML was written by WAY2WEB.net
 	// extended to work with Mistpark/Friendika - Mike Macgirvin
@@ -40,11 +56,14 @@ function bbcode($Text,$preserve_nl = false) {
 	// Set up the parameters for a MAIL search string
 	$MAILSearchString = $URLSearchString;
 
+
 	// Perform URL Search
-
-
 	$Text = preg_replace("/([^\]\=]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1$2', $Text);
+	
+	$Text = preg_replace_callback("/\[bookmark\=([^\]]*)\].*?\[\/bookmark\]/ism",'tryoembed',$Text);
+	$Text = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",'[url=$1]$2[/url]',$Text);
 
+	$Text = preg_replace_callback("/\[url\]([$URLSearchString]*)\[\/url\]/ism",'tryoembed',$Text);
 	$Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '$1', $Text);
 	$Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '$2', $Text);
 	//$Text = preg_replace("/\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[\/url\]/ism", '$2', $Text);
@@ -120,6 +139,13 @@ function bbcode($Text,$preserve_nl = false) {
 	// [img]pathtoimage[/img]
 	$Text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '' . t('Image/photo') . '', $Text);
 
+
+
+	// Try to Oembed
+	$Text = preg_replace_callback("/\[video\](.*?)\[\/video\]/ism", 'tryoembed', $Text);
+	$Text = preg_replace_callback("/\[audio\](.*?)\[\/audio\]/ism", 'tryoembed', $Text);
+
+
 	// html5 video and audio
 
 	$Text = preg_replace("/\[video\](.*?)\[\/video\]/ism", '', $Text);
@@ -129,17 +155,25 @@ function bbcode($Text,$preserve_nl = false) {
 	$Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/ism", '', $Text);
          
 
-	if (get_pconfig(local_user(), 'oembed', 'use_for_youtube' )==1){
+	/*if (get_pconfig(local_user(), 'oembed', 'use_for_youtube' )==1){
 		// use oembed for youtube links
 		$Text = preg_replace("/\[youtube\]/",'[embed]',$Text); 
 		$Text = preg_replace("/\[\/youtube\]/",'[/embed]',$Text); 
-	} else {
+	} else {*/
 		// Youtube extensions
+        $Text = preg_replace_callback("/\[youtube\](https?:\/\/www.youtube.com\/watch\?v\=.*?)\[\/youtube\]/ism", 'tryoembed', $Text);        
+        $Text = preg_replace_callback("/\[youtube\](https?:\/\/youtu.be\/.*?)\[\/youtube\]/ism",'tryoembed',$Text); 
+        
         $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); 
         $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/embed\/(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); 
         $Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); 
+		
+        
 		$Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", '', $Text);
-	}
+	//}
+
+	$Text = preg_replace_callback("/\[vimeo\](https?:\/\/player.vimeo.com\/video\/[0-9]+).*?\[\/vimeo\]/ism",'tryoembed',$Text); 
+	$Text = preg_replace_callback("/\[vimeo\](https?:\/\/vimeo.com\/[0-9]+).*?\[\/vimeo\]/ism",'tryoembed',$Text); 
 
 	$Text = preg_replace("/\[vimeo\]https?:\/\/player.vimeo.com\/video\/([0-9]+)(.*?)\[\/vimeo\]/ism",'[vimeo]$1[/vimeo]',$Text); 
 	$Text = preg_replace("/\[vimeo\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/vimeo\]/ism",'[vimeo]$1[/vimeo]',$Text); 
diff --git a/include/cache.php b/include/cache.php
new file mode 100644
index 0000000000..082974c61a
--- /dev/null
+++ b/include/cache.php
@@ -0,0 +1,29 @@
+query("//link[@type='application/json+oembed']");
-			foreach($entries as $e){
-				$href = $e->getAttributeNode("href")->nodeValue;
-				$txt = fetch_url($href);
+		if($html_text){
+			$dom = @DOMDocument::loadHTML($html_text);
+			if ($dom){
+				$xpath = new DOMXPath($dom);
+				$attr = "oembed";
+			
+				$xattr = oe_build_xpath("class","oembed");
+				$entries = $xpath->query("//link[@type='application/json+oembed']");
+				foreach($entries as $e){
+					$href = $e->getAttributeNode("href")->nodeValue;
+					$txt = fetch_url($href);
+				}
 			}
 		}
 		
@@ -44,10 +41,8 @@ function oembed_fetch_url($embedurl){
 		if ($txt[0]!="{") $txt='{"type":"error"}';
 	
 		//save in cache
-		/*q("INSERT INTO `cache` VALUES ('%s','%s','%s')",
-			dbesc($embedurl),
-			dbesc($txt),
-			dbesc(datetime_convert()));*/
+		Cache::set($embedurl,$txt);
+
 	}
 	
 	$j = json_decode($txt);
@@ -61,12 +56,20 @@ function oembed_format_object($j){
 	switch ($j->type) {
 		case "video": {
 			if (isset($j->thumbnail_url)) {
-				/*$tw = (isset($j->thumbnail_width)) ? $j->thumbnail_width:200;
-				$th = (isset($j->thumbnail_height)) ? $j->thumbnail_height:180;*/
-				$tw=150; $th=120; 
-				$ret.= "";
-				$ret.= "";
-				$ret.= "";
+				$tw = (isset($j->thumbnail_width)) ? $j->thumbnail_width:200;
+				$th = (isset($j->thumbnail_height)) ? $j->thumbnail_height:180;
+				$tr = $tw/$th;
+				
+				$th=120; $tw = $th*$tr;
+				$tpl=get_markup_template('oembed_video.tpl');
+				$ret.=replace_macros($tpl, array(
+					'$embedurl'=>$embedurl,
+					'$escapedhtml'=>urlencode($j->html),
+					'$tw'=>$tw,
+					'$th'=>$th,
+					'$turl'=>$j->thumbnail_url,
+				));
+				
 			} else {
 				$ret=$j->html;
 			}
@@ -154,4 +157,5 @@ function oembed_html2bbcode($text) {
 	} 
 }
 
-?>
+
+
diff --git a/include/poller.php b/include/poller.php
index cef0647b59..a19f0716f6 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -64,8 +64,7 @@ function poller_run($argv, $argc){
 	}
 
 	// clear old cache
-	q("DELETE FROM `cache` WHERE `updated` < '%s'",
-		dbesc(datetime_convert('UTC','UTC',"now - 30 days")));
+	Cache::clear();
 
 	$manual_id  = 0;
 	$generation = 0;
diff --git a/mod/item.php b/mod/item.php
index ab104735b9..0e855d54d9 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -338,7 +338,6 @@ function item_post(&$a) {
 	$bookmark = 0;
 	if(preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$body,$match)) {
 		$bookmark = 1;
-		$body = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",'[url=$1]$2[/url]',$body);
 	}
 
 
diff --git a/view/oembed_video.tpl b/view/oembed_video.tpl
new file mode 100644
index 0000000000..29b5149ba2
--- /dev/null
+++ b/view/oembed_video.tpl
@@ -0,0 +1,4 @@
+
+	
+	
+