138 lines
4.1 KiB
CoffeeScript
138 lines
4.1 KiB
CoffeeScript
xmlrpc = require 'xmlrpc'
|
|
httpproxyagent = require 'https-proxy-agent'
|
|
_ = require 'underscore'
|
|
|
|
class Shotgun
|
|
|
|
ENTITIES:
|
|
asset: "Asset"
|
|
batch: "CustomEntity03"
|
|
jd_opus: "CustomEntity02"
|
|
jd_tv: "CustomEntity05"
|
|
map: "CustomEntity28"
|
|
task: "Task"
|
|
version: "Version"
|
|
search_tags: "CustomEntity09"
|
|
|
|
FIELDS:
|
|
assets_jd_opus: "sg_map_.CustomEntity28.custom_entity02_sg_maps_custom_entity02s"
|
|
asset_latest_version: "sg_latest_asset"
|
|
asset_maps: "sg_map_"
|
|
asset_type: "sg_asset_type"
|
|
batch_end_date: "sg_end_date"
|
|
batch_number: "sg_batch_number"
|
|
batch_start_date: "sg_start_date"
|
|
date_created: "created_at"
|
|
date_updated: "updated_at"
|
|
description: "description"
|
|
jd_tv_jd_opus: "sg_jdopus"
|
|
map_assets: "sg_assets_2"
|
|
map_batch: "sg_batch00"
|
|
map_game_mode: "sg_game_mode"
|
|
map_jdm_attributes: "sg_tags_jdm"
|
|
map_jd_opus: "custom_entity02_sg_maps_custom_entity02s"
|
|
map_list: "sg_maps"
|
|
map_production_studio: "sg_production_studio"
|
|
map_status: "sg_map_status"
|
|
map_type: "sg_map_type"
|
|
name: "code"
|
|
nas_folder: "sg_nas_folder"
|
|
task: "sg_task"
|
|
task_template: "task_template"
|
|
thumbnail: "image"
|
|
version_link: "entity"
|
|
version_uploaded_movie: "sg_uploaded_movie"
|
|
version_status: "sg_status_list"
|
|
search_labels: "sg_search_labels"
|
|
search_tag_loc_id: "sg_loc_id"
|
|
search_labels_maps: "custom_entity28_sg_search_labels_custom_entity28s"
|
|
|
|
constructor: ( ) ->
|
|
proxyagent = new httpproxyagent 'http://pun-net-bcproxy.ubisoft.org:3128'
|
|
|
|
@client = xmlrpc.createSecureClient {
|
|
url: 'http://justdance.shotgunstudio.com/api3'
|
|
agent: proxyagent
|
|
}
|
|
|
|
getAuthObject: ( ) ->
|
|
{
|
|
script_name: 'shotgate'
|
|
script_key: 'ce5ad5fb39b240cedc4d2eabafbb6869077fe1dcb562045698e9654b6c1f2752'
|
|
}
|
|
|
|
getDefaultFilter: ( ) ->
|
|
[{
|
|
values: [
|
|
{
|
|
type: 'Project'
|
|
id: 67
|
|
}
|
|
]
|
|
path: 'project'
|
|
relation: 'is'
|
|
}]
|
|
|
|
getDefaultParamsObject: ( ) ->
|
|
{
|
|
return_paging_info: true
|
|
return_fields: ['id', 'content', 'code', 'sg_nas_folder']
|
|
return_only: 'active'
|
|
api_return_image_urls: true
|
|
paging:
|
|
current_page: 1
|
|
entities_per_page: 500
|
|
filters: []
|
|
type: ''
|
|
}
|
|
|
|
generateFilterObject: ( filters ) ->
|
|
defaults = {
|
|
conditions:[]
|
|
logical_operator: 'and'
|
|
}
|
|
|
|
defaults.conditions = _.union filters, @getDefaultFilter()
|
|
|
|
defaults
|
|
|
|
composeQuery: ( entity, filters = [], return_fields = [] ) ->
|
|
result = []
|
|
|
|
params = @getDefaultParamsObject()
|
|
params.filters = @generateFilterObject(filters)
|
|
|
|
auth = @getAuthObject()
|
|
|
|
params.type = entity
|
|
|
|
params.return_fields = _.union params.return_fields, return_fields
|
|
|
|
|
|
result.push auth, params
|
|
|
|
result
|
|
|
|
getProjects: ( ) ->
|
|
new Promise ( resolve, reject ) =>
|
|
params = @composeQuery(@ENTITIES.jd_opus, [], [@FIELDS.name, @FIELDS.map_assets])
|
|
@client.methodCall 'read', params, ( err, value, body ) ->
|
|
if err?
|
|
reject(err)
|
|
else
|
|
resolve(value.results.entities)
|
|
|
|
getMaps: ( projectCode ) ->
|
|
new Promise ( resolve, reject ) =>
|
|
params = @composeQuery(@ENTITIES.map, [{
|
|
values: [projectCode]
|
|
path: @FIELDS.map_jd_opus
|
|
relation: 'name_is'
|
|
}], [@FIELDS.map_assets])
|
|
@client.methodCall 'read', params, ( err, value, body ) ->
|
|
if err?
|
|
reject(err)
|
|
else
|
|
resolve(value.results.entities)
|
|
|
|
module.exports = Shotgun
|