kingkont 0.7.35 → 0.7.37

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.
Files changed (3) hide show
  1. package/index.html +4 -6
  2. package/main.js +33 -3
  3. package/package.json +1 -1
package/index.html CHANGED
@@ -2998,12 +2998,10 @@ async function selectBoard(board) {
2998
2998
  $('addText').disabled = false; $('genText').disabled = false; $('genAudio').disabled = false; $('genImage').disabled = false; $('genVideo').disabled = false; $('genSfx').disabled = false; $('genMusic').disabled = false;
2999
2999
 
3000
3000
  $('path').textContent = `${state.filmHandle.name} / ${board.name}`;
3001
- const badge = $('boardBadge');
3002
- badge.style.display = '';
3003
- badge.textContent = board.kind === 'character' ? 'Персонаж'
3004
- : board.kind === 'location' ? 'Локация'
3005
- : 'Сцена';
3006
- badge.className = 'badge ' + board.kind;
3001
+ // Тип board (Сцена/Персонаж/Локация) убрали из верхней панели —
3002
+ // достаточно того что выделено в sidebar. Badge оставлен в DOM как
3003
+ // hidden на случай если где-то логика проверяет его наличие.
3004
+ $('boardBadge').style.display = 'none';
3007
3005
  // Имя выбранного board в шапке sidebar
3008
3006
  const boardEl = $('brandBoard');
3009
3007
  if (boardEl) {
package/main.js CHANGED
@@ -100,6 +100,30 @@ ipcMain.handle('native-player:stop', async () => {
100
100
  let isQuitting = false;
101
101
  app.on('before-quit', () => { isQuitting = true; stopNativePlayer(); });
102
102
 
103
+ // Single-instance — спасает от двух копий после relaunch (особенно на Win,
104
+ // где старый процесс не успевает погаснуть до spawn нового). Если копия уже
105
+ // работает — этот процесс выходит, а первая копия просто фокусирует окно.
106
+ const singleLock = app.requestSingleInstanceLock();
107
+ if (!singleLock) {
108
+ app.quit();
109
+ } else {
110
+ app.on('second-instance', () => {
111
+ if (win && !win.isDestroyed()) {
112
+ if (win.isMinimized()) win.restore();
113
+ win.show();
114
+ win.focus();
115
+ }
116
+ });
117
+ }
118
+
119
+ // Windows console encoding fix: console default cp866/cp1252, наш log с
120
+ // UTF-8 (✓ ✗ ▶) превращается в кракозябры. Просим консоль UTF-8.
121
+ if (process.platform === 'win32') {
122
+ try {
123
+ require('node:child_process').execSync('chcp 65001', { stdio: 'ignore' });
124
+ } catch {}
125
+ }
126
+
103
127
  // ===== Settings persisted в userData/settings.json =====
104
128
  // Хранит API-ключи (KIE, ElevenLabs) и прочие конфиги. При старте main.js
105
129
  // прокидывает ключи в process.env, чтобы server.js подхватил без переписки.
@@ -464,15 +488,21 @@ ipcMain.handle('app:relaunch', () => {
464
488
  ? ''
465
489
  : ':/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin';
466
490
  const env = { ...process.env, PATH: (process.env.PATH || '') + extraPath };
491
+ // Задержка ДО запуска новой копии, чтобы старый процесс успел отпустить
492
+ // single-instance lock и file-based caches (на Windows иначе ловится
493
+ // 0x5 «Unable to move the cache» — два экземпляра одновременно).
494
+ const relaunchCmd = process.platform === 'win32'
495
+ ? 'timeout /t 2 /nobreak > nul && kingkont'
496
+ : 'sleep 2 && kingkont';
467
497
  try {
468
- const child = spawn('kingkont', { shell: true, env, detached: true, stdio: 'ignore' });
498
+ const child = spawn(relaunchCmd, { shell: true, env, detached: true, stdio: 'ignore' });
469
499
  child.unref();
470
500
  } catch (e) {
471
501
  console.warn('spawn kingkont failed, fallback на app.relaunch():', e?.message);
472
502
  app.relaunch();
473
503
  }
474
- // Дать ребёнку секунду чтобы успеть стартовать, потом выходим.
475
- setTimeout(() => app.exit(0), 800);
504
+ // Гасим текущий процесс быстро следующий стартует через 2 сек.
505
+ setTimeout(() => app.exit(0), 300);
476
506
  });
477
507
 
478
508
  // Фоновая проверка при старте: если есть свежая — открываем окно автоматом.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kingkont",
3
- "version": "0.7.35",
3
+ "version": "0.7.37",
4
4
  "description": "KingKont \u00b7 Chatium \u2014 \u043d\u043e\u0434-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u0446\u0435\u043d \u0441 AI-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 (\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438/\u0432\u0438\u0434\u0435\u043e/\u0433\u043e\u043b\u043e\u0441/SFX/\u043c\u0443\u0437\u044b\u043a\u0430/\u0442\u0435\u043a\u0441\u0442)",
5
5
  "main": "main.js",
6
6
  "bin": {