fix: `The stream is already locked` in monitor mode

splashcat-exporter-v2
spacemeowx2 2024-02-29 18:19:52 +08:00
parent 52f42bc42f
commit a75b200d7d
1 changed files with 23 additions and 18 deletions

View File

@ -275,11 +275,13 @@ export class App {
); );
} }
}; };
const endBar = () => { const end = () => bar?.end();
bar?.end();
};
return { redraw, endBar }; return {
redraw,
end,
[Symbol.dispose]: end,
};
} }
private async exportOnce() { private async exportOnce() {
const splatnet = new Splatnet3({ profile: this.profile, env: this.env }); const splatnet = new Splatnet3({ profile: this.profile, env: this.env });
@ -300,7 +302,7 @@ export class App {
splatnet, splatnet,
); );
const { redraw, endBar } = this.exporterProgress("Export vs games"); using bar = this.exporterProgress("Export vs games");
const fetcher = new GameFetcher({ const fetcher = new GameFetcher({
cache: this.opts.cache ?? new FileCache(this.profile.state.cacheDir), cache: this.opts.cache ?? new FileCache(this.profile.state.cacheDir),
state: this.profile.state, state: this.profile.state,
@ -320,7 +322,7 @@ export class App {
gameListFetcher, gameListFetcher,
stepProgress: stats[e.name], stepProgress: stats[e.name],
onStep: () => { onStep: () => {
redraw(e.name, progress(stats[e.name])); bar.redraw(e.name, progress(stats[e.name]));
}, },
}), }),
) )
@ -331,7 +333,7 @@ export class App {
), ),
); );
endBar(); await bar.end();
this.printStats(stats); this.printStats(stats);
if (errors.length > 0) { if (errors.length > 0) {
@ -353,7 +355,7 @@ export class App {
} else { } else {
const gameListFetcher = new CoopListFetcher(splatnet); const gameListFetcher = new CoopListFetcher(splatnet);
const { redraw, endBar } = this.exporterProgress("Export coop games"); using bar = this.exporterProgress("Export coop games");
const fetcher = new GameFetcher({ const fetcher = new GameFetcher({
cache: this.opts.cache ?? new FileCache(this.profile.state.cacheDir), cache: this.opts.cache ?? new FileCache(this.profile.state.cacheDir),
state: this.profile.state, state: this.profile.state,
@ -371,7 +373,7 @@ export class App {
gameListFetcher, gameListFetcher,
stepProgress: stats[e.name], stepProgress: stats[e.name],
onStep: () => { onStep: () => {
redraw(e.name, progress(stats[e.name])); bar.redraw(e.name, progress(stats[e.name]));
}, },
}), }),
) )
@ -382,7 +384,7 @@ export class App {
), ),
); );
endBar(); await bar.end();
this.printStats(stats); this.printStats(stats);
if (errors.length > 0) { if (errors.length > 0) {
@ -466,14 +468,17 @@ export class App {
display: "[:bar] :completed/:total", display: "[:bar] :completed/:total",
}) })
: undefined; : undefined;
for (const i of Array(sec).keys()) { try {
bar?.render([{ for (const i of Array(sec).keys()) {
completed: i, bar?.render([{
total: sec, completed: i,
}]); total: sec,
await delay(1000); }]);
await delay(1000);
}
} finally {
await bar?.end();
} }
bar?.end();
} }
async run() { async run() {
await this.profile.readState(); await this.profile.readState();
@ -560,7 +565,7 @@ export class App {
} }
printStats(stats: Record<string, StepProgress>) { printStats(stats: Record<string, StepProgress>) {
this.env.logger.log( this.env.logger.log(
`Exported ${ `\nExported ${
Object.entries(stats) Object.entries(stats)
.map(([name, { exported }]) => `${name}: ${exported}`) .map(([name, { exported }]) => `${name}: ${exported}`)
.join(", ") .join(", ")