style: usun em-dashe z calego repo (zamiana na zwykly mylnik)
All checks were successful
deploy / deploy (push) Successful in 1m3s
All checks were successful
deploy / deploy (push) Successful in 1m3s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "vsd-api",
|
||||
"version": "6.5.6",
|
||||
"description": "Video & Sound Downloader Pro — API (NestJS)",
|
||||
"description": "Video & Sound Downloader Pro - API (NestJS)",
|
||||
"license": "UNLICENSED",
|
||||
"scripts": {
|
||||
"build": "nest build",
|
||||
|
||||
@@ -30,7 +30,7 @@ export class JobsController {
|
||||
|
||||
@Sse(':id/events')
|
||||
events(@Param('id') id: string): Observable<MessageEvent> {
|
||||
// Bez pola `type` — inaczej Nest emituje nazwane zdarzenia (event: <kind>),
|
||||
// Bez pola `type` - inaczej Nest emituje nazwane zdarzenia (event: <kind>),
|
||||
// a przeglądarkowy EventSource.onmessage reaguje tylko na domyślne „message”.
|
||||
return this.jobs.events(id).pipe(
|
||||
map((ev) => ({ data: JSON.stringify(ev) }) as MessageEvent),
|
||||
|
||||
@@ -129,7 +129,7 @@ export class JobsService {
|
||||
if (entries.length === 1) {
|
||||
const p = path.join(job.workDir, entries[0]);
|
||||
const st = await fs.stat(p);
|
||||
this.emit(job, { kind: 'log', line: `OK: gotowy plik — ${entries[0]} (${fmtSize(st.size)})` });
|
||||
this.emit(job, { kind: 'log', line: `OK: gotowy plik - ${entries[0]} (${fmtSize(st.size)})` });
|
||||
return { path: p, name: entries[0], size: st.size };
|
||||
}
|
||||
|
||||
@@ -147,7 +147,7 @@ export class JobsService {
|
||||
void archive.finalize();
|
||||
});
|
||||
const st = await fs.stat(zipPath);
|
||||
this.emit(job, { kind: 'log', line: `OK: gotowe archiwum — ${zipName} (${fmtSize(st.size)})` });
|
||||
this.emit(job, { kind: 'log', line: `OK: gotowe archiwum - ${zipName} (${fmtSize(st.size)})` });
|
||||
return { path: zipPath, name: zipName, size: st.size };
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ server {
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
# API + SSE (strumień logów) — bez buforowania, długie timeouty na pobieranie
|
||||
# API + SSE (strumień logów) - bez buforowania, długie timeouty na pobieranie
|
||||
location /api/ {
|
||||
proxy_pass http://api:3000;
|
||||
proxy_http_version 1.1;
|
||||
|
||||
@@ -151,7 +151,7 @@ export default function App() {
|
||||
}
|
||||
setBusy(true);
|
||||
setProgress(0);
|
||||
setLog([`Start: ${def.title} — ${url.trim()}`]);
|
||||
setLog([`Start: ${def.title} - ${url.trim()}`]);
|
||||
try {
|
||||
const res = await fetch('/api/jobs', {
|
||||
method: 'POST',
|
||||
@@ -303,7 +303,7 @@ export default function App() {
|
||||
</div>
|
||||
</div>
|
||||
<p className="hint">
|
||||
Napisy dotyczą tylko faktycznie dostępnych napisów — nie obejmują
|
||||
Napisy dotyczą tylko faktycznie dostępnych napisów - nie obejmują
|
||||
automatycznie generowanych napisów YouTube. Gotowy plik pobiera się przez
|
||||
przeglądarkę (folder „Pobrane”).
|
||||
</p>
|
||||
@@ -358,7 +358,7 @@ export default function App() {
|
||||
<button
|
||||
className="ghost"
|
||||
onClick={() =>
|
||||
alert('Video & Sound Downloader Pro — webowa wersja oparta o yt-dlp + FFmpeg.')
|
||||
alert('Video & Sound Downloader Pro - webowa wersja oparta o yt-dlp + FFmpeg.')
|
||||
}
|
||||
>
|
||||
O mnie
|
||||
|
||||
Reference in New Issue
Block a user