4 * Copyright (C) 2011, Free Software Foundation, Inc.
9 * This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU Affero General Public License as published by
11 * the Free Software Foundation, either version 3 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU Affero General Public License for more details.
19 * You should have received a copy of the GNU Affero General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
24 * @author Ian Denhardt <ian@zenhack.net>
25 * @copyright 2011 Free Software Foundation, Inc.
26 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
29 if (!defined('STATUSNET')) {
33 class GNUsocialVideoPlugin extends MicroAppPlugin
36 function onCheckSchema()
38 $schema = Schema::get();
40 $schema->ensureTable('video', Video::schemaDef());
45 function onAutoload($cls)
47 $dir = dirname(__FILE__);
50 case 'PostvideoAction':
51 include_once $dir . '/actions/postvideo.php';
54 include_once $dir . '/Video.php';
57 include_once $dir . '/videoform.php';
59 case 'ShowvideoAction':
60 include_once $dir . '/showvideo.php';
68 function onRouterInitialized($m)
70 $m->connect('main/postvideo', array('action' => 'postvideo'));
71 $m->connect('showvideo/:id', array('action' => 'showvideo'));
75 function entryForm($out)
77 return new VideoForm($out);
87 return 'GNUsocialVideo';
92 return array(Video::OBJECT_TYPE);
95 function saveNoticeFromActivity($activity, $actor, $options=array())
97 if(count($activity->objects) != 1) {
98 throw new Exception('Too many activity objects.');
101 $videoObj = $activity->objects[0];
103 if ($videoObj->type != Video::OBJECT_TYPE) {
104 throw new Exception('Wrong type for object.');
107 // For now we read straight from the xml tree, no other way to get this information.
108 // When there's a better API for this, we should change to it.
109 $uri = ActivityUtils::getLink($activity->entry, 'enclosure');
111 $options['object_type'] = Video::OBJECT_TYPE;
113 Video::saveNew($actor, $uri, $options);
117 function activityObjectFromNotice($notice)
119 $object = new ActivityObject();
120 $object->id = $notice->uri;
121 $object->type = Video::OBJECT_TYPE;
122 $object->title = $notice->content;
123 $object->summary = $notice->content;
124 $object->link = $notice->bestUrl();
126 $vid = Video::getByNotice($notice);
129 $object->extra[] = array('link', array('rel' => 'enclosure', 'href' => $vid->url), array());
136 function showNotice($notice, $out)
138 $vid = Video::getByNotice($notice);
140 $out->element('video', array('src' => $vid->url,
142 'controls' => 'controls'));
146 function deleteRelated($notice)
148 $vid = Video::getByNotice($notice);