$meta = \OC\Files\Filesystem::getFileInfo($target);
$mime=$meta['mimetype'];
$id = $meta['fileid'];
- $eventSource->send('success', array('mime'=>$mime, 'size'=>\OC\Files\Filesystem::filesize($target), 'id' => $id));
+ $eventSource->send('success', array('mime'=>$mime, 'size'=>\OC\Files\Filesystem::filesize($target), 'id' => $id, 'etag' => $meta['etag']));
} else {
$eventSource->send('error', $l10n->t('Error while downloading %s to %s', array($source, $target)));
}
'mime' => $mime,
'size' => $size,
'content' => $content,
+ 'etag' => $meta['etag']
)));
exit();
}
'size' => $meta['size'],
'id' => $meta['fileid'],
'name' => basename($target),
+ 'etag' => $meta['etag'],
'originalname' => $files['tmp_name'][$i],
'uploadMaxFilesize' => $maxUploadFileSize,
'maxHumanFilesize' => $maxHumanFileSize,
'size' => $meta['size'],
'id' => $meta['fileid'],
'name' => basename($target),
+ 'etag' => $meta['etag'],
'originalname' => $files['tmp_name'][$i],
'uploadMaxFilesize' => $maxUploadFileSize,
'maxHumanFilesize' => $maxHumanFileSize,
tr.attr('data-size', result.data.size);
tr.attr('data-mime', result.data.mime);
tr.attr('data-id', result.data.id);
+ tr.attr('data-etag', result.data.etag);
tr.find('.filesize').text(humanFileSize(result.data.size));
var path = getPathForPreview(name);
- lazyLoadPreview(path, result.data.mime, function(previewpath) {
+ Files.lazyLoadPreview(path, result.data.mime, function(previewpath) {
tr.find('td.filename').attr('style','background-image:url('+previewpath+')');
- });
+ }, null, null, result.data.etag);
FileActions.display(tr.find('td.filename'), true);
} else {
OC.dialogs.alert(result.data.message, t('core', 'Could not create file'));
tr.data('mime', mime).data('id', id);
tr.attr('data-id', id);
var path = $('#dir').val()+'/'+localName;
- lazyLoadPreview(path, mime, function(previewpath) {
+ Files.lazyLoadPreview(path, mime, function(previewpath) {
tr.find('td.filename').attr('style', 'background-image:url('+previewpath+')');
- });
+ }, null, null, data.etag);
FileActions.display(tr.find('td.filename'), true);
});
eventSource.listen('error',function(error) {
tr.attr('data-id', id);
}
var path = getPathForPreview(name);
- lazyLoadPreview(path, mime, function(previewpath) {
+ Files.lazyLoadPreview(path, mime, function(previewpath) {
tr.find('td.filename').attr('style','background-image:url('+previewpath+')');
- });
+ }, null, null, tr.attr('data-etag'));
tr.find('td.filename').draggable(dragOptions);
},
isLoading:function(name) {
data.context = FileList.addFile(file.name, file.size, date, false, false, param);
// update file data
- data.context.attr('data-mime',file.mime).attr('data-id',file.id);
+ data.context.attr('data-mime',file.mime).attr('data-id',file.id).attr('data-etag', file.etag);
var permissions = data.context.data('permissions');
if (permissions !== file.permissions) {
FileActions.display(data.context.find('td.filename'), true);
var path = getPathForPreview(file.name);
- lazyLoadPreview(path, file.mime, function(previewpath) {
+ Files.lazyLoadPreview(path, file.mime, function(previewpath) {
data.context.find('td.filename').attr('style','background-image:url('+previewpath+')');
- });
+ }, null, null, file.etag);
}
}
});
}
},
+
+ /**
+ * Fix path name by removing double slash at the beginning, if any
+ */
+ fixPath: function(fileName) {
+ if (fileName.substr(0, 2) == '//') {
+ return fileName.substr(1);
+ }
+ return fileName;
+ },
+
isFileNameValid:function (name) {
if (name === '.') {
throw t('files', '\'.\' is an invalid file name.');
newtr.find('td.filename').attr('style','background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')');
} else {
var path = getPathForPreview(elem.name);
- lazyLoadPreview(path, elem.mime, function(previewpath) {
+ Files.lazyLoadPreview(path, elem.mime, function(previewpath) {
newtr.find('td.filename').attr('style','background-image:url('+previewpath+')');
- });
+ }, null, null, elem.etag);
}
});
return files;
}
-function getMimeIcon(mime, ready) {
- if (getMimeIcon.cache[mime]) {
- ready(getMimeIcon.cache[mime]);
+Files.getMimeIcon = function(mime, ready) {
+ if (Files.getMimeIcon.cache[mime]) {
+ ready(Files.getMimeIcon.cache[mime]);
} else {
$.get( OC.filePath('files','ajax','mimeicon.php'), {mime: mime}, function(path) {
- getMimeIcon.cache[mime]=path;
- ready(getMimeIcon.cache[mime]);
+ Files.getMimeIcon.cache[mime]=path;
+ ready(Files.getMimeIcon.cache[mime]);
});
}
}
-getMimeIcon.cache={};
+Files.getMimeIcon.cache={};
function getPathForPreview(name) {
var path = $('#dir').val() + '/' + name;
return path;
}
-function lazyLoadPreview(path, mime, ready, width, height) {
+Files.lazyLoadPreview = function(path, mime, ready, width, height, etag) {
// get mime icon url
- getMimeIcon(mime, function(iconURL) {
+ Files.getMimeIcon(mime, function(iconURL) {
+ var urlSpec = {};
+ var previewURL;
ready(iconURL); // set mimeicon URL
// now try getting a preview thumbnail URL
if ( ! height ) {
height = $('#filestable').data('preview-y');
}
+ // note: the order of arguments must match the one
+ // from the server's template so that the browser
+ // knows it's the same file for caching
+ urlSpec.x = width;
+ urlSpec.y = height;
+ urlSpec.file = Files.fixPath(path);
+
+ if (etag){
+ // use etag as cache buster
+ urlSpec.c = etag;
+ }
+ else {
+ console.warn('Files.lazyLoadPreview(): missing etag argument');
+ }
+
if ( $('#publicUploadButtonMock').length ) {
- var previewURL = OC.Router.generate('core_ajax_public_preview', {file: path, x:width, y:height, t:$('#dirToken').val()});
+ urlSpec.t = $('#dirToken').val();
+ previewURL = OC.Router.generate('core_ajax_public_preview', urlSpec);
} else {
- var previewURL = OC.Router.generate('core_ajax_preview', {file: path, x:width, y:height});
- }
- $.get(previewURL, function() {
- previewURL = previewURL.replace('(', '%28');
- previewURL = previewURL.replace(')', '%29');
- previewURL += '&reload=true';
-
- // preload image to prevent delay
- // this will make the browser cache the image
- var img = new Image();
- img.onload = function(){
- //set preview thumbnail URL
- ready(previewURL);
- }
- img.src = previewURL;
- });
+ previewURL = OC.Router.generate('core_ajax_preview', urlSpec);
+ }
+ previewURL = previewURL.replace('(', '%28');
+ previewURL = previewURL.replace(')', '%29');
+
+ // preload image to prevent delay
+ // this will make the browser cache the image
+ var img = new Image();
+ img.onload = function(){
+ //set preview thumbnail URL
+ ready(previewURL);
+ }
+ img.src = previewURL;
});
}
if($file['isPreviewAvailable']) {
$pathForPreview = $file['directory'] . '/' . $file['name'];
- return \OC_Helper::previewIcon($pathForPreview);
+ return \OC_Helper::previewIcon($pathForPreview) . '&c=' . $file['etag'];
}
return \OC_Helper::mimetypeIcon($file['mimetype']);
}
data-type="<?php ($file['type'] == 'dir')?p('dir'):p('file')?>"
data-mime="<?php p($file['mimetype'])?>"
data-size="<?php p($file['size']);?>"
+ data-etag="<?php p($file['etag']);?>"
data-permissions="<?php p($file['permissions']); ?>">
<?php if($file['isPreviewAvailable']): ?>
<td class="filename svg preview-icon"
$relativePath = substr($file['path'], 6);
$relativePath = substr($relativePath, strlen($sharingRoot));
if($file['isPreviewAvailable']) {
- return OCP\publicPreview_icon($relativePath, $sharingToken);
+ return OCP\publicPreview_icon($relativePath, $sharingToken) . '&c=' . $file['etag'];
}
return OCP\mimetype_icon($file['mimetype']);
}
conflict.find('.replacement .mtime').text(formatDate(replacement.lastModifiedDate));
}
var path = getPathForPreview(original.name);
- lazyLoadPreview(path, original.mime, function(previewpath){
+ Files.lazyLoadPreview(path, original.mime, function(previewpath){
conflict.find('.original .icon').css('background-image','url('+previewpath+')');
- }, 96, 96);
+ }, 96, 96, original.etag);
getCroppedPreview(replacement).then(
function(path){
conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
}, function(){
- getMimeIcon(replacement.type,function(path){
+ Files.getMimeIcon(replacement.type,function(path){
conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
});
}
* Returns the path to the preview of the file.
*/
public static function previewIcon($path) {
- return self::linkToRoute( 'core_ajax_preview', array('x' => 36, 'y' => 36, 'file' => urlencode($path) ));
+ return self::linkToRoute( 'core_ajax_preview', array('x' => 36, 'y' => 36, 'file' => $path ));
}
public static function publicPreviewIcon( $path, $token ) {
- return self::linkToRoute( 'core_ajax_public_preview', array('x' => 36, 'y' => 36, 'file' => urlencode($path), 't' => $token));
+ return self::linkToRoute( 'core_ajax_public_preview', array('x' => 36, 'y' => 36, 'file' => $path, 't' => $token));
}
/**