Several large refactorings

* Refactor location of all data files to include a subdirectory
  for the mod version
* Update the BaseModel class to allow models to load themselves from
  any text file (whether JSON or CG)
* Refactor ModPack & ModVersion to move the laoding functionality in
  one into the other (and use the new stuff in BaseModel)
* Move the parser versions into a new subdirectory which allows for
  future additional parsers
This commit is contained in:
Andrew Miner
2015-01-16 20:26:54 -08:00
parent c14997ef90
commit 5f57622cf3
954 changed files with 284 additions and 1239 deletions
+25 -70
View File
@@ -5,11 +5,11 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
BaseModel = require './base_model'
{Event} = require '../constants'
ModVersionParser = require './mod_version_parser'
{RequiredMods} = require '../constants'
{Url} = require '../constants'
BaseModel = require './base_model'
{Event} = require '../constants'
ModVersionParser = require './mod_version_parser'
{DefaultModVersions} = require '../constants'
{Url} = require '../constants'
########################################################################################################################
@@ -19,11 +19,20 @@ module.exports = class ModPack extends BaseModel
attributes.modVersions ?= []
super attributes, options
@loading = w(true)
@_parser = new ModVersionParser
# Public Methods ###############################################################################
addModVersion: (modVersion)->
if modVersion.modPack isnt this then throw new Error "the mod version must be associated with this mod pack"
return if @modVersions.indexOf(modVersion) isnt -1
@modVersions.push modVersion
@trigger Event.add, modVersion, this
@modVersions.sort (a, b)-> a.compareTo b
@trigger Event.sort, this
@trigger Event.change, this
return this
enableModsForItem: (name)->
for modVersion in @modVersions
continue if modVersion.enabled
@@ -64,13 +73,15 @@ module.exports = class ModPack extends BaseModel
result = {}
item = @findItem slug, includeDisabled:true
if item?
result.modSlug = item.modVersion.slug
result.itemSlug = item.slug
result.itemName = item.name
result.modSlug = item.modVersion.slug
result.modVersion = item.modVersion.version
result.itemSlug = item.slug
result.itemName = item.name
else
result.modSlug = _.slugify RequiredMods[0]
result.itemSlug = slug
result.itemName = @findName slug, includeDisabled:true
result.modSlug = _.slugify DefaultModVersions[0].name
result.modVersion = DefaultModVersions[0].version
result.itemSlug = slug
result.itemName = @findName slug, includeDisabled:true
result.iconUrl = Url.itemIcon result
result.itemUrl = Url.item result
@@ -85,9 +96,6 @@ module.exports = class ModPack extends BaseModel
return false
isLoading: ->
return @loading.inspect().state isnt 'pending'
isValidName: (name, options={})->
options.includeDisabled ?= false
@@ -99,59 +107,6 @@ module.exports = class ModPack extends BaseModel
return false
loadModVersion: (url)->
promise = w.promise (resolve, reject)=>
@trigger Event.load.started, this, url
$.ajax
url: url
dataType: 'text'
success: (data, status, xhr)=>
resolve @onModVersionLoaded(url, data, status, xhr)
error: (xhr, status, error)=>
reject @onModVersionLoadFailed(url, error, status, xhr)
@loading = w.join @loading, promise
loadModVersionData: (data)->
modVersion = @_parser.parse data
@modVersions.push modVersion
@trigger Event.add, modVersion, this
@modVersions.sort (a, b)-> a.compareTo b
@trigger Event.sort, this
modVersion.on Event.change, => @trigger Event.change, this
return modVersion
loadAllModVersions: (urlList)->
for url in urlList
@loadModVersion url
return @loading
# Event Methods ################################################################################
onModVersionLoaded: (url, data, status, xhr)->
try
modVersion = @loadModVersionData data
logger.info "loaded ModVersion from #{url}: #{modVersion}"
@trigger Event.load.succeeded, this, modVersion
@trigger Event.load.finished, this
@trigger Event.change, this
return modVersion
catch e
@onModVersionLoadFailed url, e, status, xhr
onModVersionLoadFailed: (url, error, status, xhr)->
message = if error.stack? then error.stack else error
logger.error "failed to load ModVersion from #{url}: #{message}"
@trigger Event.load.failed, this, error.message
@trigger Event.load.finished, this
return error
# Object Overrides #############################################################################
toString: ->