No need in explicit start session. It is started by the first join. Partially Ref #4
This commit is contained in:
parent
61afb431da
commit
c6a207ec51
@ -14,32 +14,13 @@ namespace OCA\Documents;
|
|||||||
|
|
||||||
class SessionController extends Controller{
|
class SessionController extends Controller{
|
||||||
|
|
||||||
public static function start($args){
|
public static function join($args){
|
||||||
$uid = self::preDispatch();
|
$uid = self::preDispatch();
|
||||||
|
$fileId = intval(@$args['file_id']);
|
||||||
try{
|
try{
|
||||||
$path = \OC\Files\Filesystem::getPath(@$_POST['fileid']);
|
$path = Storage::getFilePath($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'];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$session = Session::getSessionByFileId($fileId);
|
$session = Session::getSessionByFileId($fileId);
|
||||||
|
|
||||||
//If there is no existing session we need to start a new one
|
//If there is no existing session we need to start a new one
|
||||||
if (!$session || empty($session)){
|
if (!$session || empty($session)){
|
||||||
|
|
||||||
@ -63,29 +44,6 @@ class SessionController extends Controller{
|
|||||||
exit();
|
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
|
* Store the document content to its origin
|
||||||
@ -111,9 +69,7 @@ class SessionController extends Controller{
|
|||||||
throw new \Exception('Session does not exist');
|
throw new \Exception('Session does not exist');
|
||||||
}
|
}
|
||||||
|
|
||||||
$fileInfo = \OC\Files\Cache\Cache::getById($session['file_id']);
|
$path = Storage::getFilePath($session['file_id']);
|
||||||
$path = $fileInfo[1];
|
|
||||||
|
|
||||||
$view = new \OC\Files\View('/' . $session['owner']);
|
$view = new \OC\Files\View('/' . $session['owner']);
|
||||||
|
|
||||||
$isWritable = ($view->file_exists($path) && $view->isUpdatable($path)) || $view->isCreatable($path);
|
$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')
|
->action('\OCA\Documents\DocumentController', 'listAll')
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Session routes
|
* 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')
|
$this->create('documents_session_list', 'ajax/session/list')
|
||||||
->get()
|
->get()
|
||||||
->action('\OCA\Documents\SessionController', 'listAll')
|
->action('\OCA\Documents\SessionController', 'listAll')
|
||||||
@ -67,11 +57,11 @@ $this->create('documents_session_listhtml', 'ajax/session/listHtml')
|
|||||||
->action('\OCA\Documents\SessionController', 'listAllHtml')
|
->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()
|
->get()
|
||||||
->action('\OCA\Documents\SessionController', 'join')
|
->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()
|
->post()
|
||||||
->action('\OCA\Documents\SessionController', 'join')
|
->action('\OCA\Documents\SessionController', 'join')
|
||||||
;
|
;
|
||||||
|
@ -90,13 +90,23 @@ var documentsMain = {
|
|||||||
onStartup: function() {
|
onStartup: function() {
|
||||||
"use strict";
|
"use strict";
|
||||||
documentsMain.UI.init();
|
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/dojo-amalgamation', function() {
|
||||||
OC.addScript('documents', '3rdparty/webodf/webodf-debug').done(function() {
|
OC.addScript('documents', '3rdparty/webodf/webodf-debug').done(function() {
|
||||||
// preload stuff in the background
|
// preload stuff in the background
|
||||||
require({}, ["dojo/ready"], function(ready) {
|
require({}, ["dojo/ready"], function(ready) {
|
||||||
ready(function() {
|
ready(function() {
|
||||||
require({}, ["webodf/editor/Editor"], function(Editor) {
|
require({}, ["webodf/editor/Editor"], function(Editor) {
|
||||||
var esId = parent.location.hash.replace(/\W*/g, '');
|
|
||||||
if (esId){
|
if (esId){
|
||||||
documentsMain.prepareSession();
|
documentsMain.prepareSession();
|
||||||
documentsMain.joinSession(esId);
|
documentsMain.joinSession(esId);
|
||||||
@ -121,10 +131,11 @@ var documentsMain = {
|
|||||||
initSession: function(response) {
|
initSession: function(response) {
|
||||||
"use strict";
|
"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.'));
|
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.prepareGrid();
|
||||||
|
documentsMain.show();
|
||||||
setTimeout(OC.Notification.hide, 7000);
|
setTimeout(OC.Notification.hide, 7000);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -145,27 +156,17 @@ var documentsMain = {
|
|||||||
documentsMain.webodfEditorInstance.openSession(response.es_id, memberId, function() {
|
documentsMain.webodfEditorInstance.openSession(response.es_id, memberId, function() {
|
||||||
documentsMain.webodfEditorInstance.startEditing();
|
documentsMain.webodfEditorInstance.startEditing();
|
||||||
documentsMain.UI.hideOverlay();
|
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(
|
$.post(
|
||||||
OC.Router.generate('documents_session_start'),
|
OC.Router.generate('documents_session_join') + '/' + fileId,
|
||||||
{'fileid': fileid},
|
|
||||||
documentsMain.initSession
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
joinSession: function(esId) {
|
|
||||||
console.log('joining session '+esId);
|
|
||||||
$.post(
|
|
||||||
OC.Router.generate('documents_session_join') + '/' + esId,
|
|
||||||
{},
|
{},
|
||||||
documentsMain.initSession
|
documentsMain.initSession
|
||||||
);
|
);
|
||||||
@ -327,11 +328,8 @@ $(document).ready(function() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
documentsMain.prepareSession();
|
documentsMain.prepareSession();
|
||||||
|
if ($(this).attr('data-id')){
|
||||||
if ($(this).attr('data-esid')){
|
documentsMain.joinSession($(this).attr('data-id'));
|
||||||
documentsMain.joinSession($(this).attr('data-esid'));
|
|
||||||
} else if ($(this).attr('data-id')){
|
|
||||||
documentsMain.startSession($(this).attr('data-id'));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -344,7 +342,6 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
$('.add-document').on('click', '.add', documentsMain.onCreate);
|
$('.add-document').on('click', '.add', documentsMain.onCreate);
|
||||||
|
|
||||||
documentsMain.show();
|
|
||||||
var file_upload_start = $('#file_upload_start');
|
var file_upload_start = $('#file_upload_start');
|
||||||
file_upload_start.on('fileuploaddone', documentsMain.show);
|
file_upload_start.on('fileuploaddone', documentsMain.show);
|
||||||
//TODO when ending a session as the last user close session?
|
//TODO when ending a session as the last user close session?
|
||||||
|
@ -41,6 +41,36 @@ class Storage {
|
|||||||
return $list;
|
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
|
* @brief Cleanup session data on removing the document
|
||||||
* @param array
|
* @param array
|
||||||
|
@ -41,6 +41,10 @@ class View extends \OC\Files\View{
|
|||||||
throw new \Exception('Original document doesn\'t exist any more');
|
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';
|
$newName = '/' . sha1($view->file_get_contents($relPath)) . '.odt';
|
||||||
|
|
||||||
$view->copy($relPath, self::DOCUMENTS_DIRNAME . $newName);
|
$view->copy($relPath, self::DOCUMENTS_DIRNAME . $newName);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user