Skip to content

Commit 9a159d0

Browse files
sioaekoclaude
andcommitted
Add development log
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 86380b4 commit 9a159d0

File tree

1 file changed

+149
-0
lines changed

1 file changed

+149
-0
lines changed

docs/DEVLOG.md

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
# ScriptPlayer+ Development Log
2+
3+
## Project Overview
4+
5+
FunPlayer라는 이름으로 다른 계정에서 만들던 funscript 플레이어를 이어받아 ScriptPlayer+로 리브랜딩하고 기능을 완성한 프로젝트.
6+
7+
- **Stack**: Electron + React + TypeScript + Tailwind CSS + Vite
8+
- **Repo**: https://github.com/sioaeko/scriptplayer-plus
9+
10+
---
11+
12+
## Session Summary (2026-03-08)
13+
14+
### 1. 타임라인/히트맵 토글 버튼 수정
15+
- 히트맵 버튼만 있고 타임라인 토글 버튼이 없는 문제 → 둘 다 존재했으나 아이콘만 있어서 구분 불가
16+
- 각 버튼에 텍스트 라벨 추가 (`TL`, `HM`), 활성화 시 배경색 추가
17+
18+
### 2. Handy 디바이스 연동 수정
19+
- **스크립트 업로드 URL 수정**: `handyfeeling.com/api/handy-rest/v3/uploads` (404) → `scripts01.handyfeeling.com/api/script/v0/temp/upload` (공식 SDK가 사용하는 올바른 엔드포인트)
20+
- 공식 Handy SDK (`@ohdoki/handy-sdk`) 소스코드 분석하여 올바른 엔드포인트 확인
21+
- 모든 Handy API 호출에 `console.log`/`console.error` 추가
22+
- 업로드 상태 UI 표시 (uploading → setting-up → ready / error)
23+
- 드래그 & 드롭으로 파일 열 때도 Handy에 스크립트 업로드하도록 수정
24+
- `uploadScript` + `setHSSP``uploadAndSetup` 메서드로 통합
25+
26+
### 3. Windows/macOS Standalone 빌드
27+
- `electron-builder` 설정으로 Windows portable 빌드 (`dir` target)
28+
- macOS는 Windows에서 빌드 불가 → GitHub Actions workflow 생성 (`.github/workflows/build.yml`)
29+
- macOS: `titleBarStyle: 'hiddenInset'`, traffic light position, `app.on('activate')` 처리
30+
- `signAndEditExecutable: false`로 코드사인 우회 (symlink 권한 문제)
31+
- `rcedit`로 빌드 후 아이콘 수동 적용 (`scripts/set-icon.js` 자동화)
32+
33+
### 4. Handy 자동 연결 & 연결 기록
34+
- localStorage에 연결 기록 저장 (최대 5개)
35+
- 최근 기록에서 원클릭 연결
36+
- 자동 연결 토글 (앱 시작 시 마지막 키로 자동 연결)
37+
- i18n 키 추가 (en/ko/ja/zh)
38+
39+
### 5. 앱 리브랜딩
40+
- `FunPlayer``ScriptPlayer+` 로 전체 이름 변경
41+
- package.json, i18n 파일, 타이틀바, Handy CSV 헤더 등 모두 반영
42+
- `productName: "ScriptPlayerPlus"` (파일명에 `+` 사용 불가)
43+
44+
### 6. 앱 아이콘 생성
45+
- Node.js로 1024x1024 PNG 아이콘 프로그래밍 방식 생성 (S+ 로고, 퍼플 그라데이션)
46+
- `png2icons``.ico` (Windows) / `.icns` (macOS) 변환
47+
- `rcedit`로 exe에 아이콘 삽입 자동화
48+
49+
### 7. EroScripts 브라우저 로그인
50+
- API 키 입력 방식 제거 → 앱 내 BrowserWindow로 EroScripts 직접 로그인
51+
- Electron `session.cookies.get()`으로 `_t` 쿠키 감지 → 세션 캡처
52+
- 모든 EroScripts API 호출을 main process에서 프록시 (쿠키 포함)
53+
- **로그인 유지**: `userData` 폴더에 쿠키+유저네임 저장, 앱 재시작 시 `checkSession`으로 자동 복원
54+
- 설정의 EroScripts 섹션 (API키 입력) 완전 제거
55+
56+
### 8. NAS WebDAV/FTP 기능
57+
- 백엔드 구현은 있었으나 프론트엔드 미구현 상태 발견
58+
- 파일 탭에 NAS 브라우징 UI 구현 (폴더/파일 탐색, WebDAV 프록시 스트리밍)
59+
- 설정에 연결 테스트 버튼 + 프로토콜 안내 추가
60+
- **이후 사용자 요청으로 NAS 기능 전체 제거** (폴더 선택 기능으로 충분)
61+
62+
### 9. 설정 기능 정리
63+
- 미구현/미연동 설정 제거: `autoLoadScript`, `autoSearchEroScripts`, `rememberVolume`, `rememberPosition`, `handyKey` (Sidebar에서 관리)
64+
- 실제 연동 구현:
65+
- `timeOffset` → HSSP play/seek에 오프셋 적용
66+
- `timelineHeight` → VideoPlayer 타임라인 높이 반영
67+
- `timelineWindow` → ScriptTimeline 표시 범위 반영 (`windowSize` prop)
68+
- `speedColors` → 토글 연동
69+
- `strokeRangeMin/Max` → 설정 UI에서 조절
70+
- EroScripts 관련 설정 잔여물 제거 (`eroScriptsApiKey`, `eroScriptsUsername`)
71+
72+
### 10. EroScripts 첨부파일명 수정
73+
- Discourse 업로드 파일명이 해시값 (`hxitVoMKzrmu9U...funscript`)으로 표시되는 문제
74+
- `cooked` HTML에서 `<a href="...">원본파일명.funscript</a>` 링크 텍스트 파싱으로 변경
75+
- URL 인코딩된 파일명도 `safeDecodeURI`로 디코딩
76+
77+
### 11. 스크립트 저장 폴더 설정
78+
- 설정에 "스크립트 저장 폴더" 추가 (i18n 4개 언어)
79+
- EroScripts 다운로드 → 지정 폴더에 원본 파일명으로 저장
80+
- 영상 재생 시 영상 옆에 `.funscript` 없으면 → 스크립트 폴더에서 같은 이름 자동 검색
81+
- 드래그 & 드롭에도 fallback 적용
82+
83+
### 12. 영상/클라우드 링크 표시
84+
- EroScripts 게시물에서 영상 호스팅 링크 자동 감지
85+
- 지원: MEGA, Google Drive, Pixeldrain, Dropbox, MediaFire, GoFile, OneDrive, SpankBang, Pornhub, Erome, RedGIFs 등 20개 서비스
86+
- 스크립트: `FileText` 아이콘 (보라색) → 다운로드
87+
- 영상 링크: `Film` 아이콘 (파란색) → 브라우저에서 열기
88+
89+
### 13. GitHub 리포 & 릴리스
90+
- `sioaeko/scriptplayer-plus` 리포 생성
91+
- README 4개 언어 (EN/KO/JA/ZH) + 스크린샷 8장
92+
- macOS 스크린샷 추가, 다운로드 안내 추가
93+
- `gh` CLI 설치 및 인증 (`workflow` scope 포함)
94+
- v1.0.0 릴리스: Windows + macOS Universal zip
95+
- v0.1.1 릴리스: 위 변경점 반영 + 타이틀바 버전 표시
96+
97+
---
98+
99+
## File Structure
100+
101+
```
102+
FunPlayer/
103+
├── .github/workflows/build.yml # CI build (Win + Mac)
104+
├── electron/
105+
│ ├── main.ts # Electron main process
106+
│ └── preload.ts # Context bridge
107+
├── public/
108+
│ ├── icon.png # 1024x1024 app icon
109+
│ ├── icon.ico # Windows icon
110+
│ └── icon.icns # macOS icon
111+
├── scripts/
112+
│ └── set-icon.js # Post-build icon setter
113+
├── src/
114+
│ ├── App.tsx # Main app component
115+
│ ├── components/
116+
│ │ ├── EroScriptsPanel.tsx # EroScripts search & download
117+
│ │ ├── ScriptHeatmap.tsx # Full-video heatmap canvas
118+
│ │ ├── ScriptTimeline.tsx # Scrolling timeline canvas
119+
│ │ ├── Settings.tsx # Settings modal
120+
│ │ ├── Sidebar.tsx # File browser, device, search tabs
121+
│ │ ├── TitleBar.tsx # Custom title bar
122+
│ │ └── VideoPlayer.tsx # Video player with controls
123+
│ ├── i18n/
124+
│ │ ├── index.ts # i18n provider
125+
│ │ └── locales/ # en, ko, ja, zh
126+
│ ├── services/
127+
│ │ ├── eroscripts.ts # EroScripts API (legacy, mostly replaced by IPC)
128+
│ │ ├── funscript.ts # Funscript parsing
129+
│ │ ├── handy.ts # Handy device service (HSSP)
130+
│ │ └── settings.ts # App settings persistence
131+
│ └── types.ts # TypeScript types + electronAPI
132+
├── docs/
133+
│ ├── DEVLOG.md # This file
134+
│ ├── README_KO.md
135+
│ ├── README_JA.md
136+
│ ├── README_ZH.md
137+
│ └── screenshots/ # App screenshots
138+
├── package.json
139+
├── vite.config.ts
140+
└── README.md
141+
```
142+
143+
## Key Technical Decisions
144+
145+
1. **Handy Script Upload**: 공식 SDK 소스 분석 → `scripts01.handyfeeling.com/api/script/v0/temp/upload` 엔드포인트 사용
146+
2. **EroScripts Auth**: API 키 대신 BrowserWindow 로그인 → 세션 쿠키 캡처 → main process 프록시
147+
3. **아이콘**: `signAndEditExecutable: false`로 빌드 후 `rcedit`로 수동 적용 (symlink 권한 문제 우회)
148+
4. **NAS 제거**: 백엔드는 유지하되 프론트엔드 제거 (폴더 선택으로 충분)
149+
5. **스크립트 폴더**: 영상 옆 → 스크립트 폴더 순서로 fallback 검색

0 commit comments

Comments
 (0)