Created
January 11, 2018 15:55
-
-
Save ECorreia45/c1b74b204fba9c31f3e3e9495b54d4fb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.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