No need in explicit start session. It is started by the first join. Partially Ref #4

pull/1/head
Victor Dubiniuk 11 years ago
parent 61afb431da
commit c6a207ec51

@ -14,32 +14,13 @@ namespace OCA\Documents;
class SessionController extends Controller{
public static function start($args){
public static function join($args){
$uid = self::preDispatch();
$fileId = intval(@$args['file_id']);
try{
$path = \OC\Files\Filesystem::getPath(@$_POST['fileid']);
if (!$path){
throw new \Exception('No file has been passed');
}
$info = \OC\Files\Filesystem::getFileInfo($path);
if (!$info){
// Is it shared?
//searchByMime returns incorrect path for shared items
//
if (substr($path, 0, 14) === '/Shared/files/'){
// remove 'files/' from path as it's relative to '/Shared'
$path = '/Shared' . substr($path, 13);
$sharedInfo = \OC\Files\Filesystem::getFileInfo($path);
$fileId = $sharedInfo['fileid'];
}
} else {
$fileId = $info['fileid'];
}
$path = Storage::getFilePath($fileId);
$session = Session::getSessionByFileId($fileId);
//If there is no existing session we need to start a new one
if (!$session || empty($session)){
@ -63,29 +44,6 @@ class SessionController extends Controller{
exit();
}
}
public static function join($args){
$esId = @$args['es_id'];
$uid = self::preDispatch();
try{
if (!$esId){
throw new \Exception('Session id is empty');
}
$session = Session::getSession($esId);
if (!$session || empty($session)){
throw new \Exception('Session doesn\'t exist');
}
$session['member_id'] = (string) Member::add($session['es_id'], $uid, Helper::getRandomColor());
\OCP\JSON::success($session);
exit();
} catch (\Exception $e){
Helper::warnLog('Joining a session failed. Reason:' . $e->getMessage());
\OCP\JSON::error(array('message'=>$e->getMessage()));
exit();
}
}
/**
* Store the document content to its origin
@ -111,9 +69,7 @@ class SessionController extends Controller{
throw new \Exception('Session does not exist');
}
$fileInfo = \OC\Files\Cache\Cache::getById($session['file_id']);
$path = $fileInfo[1];
$path = Storage::getFilePath($session['file_id']);
$view = new \OC\Files\View('/' . $session['owner']);
$isWritable = ($view->file_exists($path) && $view->isUpdatable($path)) || $view->isCreatable($path);

@ -31,19 +31,9 @@ $this->create('documents_documents_list', 'ajax/documents/list')
->action('\OCA\Documents\DocumentController', 'listAll')
;
/**
* Session routes
*/
$this->create('documents_session_start', 'ajax/session/start')
->get()
->action('\OCA\Documents\SessionController', 'start')
;
$this->create('documents_session_start', 'ajax/session/start')
->post()
->action('\OCA\Documents\SessionController', 'start')
;
$this->create('documents_session_list', 'ajax/session/list')
->get()
->action('\OCA\Documents\SessionController', 'listAll')
@ -67,11 +57,11 @@ $this->create('documents_session_listhtml', 'ajax/session/listHtml')
->action('\OCA\Documents\SessionController', 'listAllHtml')
;
$this->create('documents_session_join', 'ajax/session/join/{es_id}')
$this->create('documents_session_join', 'ajax/session/join/{file_id}')
->get()
->action('\OCA\Documents\SessionController', 'join')
;
$this->create('documents_session_join', 'ajax/session/join/{es_id}')
$this->create('documents_session_join', 'ajax/session/join/{file_id}')
->post()
->action('\OCA\Documents\SessionController', 'join')
;

@ -90,13 +90,23 @@ var documentsMain = {
onStartup: function() {
"use strict";
documentsMain.UI.init();
// Does anything indicate that we need to autostart a session?
var esId = parent.location.hash.replace(/\W*/g, '');
if (!esId){
documentsMain.show();
} else {
documentsMain.UI.showOverlay();
}
OC.addScript('documents', '3rdparty/webodf/dojo-amalgamation', function() {
OC.addScript('documents', '3rdparty/webodf/webodf-debug').done(function() {
// preload stuff in the background
require({}, ["dojo/ready"], function(ready) {
ready(function() {
require({}, ["webodf/editor/Editor"], function(Editor) {
var esId = parent.location.hash.replace(/\W*/g, '');
if (esId){
documentsMain.prepareSession();
documentsMain.joinSession(esId);
@ -121,10 +131,11 @@ var documentsMain = {
initSession: function(response) {
"use strict";
runtime.assert(response.status, "Server error");
if (response.status==='error'){
if (!response || !response.status || response.status==='error'){
OC.Notification.show(t('documents', 'Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently.'));
documentsMain.prepareGrid();
documentsMain.show();
setTimeout(OC.Notification.hide, 7000);
return;
}
@ -145,27 +156,17 @@ var documentsMain = {
documentsMain.webodfEditorInstance.openSession(response.es_id, memberId, function() {
documentsMain.webodfEditorInstance.startEditing();
documentsMain.UI.hideOverlay();
parent.location.hash = response.es_id;
parent.location.hash = response.file_id;
});
});
});
},
startSession: function(fileid) {
"use strict";
console.log('starting session for fileid '+fileid);
joinSession: function(fileId) {
console.log('joining session '+fileId);
$.post(
OC.Router.generate('documents_session_start'),
{'fileid': fileid},
documentsMain.initSession
);
},
joinSession: function(esId) {
console.log('joining session '+esId);
$.post(
OC.Router.generate('documents_session_join') + '/' + esId,
OC.Router.generate('documents_session_join') + '/' + fileId,
{},
documentsMain.initSession
);
@ -327,11 +328,8 @@ $(document).ready(function() {
return;
}
documentsMain.prepareSession();
if ($(this).attr('data-esid')){
documentsMain.joinSession($(this).attr('data-esid'));
} else if ($(this).attr('data-id')){
documentsMain.startSession($(this).attr('data-id'));
if ($(this).attr('data-id')){
documentsMain.joinSession($(this).attr('data-id'));
}
});
@ -344,7 +342,6 @@ $(document).ready(function() {
$('.add-document').on('click', '.add', documentsMain.onCreate);
documentsMain.show();
var file_upload_start = $('#file_upload_start');
file_upload_start.on('fileuploaddone', documentsMain.show);
//TODO when ending a session as the last user close session?

@ -41,6 +41,36 @@ class Storage {
return $list;
}
/**
* @brief Retrieve path by fileId
* @param int $fileId
* @throws \Exception
*/
public static function getFilePath($fileId){
if (!$fileId){
throw new \Exception('No valid file has been passed');
}
$fileInfo = \OC\Files\Cache\Cache::getById($fileId);
$path = @$fileInfo[1];
if (!$path){
throw new \Exception('File not found in cache');
}
// Strip /files infront of the path
$normalizedPath = preg_replace('/^\/?files/', '', $path);
if (!\OC\Files\Filesystem::file_exists($path)
&& \OC\Files\Filesystem::file_exists('/Shared' . $normalizedPath)
&& \OC\Files\Filesystem::is_file('/Shared' . $normalizedPath)
){
// this file is shared
$normalizedPath = '/Shared' . $normalizedPath;
}
return $normalizedPath;
}
/**
* @brief Cleanup session data on removing the document
* @param array

@ -41,6 +41,10 @@ class View extends \OC\Files\View{
throw new \Exception('Original document doesn\'t exist any more');
}
if (!$view->is_file($relPath)){
throw new \Exception('Object ' . $relPath . ' is not a file.');
}
$newName = '/' . sha1($view->file_get_contents($relPath)) . '.odt';
$view->copy($relPath, self::DOCUMENTS_DIRNAME . $newName);

Loading…
Cancel
Save