mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-08-05 03:52:14 +00:00
a super-hack to trick derby into showing notifications. bug fix on
refresh disappearing habits `model.get(path, {getRef:false})`
This commit is contained in:
parent
dfc63695c7
commit
6e2035eef6
2 changed files with 17 additions and 5 deletions
|
|
@ -83,7 +83,7 @@ module.exports.BatchUpdate = BatchUpdate = (model) ->
|
||||||
# Additionally, for some reason after getting the user object, changing properies manually (userObj.stats.hp = 50)
|
# Additionally, for some reason after getting the user object, changing properies manually (userObj.stats.hp = 50)
|
||||||
# seems to actually run user.set('stats.hp',50) which we don't want to do - so we deepClone here
|
# seems to actually run user.set('stats.hp',50) which we don't want to do - so we deepClone here
|
||||||
#_.each Object.keys(userSchema), (key) -> obj[key] = lodash.cloneDeep user.get(key)
|
#_.each Object.keys(userSchema), (key) -> obj[key] = lodash.cloneDeep user.get(key)
|
||||||
obj = user.get()
|
obj = model.get('users.'+user.get('id'), {getRef:false})
|
||||||
|
|
||||||
###
|
###
|
||||||
Handles updating the user model. If this is an en-mass operation (eg, server cron), changes are queued
|
Handles updating the user model. If this is an en-mass operation (eg, server cron), changes are queued
|
||||||
|
|
@ -98,9 +98,10 @@ module.exports.BatchUpdate = BatchUpdate = (model) ->
|
||||||
Hack to get around dom bindings being lost if parent objects are replaced whole-sale
|
Hack to get around dom bindings being lost if parent objects are replaced whole-sale
|
||||||
eg, user.set('stats', {hp:50, exp:10...}) will break dom bindings, but user.set('stats.hp',50) is ok
|
eg, user.set('stats', {hp:50, exp:10...}) will break dom bindings, but user.set('stats.hp',50) is ok
|
||||||
###
|
###
|
||||||
setStats: ->
|
setStats: (stats) ->
|
||||||
|
stats ?= obj.stats
|
||||||
that = @
|
that = @
|
||||||
_.each Object.keys(obj.stats), (key) -> that.set "stats.#{key}", obj.stats[key]
|
_.each Object.keys(stats), (key) -> that.set "stats.#{key}", stats[key]
|
||||||
|
|
||||||
# queue: (path, val) ->
|
# queue: (path, val) ->
|
||||||
# # Special function for setting object properties by string dot-notation. See http://stackoverflow.com/a/6394168/362790
|
# # Special function for setting object properties by string dot-notation. See http://stackoverflow.com/a/6394168/362790
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,7 @@ score = (taskId, direction, times, batch, cron) ->
|
||||||
|
|
||||||
{money, hp, exp, lvl} = obj.stats
|
{money, hp, exp, lvl} = obj.stats
|
||||||
|
|
||||||
|
taskPath = "tasks.#{taskId}"
|
||||||
taskObj = obj.tasks[taskId]
|
taskObj = obj.tasks[taskId]
|
||||||
{type, value} = taskObj
|
{type, value} = taskObj
|
||||||
|
|
||||||
|
|
@ -141,7 +142,10 @@ score = (taskId, direction, times, batch, cron) ->
|
||||||
historyEntry = { date: +new Date, value: value }
|
historyEntry = { date: +new Date, value: value }
|
||||||
if (delta > 0) then addPoints() else subtractPoints()
|
if (delta > 0) then addPoints() else subtractPoints()
|
||||||
taskObj.history ?= []
|
taskObj.history ?= []
|
||||||
taskObj.history.push historyEntry if taskObj.value != value
|
if taskObj.value != value
|
||||||
|
taskObj.history.push historyEntry
|
||||||
|
batch.set "#{taskPath}.history", taskObj.history
|
||||||
|
|
||||||
|
|
||||||
when 'daily'
|
when 'daily'
|
||||||
calculateDelta()
|
calculateDelta()
|
||||||
|
|
@ -150,6 +154,8 @@ score = (taskId, direction, times, batch, cron) ->
|
||||||
taskObj.history ?= []
|
taskObj.history ?= []
|
||||||
taskObj.history.push { date: +new Date, value: value }
|
taskObj.history.push { date: +new Date, value: value }
|
||||||
taskObj.completed = false
|
taskObj.completed = false
|
||||||
|
batch.set "#{taskPath}.history", taskObj.history
|
||||||
|
batchSet "#{taskObj}.completed", false
|
||||||
else
|
else
|
||||||
addPoints() # obviously for delta>0, but also a trick to undo accidental checkboxes
|
addPoints() # obviously for delta>0, but also a trick to undo accidental checkboxes
|
||||||
|
|
||||||
|
|
@ -170,9 +176,14 @@ score = (taskId, direction, times, batch, cron) ->
|
||||||
money = 0
|
money = 0
|
||||||
|
|
||||||
taskObj.value = value
|
taskObj.value = value
|
||||||
batch.set "tasks.#{taskId}", taskObj
|
batch.set "#{taskPath}.value", taskObj.value
|
||||||
|
origStats = _.clone obj.stats
|
||||||
updateStats {hp: hp, exp: exp, money: money}, batch
|
updateStats {hp: hp, exp: exp, money: money}, batch
|
||||||
if commit
|
if commit
|
||||||
|
# newStats / origStats is a glorious hack to trick Derby into seeing the change in model.on(*)
|
||||||
|
newStats = _.clone batch.obj().stats
|
||||||
|
_.each Object.keys(origStats), (key) -> obj.stats[key] = origStats[key]
|
||||||
|
batch.setStats(newStats)
|
||||||
batch.setStats()
|
batch.setStats()
|
||||||
batch.commit()
|
batch.commit()
|
||||||
return delta
|
return delta
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue