larruda / ciandt-tt

CI&T Time Tracking (Mobile)
10 stars 13 forks source link

"Thread" (timer) não é parada corretamente / bug do relógio avançando #7

Open stnever opened 10 years ago

stnever commented 10 years ago

Em algumas situações, o relógio avança mais rápido do que deveria. Lendo o código, na linha 152 do tt.js é disparado um timer:

tt.thread = setInterval(function() { app.showTimer(tt.time); tt.time.timestamp = +tt.time.timestamp + 1; }, 1000);

Esse timer só é desligado na função stopTimer(), que por sua vez é chamada apenas no pause() da app.

Uma forma melhor de lidar com isto seria: ao invés de ter um método stopTimer(), simplesmente verificar se já existe um ao chamar o setInterval():

if ( tt.thread ) clearInterval(tt.thread);

tt.thread = setInterval(function() {...})

Outra forma seria o seguinte. Suponho que a necessidade do timer é para lidar com diferenças entre o relógio "do device" e o relógio "oficial do tt". Podemos verificar a diferença entre eles na linha 150:

var offset = response.deviceInfo.dtTimeEvent.getTime() - new Date().getTime()

Depois, armazenamos este offset em uma variável privada. Dessa forma, a função que "desenha" o timer seria apenas:

app.showTimer( new Date().getTime() - offset )

e não haveria mais a necessidade de "somar 1 a cada loop do timer", que é o que está causando a variação de velocidade do timer.

OBS: Recomendo também usar o moment.js para tarefas de formatação e parse de tempo. A função showTimer() poderia ser substituída inteiramente por:

app.el("time").innerHTML = moment(time).format("HH:mm:ss");

stnever commented 10 years ago

btw: não tenho o stack pra rodar o cordova e testar, por isso não posso testar nem submeter um pull request.