]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/GNUsocialVideo/GNUsocialVideoPlugin.php
Merged
[quix0rs-gnu-social.git] / plugins / GNUsocialVideo / GNUsocialVideoPlugin.php
index 5e9a6f85e9588b077b60f3c17ed99dab9216f372..abf0f304301df01b419b226af352e04e561377d9 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * GNU Social
- * Copyright (C) 2010, Free Software Foundation, Inc.
+ * Copyright (C) 2011, Free Software Foundation, Inc.
  *
  * PHP version 5
  *
@@ -22,7 +22,7 @@
  * @category  Widget
  * @package   GNU Social
  * @author    Ian Denhardt <ian@zenhack.net>
- * @copyright 2010 Free Software Foundation, Inc.
+ * @copyright 2011 Free Software Foundation, Inc.
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
  */
 
@@ -30,25 +30,103 @@ if (!defined('STATUSNET')) {
     exit(1);
 }
 
-class GNUsocialVideoPlugin extends Plugin
+class GNUsocialVideoPlugin extends MicroAppPlugin
 {
-    function onAutoload($cls)
-    {
-        $dir = dirname(__FILE__);
-        switch($cls)
-        {
-        case 'PostvideoAction':
-            include_once $dir . '/actions/postvideo.php';
-            break;
-        default:
-            break;
-        }
+
+    var $oldSaveNew = true;
+
+    function onCheckSchema()
+    {
+        $schema = Schema::get();
+
+        $schema->ensureTable('video', Video::schemaDef());
+
         return true;
     }
 
-    function onRouterInitialized($m)
+    function onRouterInitialized(URLMapper $m)
     {
         $m->connect('main/postvideo', array('action' => 'postvideo'));
+        $m->connect('showvideo/:id', array('action' => 'showvideo'));
         return true;
     }
+
+    function entryForm($out)
+    {
+        return new VideoForm($out);
+    }
+
+    function appTitle()
+    {
+        return _('Video');
+    }
+
+    function tag()
+    {
+        return 'GNUsocialVideo';
+    }
+
+    function types()
+    {
+        return array(Video::OBJECT_TYPE);
+    }
+
+    function saveNoticeFromActivity(Activity $activity, Profile $actor, array $options=array())
+    {
+        if(count($activity->objects) != 1) {
+            throw new Exception('Too many activity objects.');
+        }
+
+        $videoObj = $activity->objects[0];
+
+        if ($videoObj->type != Video::OBJECT_TYPE) {
+            throw new Exception('Wrong type for object.');
+        }
+
+        // For now we read straight from the xml tree, no other way to get this information.
+        // When there's a better API for this, we should change to it.
+        $uri = ActivityUtils::getLink($activity->entry, 'enclosure');
+
+        $options['object_type'] = Video::OBJECT_TYPE;
+
+        Video::saveNew($actor, $uri, $options);
+   
+    }
+
+    function activityObjectFromNotice(Notice $notice)
+    {
+        $object = new ActivityObject();
+        $object->id = $notice->uri;
+        $object->type = Video::OBJECT_TYPE;
+        $object->title = $notice->content;
+        $object->summary = $notice->content;
+        $object->link = $notice->getUrl();
+
+        $vid = Video::getByNotice($notice);
+
+        if ($vid) {
+            $object->extra[] = array('link', array('rel' => 'enclosure', 'href' => $vid->url), array());
+        }
+        
+        return $object;
+        
+    }
+
+    function showNotice(Notice $notice, HTMLOutputter $out)
+    {
+        $vid = Video::getByNotice($notice);
+        if ($vid) {
+            $out->element('video', array('src' => $vid->url,
+                'width' => '100%',
+                'controls' => 'controls'));
+        }
+    }
+
+    function deleteRelated(Notice $notice)
+    {
+        $vid = Video::getByNotice($notice);
+        if ($vid) {
+            $vid->delete();
+        }
+    }
 }