| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- class app.models.Doc extends app.Model
- # Attributes: name, slug, type, release, index_path, db_path, db_size, mtime, links
- constructor: ->
- super
- @reset @
- @text = @toEntry().text
- reset: (data) ->
- @resetEntries data.entries
- @resetTypes data.types
- return
- resetEntries: (entries) ->
- @entries = new app.collections.Entries(entries)
- @entries.each (entry) => entry.doc = @
- return
- resetTypes: (types) ->
- @types = new app.collections.Types(types)
- @types.each (type) => type.doc = @
- return
- fullPath: (path = '') ->
- path = "/#{path}" unless path[0] is '/'
- "/#{@slug}#{path}"
- fileUrl: (path) ->
- "#{app.config.docs_host}#{@fullPath(path)}?#{@mtime}"
- dbUrl: ->
- "#{app.config.docs_host}/#{@db_path}?#{@mtime}"
- indexUrl: ->
- "#{app.indexHost()}/#{@index_path}?#{@mtime}"
- toEntry: ->
- @entry ||= new app.models.Entry
- doc: @
- name: @name
- path: 'index'
- findEntryByPathAndHash: (path, hash) ->
- if hash and entry = @entries.findBy 'path', "#{path}##{hash}"
- entry
- else if path is 'index'
- @toEntry()
- else
- @entries.findBy 'path', path
- load: (onSuccess, onError, options = {}) ->
- return if options.readCache and @_loadFromCache(onSuccess)
- callback = (data) =>
- @reset data
- onSuccess()
- @_setCache data if options.writeCache
- return
- ajax
- url: @indexUrl()
- success: callback
- error: onError
- clearCache: ->
- app.store.del @slug
- return
- _loadFromCache: (onSuccess) ->
- return unless data = @_getCache()
- callback = =>
- @reset data
- onSuccess()
- return
- setTimeout callback, 0
- true
- _getCache: ->
- return unless data = app.store.get @slug
- if data[0] is @mtime
- return data[1]
- else
- @clearCache()
- return
- _setCache: (data) ->
- app.store.set @slug, [@mtime, data]
- return
- install: (onSuccess, onError) ->
- return if @installing
- @installing = true
- error = =>
- @installing = null
- onError()
- return
- success = (data) =>
- @installing = null
- app.db.store @, data, onSuccess, error
- return
- ajax
- url: @dbUrl()
- success: success
- error: error
- timeout: 3600
- return
- uninstall: (onSuccess, onError) ->
- return if @installing
- @installing = true
- success = =>
- @installing = null
- onSuccess()
- return
- error = =>
- @installing = null
- onError()
- return
- app.db.unstore @, success, error
- return
- getInstallStatus: (callback) ->
- app.db.version @, (value) ->
- callback installed: !!value, mtime: value
- return
- isOutdated: (status) ->
- status and status.installed and @mtime isnt status.mtime
|