You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
2.6 KiB

/*
* Copyright (c) 2015
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
(function() {
OCA.Activity = OCA.Activity || {};
/**
* @class OCA.Activity.ActivityCollection
* @classdesc
*
* Displays activity information for a given file
*
*/
var ActivityCollection = OC.Backbone.Collection.extend(
/** @lends OCA.Activity.ActivityCollection.prototype */ {
firstKnownId: 0,
lastGivenId: 0,
hasMore: false,
/**
* Id of the file for which to filter activities by
*
* @var int
*/
_objectId: null,
/**
* Type of the object to filter by
*
* @var string
*/
_objectType: null,
model: OCA.Activity.ActivityModel,
/**
* Sets the object id to filter by or null for all.
*
* @param {int} objectId file id or null
*/
setObjectId: function(objectId) {
this._objectId = objectId;
this.firstKnownId = 0;
this.lastGivenId = 0;
this.hasMore = false;
},
/**
* Sets the object type to filter by or null for all.
*
* @param {string} objectType string
*/
setObjectType: function(objectType) {
this._objectType = objectType;
this.firstKnownId = 0;
this.lastGivenId = 0;
this.hasMore = false;
},
/**
*
* @param ocsResponse
* @param response
* @returns {Array}
*/
parse: function(ocsResponse, response) {
this._saveHeaders(response.xhr.getAllResponseHeaders());
if (response.xhr.status === 304) {
// No activities found
return [];
}
return ocsResponse.ocs.data;
},
/**
* Read the X-Activity-First-Known and X-Activity-Last-Given headers
* @param headers
*/
_saveHeaders: function(headers) {
var self = this;
this.hasMore = false;
headers = headers.split("\n");
_.each(headers, function (header) {
var parts = header.split(':');
if (parts[0].toLowerCase() === 'x-activity-first-known') {
self.firstKnownId = parseInt(parts[1].trim(), 10);
} else if (parts[0].toLowerCase() === 'x-activity-last-given') {
self.lastGivenId = parseInt(parts[1].trim(), 10);
} else if (parts[0].toLowerCase() === 'link') {
self.hasMore = true;
}
});
},
url: function() {
var query = {
format: 'json'
};
var url = OC.linkToOCS('apps/activity/api/v2/activity', 2) + 'filter';
if (this.lastGivenId) {
query.since = this.lastGivenId;
}
if (this._objectId && this._objectType) {
query.object_type = this._objectType;
query.object_id = this._objectId;
}
url += '?' + OC.buildQueryString(query);
return url;
}
});
OCA.Activity.ActivityCollection = ActivityCollection;
})();