Skip to content

Instantly share code, notes, and snippets.

@ECorreia45
Created January 11, 2018 15:55
Show Gist options
  • Save ECorreia45/c1b74b204fba9c31f3e3e9495b54d4fb to your computer and use it in GitHub Desktop.
Save ECorreia45/c1b74b204fba9c31f3e3e9495b54d4fb to your computer and use it in GitHub Desktop.
.factory('FolderObject', ['$rootScope', '$interval', '$log', 'ProjectFolderService', 'WebSocketService', function($rootScope, $interval, $log, ProjectFolderService, WebSocketService) {
function FolderObject(projectId, item, basic) {
var self = this;
var pendingCompleteCheck = 0;
self.projectId = projectId;
self.loadParents = function(parentFolder) {
if (!_.isNil(parentFolder)) {
ProjectFolderService.get({projectId: projectId, folderId: parentFolder}).$promise
.then(function(response) {
var parent = new FolderObject(projectId, response.result, true);
if (!parent.is_root_folder) {
self.parents.splice(0, 0, parent);
self.loadParents(parent.parentFolder);
}
});
}
};
self.populate = function(item) {
if (item) {
console.log('---populate');
console.log(item);
self.id = item.id;
self.name = item.name;
self.parentFolder = item.parentFolder;
self.mediaCount = item.mediaCount;
self.subFolderCount = item.subFolderCount;
self.pendingMediaCount = item.pendingMediaCount;
self.isStockAssetFolder = (item.isSystemFolder && item.name === 'Stock Assets');
if ( ! angular.isDefined( self.pendingMediaCount ) ) {
self.pendingMediaCount = 0;
}
self.folders = _.map(item.folders, function(folder) {
return new FolderObject(projectId, folder, true);
});
if (!_.isNil($rootScope.user) && !_.isNil(item.creator)) {
self.isOwner = (item.creator.id == $rootScope.user.id);
}
self.itemCount = self.mediaCount;
if (!_.isNil(self.subFolderCount)) {
self.itemCount += self.subFolderCount;
} else if (!_.isEmpty(self.folders)) {
self.itemCount += self.folders.length;
}
self.sortFolders();
self.parents = [];
self.is_root_folder = _.isNil(self.parentFolder);
if (!basic) {
self.loadParents(self.parentFolder);
}
self.is_empty = !(self.folders.length > 0 || self.mediaCount > 0 || self.subFolderCount > 0);
self.is_folder = true;
}
};
self.sortFolders = function() {
self.folders = _.sortBy(self.folders, function(folder) { return folder.name.toLowerCase(); });
};
self.createFolder = function(name) {
return ProjectFolderService.save(
{
projectId: self.projectId
},
{
name: name,
parentFolder: self.id
}
).$promise.then(function(response) {
var folder = new FolderObject(projectId, response.result, true);
folder.menuTemplateUrl = 'folderMenuTemplate_.html';
folder.showMenu = true;
self.folders.push(folder);
self.sortFolders();
return folder;
});
};
self.renameFolder = function(folder, name) {
return ProjectFolderService.update(
{
projectId: self.projectId,
folderId: folder.id
},
{
name: name
}
).$promise.then(function(response) {
folder.name = response.result.name;
self.sortFolders();
});
};
self.deleteFolder = function(folder) {
return ProjectFolderService.delete(
{
projectId: projectId,
folderId: folder.id
}
).$promise.then(function(response) {
_.remove(self.folders, function(f) {
return f.id == folder.id;
});
});
};
self.hasPendingMedia = function () {
return _.sum(_.map(self.folders, function(f) { return f.pendingMediaCount; })) > 0;
};
self.checkComplete = function() {
if (self.hasPendingMedia()) {
ProjectFolderService.get({projectId: projectId, folderId: self.id}).$promise
.then(function(response) {
self.populate(response.result);
if (!self.hasPendingMedia()) {
self.cancelCheckComplete();
}
}, function(error) {
$log.error("Error checking complete for folder %o", self);
self.cancelCheckComplete();
});
} else {
self.cancelCheckComplete();
}
};
self.startCheckComplete = function() {
if (self.hasPendingMedia() && _.isNil(self.checkCompleteInterval) && ! WebSocketService.isLoggedIn() ) {
self.checkCompleteInterval =
$interval(function() { self.checkComplete(); }, 5000);
}
};
self.cancelCheckComplete = function() {
if (!_.isNil(self.checkCompleteInterval)) {
$interval.cancel(self.checkCompleteInterval);
self.checkCompleteInterval = null;
}
};
self.update = function( webSocketData ) {
if ( webSocketData.media.processingState == "COMPLETE" ) {
self.pendingMediaCount--;
}
if ( self.pendingMediaCount == 0 ) {
ProjectFolderService.get({projectId: projectId, folderId: self.id}).$promise.then(function(response) {
self.populate(response.result);
}, function(error) {
$log.error("Error checking complete for folder %o", self);
});
}
}
self.populate(item);
return self;
}
return FolderObject;
}])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment