(data: SaveLocalResultData)
| 308 | }; |
| 309 | |
| 310 | export function saveLocalResult(data: SaveLocalResultData): void { |
| 311 | const snapshot = getSnapshot(); |
| 312 | if (!snapshot) return; |
| 313 | |
| 314 | if (data.result !== undefined) { |
| 315 | void insertLocalResult({ result: data.result }); |
| 316 | setLastResult(data.result); |
| 317 | if (snapshot.testActivity !== undefined) { |
| 318 | snapshot.testActivity.increment(new Date(data.result.timestamp)); |
| 319 | } |
| 320 | snapshot.typingStats ??= { |
| 321 | timeTyping: 0, |
| 322 | startedTests: 0, |
| 323 | completedTests: 0, |
| 324 | }; |
| 325 | |
| 326 | const time = |
| 327 | data.result.testDuration + |
| 328 | data.result.incompleteTestSeconds - |
| 329 | data.result.afkDuration; |
| 330 | |
| 331 | snapshot.typingStats.timeTyping += time; |
| 332 | snapshot.typingStats.startedTests += data.result.restartCount + 1; |
| 333 | snapshot.typingStats.completedTests += 1; |
| 334 | |
| 335 | if (data.isPb) { |
| 336 | saveLocalPB( |
| 337 | data.result.mode, |
| 338 | data.result.mode2, |
| 339 | data.result.punctuation, |
| 340 | data.result.numbers, |
| 341 | data.result.language, |
| 342 | data.result.difficulty, |
| 343 | data.result.lazyMode, |
| 344 | data.result.wpm, |
| 345 | data.result.acc, |
| 346 | data.result.rawWpm, |
| 347 | data.result.consistency, |
| 348 | ); |
| 349 | } |
| 350 | } |
| 351 | |
| 352 | if (data.xp !== undefined) { |
| 353 | snapshot.xp ??= 0; |
| 354 | snapshot.xp += data.xp; |
| 355 | } |
| 356 | |
| 357 | if (data.streak !== undefined) { |
| 358 | snapshot.streak = data.streak; |
| 359 | |
| 360 | if (snapshot.streak > snapshot.maxStreak) { |
| 361 | snapshot.maxStreak = snapshot.streak; |
| 362 | } |
| 363 | } |
| 364 | |
| 365 | setSnapshot(snapshot, { |
| 366 | dispatchEvent: false, |
| 367 | }); |
nothing calls this directly
no test coverage detected