@ihabdevteam/core 0.347.0 → 0.348.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +50 -0
- package/dist/components.cjs.js +178 -178
- package/dist/hooks.cjs.js +1 -1
- package/dist/i18n.cjs.js +1 -1
- package/dist/ihabdevteam-core.cjs.js +183 -183
- package/dist/ihabdevteam-core.d.ts +1 -1
- package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.js +13 -1
- package/dist/packages/core/src/components/Training/audioPlaybackRules.d.ts +17 -0
- package/dist/packages/core/src/components/Training/audioPlaybackRules.js +42 -0
- package/dist/packages/core/src/version.d.ts +1 -1
- package/dist/packages/core/src/version.js +1 -1
- package/dist/utils.cjs.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,56 @@ All notable changes to this project will be documented in this file.
|
|
|
7
7
|
> 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
|
|
8
8
|
> 제 이야기를 못 찾는다.
|
|
9
9
|
|
|
10
|
+
## 0.348.0 — 다시 듣기가 같은 소리를 또 받던 것 (311, 급함)
|
|
11
|
+
|
|
12
|
+
**사장님이 폰에서 숙제 단어훈련을 하시다 신고하셨다** — *"소리가 끊기고, 재생바와 사운드
|
|
13
|
+
현황이 맞지 않고, 소스를 가져오지 못했다는 말도 나온다."*
|
|
14
|
+
|
|
15
|
+
말귀가 폰 폭(375px)에서 `HTMLMediaElement` 의 `src`·`load()`·`play()` 를 가로채 부른 자리까지
|
|
16
|
+
적었다. **한 낱말(0.77초)을 한 번 듣는 동안**:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
set src (id 1) measureAudioDuration ← 길이 재려고 만든 <audio>
|
|
20
|
+
set src (id 2) measureAudioDuration ← 같은 URL 을 다른 길에서 또
|
|
21
|
+
set src (id 3) loadAndPlay ← 실제로 틀 <audio>
|
|
22
|
+
set src (id 3) continuePlay ← 다시 듣기에서 **같은 URL 을 또**
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`load()` 는 **새 요청**이다. 로컬에서 1초인 것이 느린 망에서는 그만큼 **침묵**이 되고(끊김),
|
|
26
|
+
그중 **하나만 실패해도** *"소스를 가져오지 못했다"* 가 된다. **되풀이마다 하나씩 더** 붙었다.
|
|
27
|
+
|
|
28
|
+
### 고친 것 — 들고 있는 소리는 다시 안 받는다
|
|
29
|
+
|
|
30
|
+
`loadSound` 가 이미 그 주소를 들고 있고 길이까지 알면(`readyState >= HAVE_METADATA`)
|
|
31
|
+
`currentTime = 0` 만 하고 돌아온다. 새 규칙 `needsReload`(`audioPlaybackRules`):
|
|
32
|
+
|
|
33
|
+
- **주소는 풀어서 견준다** — 부르는 쪽은 상대 주소를 줄 수 있고 `currentSrc` 는 늘 절대
|
|
34
|
+
주소라, 글자로 견주면 **같은 파일을 늘 다르다고 본다**(그러면 아무것도 안 아낀다).
|
|
35
|
+
- **서명 주소의 토큰이 다르면 받는다** — 그때는 참으로 다른 주소다(만료된 것으로 틀면 안 된다).
|
|
36
|
+
- **아직 안 실렸으면 받는다** — 틀 것이 없다.
|
|
37
|
+
|
|
38
|
+
네 가지로 깨 보고 넷 다 붉어졌다.
|
|
39
|
+
|
|
40
|
+
### 아직 안 한 둘 — 까닭을 적어 둔다
|
|
41
|
+
|
|
42
|
+
- **길이를 틀 그 요소에서 재기.** `waitForCanPlay` 는 `canplay`·`error`·시간초과를 **모두
|
|
43
|
+
resolve** 한다(거절하지 않는다). 지금 길은 `measureAudioDuration(..., {rejectOnError: true})`
|
|
44
|
+
의 **거절**로 오류를 바깥 `catch` 에 넘기는데, 그것으로 바꾸면 **오류가 조용히 삼켜진다.**
|
|
45
|
+
같은 파일을 두 번 덜 받는 값이 크지만, 오류 전달을 먼저 지어야 한다.
|
|
46
|
+
- **받는 동안 막대 안 움직이기.** 뜸 구간은 `Date.now()` 로 밀리는데, 그 구간의 생애
|
|
47
|
+
(`sequencer.positionRef`)를 건드려야 한다. 급한 것을 먼저 냈다.
|
|
48
|
+
|
|
49
|
+
### 세우며 겪은 것 — 흉내가 빈약해서 난 거짓 빨강 95개
|
|
50
|
+
|
|
51
|
+
처음에 `needsReload` 를 `audioWaits.ts` 에 넣었더니 **시험 95개가 빨개졌다.** 그 모듈은
|
|
52
|
+
**열두 시험이 공장 꼴로 흉내** 낸다 — 공장은 자기가 쓰는 이름만 내보내므로 이름을 하나
|
|
53
|
+
더하면 그 열둘에서 `undefined` 가 되어 던진다. **코드는 맞았고 흉내가 빈약했다.**
|
|
54
|
+
|
|
55
|
+
가리는 데 품이 들었다: `needsReload` 를 **늘 참**으로 바꿔도(= 고치기 전과 같은 길) 그대로
|
|
56
|
+
빨개서 한참 딴 데를 봤다. 흉내가 **들여오는 때**에 깨지니 함수 속을 어떻게 바꿔도 소용이
|
|
57
|
+
없었던 것이다. 순수 규칙을 **흉내 내는 시험이 0 곳인** `audioPlaybackRules.ts` 로 옮겼다 —
|
|
58
|
+
그러면 다음에 규칙을 더해도 그 열둘이 안 깨진다.
|
|
59
|
+
|
|
10
60
|
## 0.347.0 — `autoFocus` 자식이 있는 창을 닫으면 초점을 잃던 것 (310)
|
|
11
61
|
|
|
12
62
|
창은 열 때 *"지금 초점이 어디였나"* 를 적어 두고 닫을 때 그리로 돌려준다. 그 적는 줄이
|