class Pettanr.Cache\r
\r
constructor: (options) ->\r
+ @operators = options.operators\r
@data = {}\r
+ @holds = {}\r
_.extend(this, Backbone.Events)\r
\r
# return cached items\r
cached_item # merge?\r
else\r
@data[item.cache_key()] = item\r
- @refresh(return_items)\r
+ # @refresh(return_items)\r
return_items\r
\r
restore: (key) ->\r
#if item\r
# @refresh(item)\r
\r
- retrieve: (model, id, force) ->\r
- empty_item = new model({id: id})\r
- if force\r
- # query\r
- empty_item.fetch().done =>\r
- @trigger('retrieve', empty_item)\r
- else if id\r
- # existence item\r
- item = @store(empty_item)\r
- if item\r
- @trigger('retrieve', item)\r
- else\r
- empty_item.fetch().done =>\r
- @store(empty_item)\r
- @trigger('retrieve', empty_item)\r
+ is_hold: (item) ->\r
+ if @holds[item.cache_key()]\r
+ true\r
else\r
- # new item\r
- @trigger('retrieve', empty_item)\r
+ false\r
\r
- edit: (model, id) ->\r
- @listenTo(this, 'retrieve', @edit_retrieve)\r
- @retrieve(model, id)\r
+ hold: (item) ->\r
+ return @holds[item.cache_key()] if @holds[item.cache_key()]\r
+ @holds[item.cache_key()] = item.clone()\r
\r
- edit_retrieve: (item) ->\r
- editting_item = item.clone()\r
- # get latest item\r
- editting_item.fetch().done =>\r
- @trigger('edit', editting_item)\r
+ fix: (item) ->\r
+ delete @holds[item.cache_key()]\r
+ @restore(item).fetch()\r
+ \r
+ release: (item) ->\r
+ delete @holds[item.cache_key()]\r
+ \r
+ free: (item) ->\r
+ delete @data[item.cache_key()]\r
\r
refresh: (item) ->\r
- if item.expire_time\r
- if Date.now() >= return_items.expire_time\r
- @sync(item)\r
- item\r
+ @restore(item.cache_key()).fetch()\r
+ #if item.expire_time\r
+ # if Date.now() >= return_items.expire_time\r
+ # @sync(item)\r
+ #item\r
\r
sync: (item) ->\r
- item.fetch().done =>\r
- item.expire_time.setTime(Date.now() + 10 * 60 * 1000)\r
+ item.fetch({\r
+ success: (model, response, opt) =>\r
+ item.expire_time.setTime(Date.now() + 10 * 60 * 1000)\r
+ error: (model, response, opt) =>\r
+ @trigger('fail', response, opt)\r
+ })\r
\r
class Pettanr.Cache.Retriever\r
\r
retrieve: (force) ->\r
empty_item = new @model({id: @id})\r
if force\r
- # query\r
- empty_item.fetch().done =>\r
- @trigger('retrieve', empty_item)\r
+ # query (ex: folders/3?watch)\r
+ @retrieve_force(empty_item)\r
else if @id\r
# existence item\r
item = Pettanr.cache.restore(empty_item)\r
if item\r
@trigger('retrieve', item)\r
else\r
- empty_item.fetch().done =>\r
- Pettanr.cache.store(empty_item)\r
- @trigger('retrieve', empty_item)\r
+ empty_item.fetch({\r
+ success: (model, response, opt) =>\r
+ Pettanr.cache.store(empty_item)\r
+ @trigger('retrieve', empty_item)\r
+ error: (model, response, opt) =>\r
+ @trigger('fail', response, opt)\r
+ })\r
else\r
# new item\r
@trigger('retrieve', empty_item)\r
\r
+ retrieve_force: (item) ->\r
+ item.fetch({\r
+ success: (model, response, opt) =>\r
+ @trigger('retrieve', item)\r
+ error: (model, response, opt) =>\r
+ @trigger('fail', response, opt)\r
+ })\r
+ \r
+ edit: (options = {}) ->\r
+ empty_item = new @model({id: @id})\r
+ item = empty_item.hold()\r
+ item.fetch({\r
+ success: (model, response, opt) =>\r
+ @trigger('retrieve', item)\r
+ error: (model, response, opt) =>\r
+ @trigger('fail', response, opt)\r
+ })\r
+ \r