move task-corruption cleanup to the browser. @yangit see if this fixes

the freeze on your end?
This commit is contained in:
Tyler Renelle 2013-04-18 16:52:47 -04:00
parent 251890f7b6
commit 3772672e95

View file

@ -27,6 +27,7 @@ _ = require('underscore')
cleanupCorruptTasks = (model) -> cleanupCorruptTasks = (model) ->
user = model.at('_user') user = model.at('_user')
tasks = user.get('tasks') tasks = user.get('tasks')
wasCorrupt = false
## Remove corrupted tasks ## Remove corrupted tasks
_.each tasks, (task, key) -> _.each tasks, (task, key) ->
@ -34,15 +35,13 @@ cleanupCorruptTasks = (model) ->
user.del("tasks.#{key}") user.del("tasks.#{key}")
delete tasks[key] delete tasks[key]
batch = null
## Task List Cleanup ## Task List Cleanup
_.each ['habit','daily','todo','reward'], (type) -> _.each ['habit','daily','todo','reward'], (type) ->
# 1. remove duplicates # 1. remove duplicates
# 2. restore missing zombie tasks back into list # 2. restore missing zombie tasks back into list
idList = user.get("#{type}Ids") idList = user.get("#{type}Ids")
taskIds = _.pluck( _.where(tasks, {type:type}), 'id') taskIds = _.pluck( _.where(tasks, {type:type}), 'id' )
union = _.union idList, taskIds union = _.union idList, taskIds
# 2. remove empty (grey) tasks # 2. remove empty (grey) tasks
@ -50,13 +49,11 @@ cleanupCorruptTasks = (model) ->
# There were indeed issues found, set the new list # There were indeed issues found, set the new list
if !_.isEqual(idList, preened) if !_.isEqual(idList, preened)
unless batch? user.set("#{type}Ids", preened)
batch = new require('./character').BatchUpdate(model) wasCorrupt = true
batch.startTransaction() "#{type}s were corrupt."
batch.set("#{type}Ids", preened)
console.error user.get('id') + "'s #{type}s were corrupt."
batch.commit() if batch? require('./browser').resetDom(model) if wasCorrupt
get '/', (page, model, params, next) -> get '/', (page, model, params, next) ->
return page.redirect '/' if page.params?.query?.play? return page.redirect '/' if page.params?.query?.play?
@ -69,8 +66,6 @@ get '/', (page, model, params, next) ->
require('./party').partySubscribe page, model, params, next, -> require('./party').partySubscribe page, model, params, next, ->
model.setNull '_user.apiToken', derby.uuid() model.setNull '_user.apiToken', derby.uuid()
cleanupCorruptTasks(model) # https://github.com/lefnire/habitrpg/issues/634
require('./items').server(model) require('./items').server(model)
#refLists #refLists
@ -83,6 +78,7 @@ get '/', (page, model, params, next) ->
ready (model) -> ready (model) ->
user = model.at('_user') user = model.at('_user')
cleanupCorruptTasks(model) # https://github.com/lefnire/habitrpg/issues/634
#set cron immediately #set cron immediately
lastCron = user.get('lastCron') lastCron = user.get('lastCron')