123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- /**
- * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
- * SPDX-FileCopyrightText: 2015 ownCloud, Inc.
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
- (function(OC, OCA) {
- /**
- * @class OC.Files.FileInfo
- * @classdesc File information
- *
- * @param {Object} attributes file data
- * @param {number} attributes.id file id
- * @param {string} attributes.name file name
- * @param {string} attributes.path path leading to the file,
- * without the file name and with a leading slash
- * @param {number} attributes.size size
- * @param {string} attributes.mimetype mime type
- * @param {string} attributes.icon icon URL
- * @param {number} attributes.permissions permissions
- * @param {Date} attributes.mtime modification time
- * @param {string} attributes.etag etag
- * @param {string} mountType mount type
- *
- * @since 8.2
- */
- var FileInfoModel = OC.Backbone.Model.extend({
- defaults: {
- mimetype: 'application/octet-stream',
- path: ''
- },
- _filesClient: null,
- initialize: function(data, options) {
- if (!_.isUndefined(data.id)) {
- data.id = parseInt(data.id, 10);
- }
- if( options ){
- if (options.filesClient) {
- this._filesClient = options.filesClient;
- }
- }
- },
- /**
- * Returns whether this file is a directory
- *
- * @return {boolean} true if this is a directory, false otherwise
- */
- isDirectory: function() {
- return this.get('mimetype') === 'httpd/unix-directory';
- },
- /**
- * Returns whether this file is an image
- *
- * @return {boolean} true if this is an image, false otherwise
- */
- isImage: function() {
- if (!this.has('mimetype')) {
- return false;
- }
- return this.get('mimetype').substr(0, 6) === 'image/'
- || this.get('mimetype') === 'application/postscript'
- || this.get('mimetype') === 'application/illustrator'
- || this.get('mimetype') === 'application/x-photoshop';
- },
- /**
- * Returns the full path to this file
- *
- * @return {string} full path
- */
- getFullPath: function() {
- return OC.joinPaths(this.get('path'), this.get('name'));
- },
- /**
- * Returns the mimetype of the file
- *
- * @return {string} mimetype
- */
- getMimeType: function() {
- return this.get('mimetype');
- },
- /**
- * Reloads missing properties from server and set them in the model.
- * @param properties array of properties to be reloaded
- * @return ajax call object
- */
- reloadProperties: function(properties) {
- if( !this._filesClient ){
- return;
- }
- var self = this;
- var deferred = $.Deferred();
- var targetPath = OC.joinPaths(this.get('path') + '/', this.get('name'));
- this._filesClient.getFileInfo(targetPath, {
- properties: properties
- })
- .then(function(status, data) {
- // the following lines should be extracted to a mapper
- if( properties.indexOf(OC.Files.Client.PROPERTY_GETCONTENTLENGTH) !== -1
- || properties.indexOf(OC.Files.Client.PROPERTY_SIZE) !== -1 ) {
- self.set('size', data.size);
- }
- deferred.resolve(status, data);
- })
- .fail(function(status) {
- OC.Notification.show(t('files', 'Could not load info for file "{file}"', {file: self.get('name')}), {type: 'error'});
- deferred.reject(status);
- });
- return deferred.promise();
- },
- canDownload: function() {
- for (const i in this.attributes.shareAttributes) {
- const attr = this.attributes.shareAttributes[i]
- if (attr.scope === 'permissions' && attr.key === 'download') {
- return attr.value === true
- }
- }
- return true
- },
- });
- if (!OCA.Files) {
- OCA.Files = {};
- }
- OCA.Files.FileInfoModel = FileInfoModel;
- })(OC, OCA);
|