Skip to content

Commit 7356941

Browse files
committed
ci: Add GitHub Actions workflow for build and release
1 parent be92fc1 commit 7356941

33 files changed

+5389
-4093
lines changed

css/main.css

Lines changed: 1444 additions & 0 deletions
Large diffs are not rendered by default.

file-manager.html

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
body, html { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; margin: 0; padding: 0; height: 100%; width: 100%; overflow: hidden; background-color: var(--bg-color); color: var(--text-color); font-size: 14px; }
1616
.container { display: flex; flex-direction: column; height: 100vh; border: 1px solid var(--border-color); }
1717

18-
/* VVV ИЗМЕНЕНИЕ: Стили для кастомного заголовка VVV */
1918
.header {
2019
height: 32px; background-color: var(--header-bg); display: flex;
2120
align-items: center; padding-left: 12px; flex-shrink: 0;
@@ -32,7 +31,6 @@
3231
.window-control-btn i { font-size: 18px; }
3332
.window-control-btn:hover { background-color: rgba(255,255,255,0.1); }
3433
.window-control-btn.close-btn:hover { background-color: var(--danger-color); color: white; }
35-
/* ^^^ КОНЕЦ ИЗМЕНЕНИЯ ^^^ */
3634

3735
.panes-container { display: flex; flex-grow: 1; overflow: hidden; }
3836
.pane { width: 50%; display: flex; flex-direction: column; background-color: var(--pane-bg); border-top: 1px solid var(--border-color); }
@@ -59,7 +57,6 @@
5957
</head>
6058
<body>
6159
<div class="container">
62-
<!-- VVV ИЗМЕНЕНИЕ: Добавлен кастомный заголовок VVV -->
6360
<div class="header">
6461
<div class="title" id="window-title">Файловый менеджер</div>
6562
<div class="window-controls">
@@ -68,7 +65,6 @@
6865
<button id="close-btn" class="window-control-btn close-btn"><i class="material-icons">close</i></button>
6966
</div>
7067
</div>
71-
<!-- ^^^ КОНЕЦ ИЗМЕНЕНИЯ ^^^ -->
7268

7369
<div class="panes-container">
7470
<div class="pane" id="local-pane">
@@ -101,7 +97,6 @@ <h3>Камера: <span id="camera-name"></span></h3>
10197
</div>
10298
</div>
10399

104-
<!-- VVV ИЗМЕНЕНИЕ: Добавлен скрипт для кнопок управления VVV -->
105100
<script>
106101
document.addEventListener('DOMContentLoaded', () => {
107102
const cameraName = JSON.parse(new URLSearchParams(window.location.search).get('camera')).name;
@@ -119,7 +114,6 @@ <h3>Камера: <span id="camera-name"></span></h3>
119114
});
120115
});
121116
</script>
122-
<!-- ^^^ КОНЕЦ ИЗМЕНЕНИЯ ^^^ -->
123117

124118
<script src="./file-manager.js"></script>
125119
</body>

file-manager.js

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,6 @@
11
document.addEventListener('DOMContentLoaded', () => {
2-
// Проверяем, загрузился ли preload-скрипт
32
if (!window.scpApi) {
4-
document.body.innerHTML = `<div style="color: #ff6b6b; background-color: #1e1e1e; font-family: sans-serif; padding: 20px; height: 100%; box-sizing: border-box;">
5-
<h1>Критическая ошибка</h1>
6-
<p>Не удалось загрузить скрипт для связи с основным процессом (preload-скрипт).</p>
7-
<p>Возможные причины:</p>
8-
<ul>
9-
<li>Файл <strong>fm-preload.js</strong> отсутствует или переименован.</li>
10-
<li>В файле <strong>main.js</strong> указан неверный путь к preload-скрипту в функции <strong>createFileManagerWindow</strong>.</li>
11-
</ul>
12-
</div>`;
3+
document.body.innerHTML = `<div style="color: #ff6b6b; background-color: #1e1e1e; font-family: sans-serif; padding: 20px; height: 100%; box-sizing: border-box;"><h1>Критическая ошибка</h1><p>Не удалось загрузить скрипт для связи с основным процессом (preload-скрипт).</p></div>`;
134
return;
145
}
156

@@ -72,14 +63,12 @@ document.addEventListener('DOMContentLoaded', () => {
7263
progressBarFill.classList.remove('pulse');
7364
}
7465

75-
// VVV ИЗМЕНЕНИЕ: Новая функция для неопределенного прогресса VVV
7666
function showIndeterminateProgress() {
7767
progressBarContainer.style.display = 'block';
7868
statusTextEl.style.display = 'none';
7969
progressBarFill.style.width = '100%';
8070
progressBarFill.classList.add('pulse');
8171
}
82-
// ^^^ КОНЕЦ ИЗМЕНЕНИЯ ^^^
8372

8473
function hideProgress() {
8574
progressBarContainer.style.display = 'none';
@@ -220,9 +209,7 @@ document.addEventListener('DOMContentLoaded', () => {
220209
btnDownload.addEventListener('click', async () => {
221210
if (!selectedRemoteFile || selectedRemoteFile.isDirectory || !await ensureConnection()) return;
222211
setBusy(true, `Скачивание ${selectedRemoteFile.name}...`);
223-
// VVV ИЗМЕНЕНИЕ: Используем неопределенный индикатор VVV
224212
showIndeterminateProgress();
225-
// ^^^ КОНЕЦ ИЗМЕНЕНИЯ ^^^
226213

227214
const remoteFilePath = pathModule.posix.join(remotePath, selectedRemoteFile.name);
228215
try {
@@ -243,9 +230,7 @@ document.addEventListener('DOMContentLoaded', () => {
243230
btnUpload.addEventListener('click', async () => {
244231
if (!selectedLocalFile || selectedLocalFile.isDirectory || !await ensureConnection()) return;
245232
setBusy(true, `Загрузка ${selectedLocalFile.name}...`);
246-
// VVV ИЗМЕНЕНИЕ: Используем неопределенный индикатор VVV
247233
showIndeterminateProgress();
248-
// ^^^ КОНЕЦ ИЗМЕНЕНИЯ ^^^
249234
try {
250235
const result = await window.scpApi.upload(camera.id, remotePath);
251236
if (result.success) {
@@ -331,7 +316,6 @@ document.addEventListener('DOMContentLoaded', () => {
331316
if(e.key === 'Enter') await listLocalFiles(localPathInput.value);
332317
});
333318

334-
// SCP не возвращает прогресс, поэтому этот обработчик больше не будет вызываться
335319
window.scpApi.onProgress(updateProgress);
336320
window.scpApi.onClose(() => {
337321
setStatus('Соединение с камерой закрыто.', true);

fm-preload.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
const { contextBridge, ipcRenderer } = require('electron');
22

33
contextBridge.exposeInMainWorld('scpApi', {
4-
// VVV ИЗМЕНЕНИЕ: Добавлены функции управления окном VVV
4+
// Функции управления окном
55
minimize: () => ipcRenderer.send('minimize-window'),
66
maximize: () => ipcRenderer.send('maximize-window'),
77
close: () => ipcRenderer.send('close-window'),
88
onWindowMaximized: (callback) => ipcRenderer.on('window-maximized', callback),
99
onWindowUnmaximized: (callback) => ipcRenderer.on('window-unmaximized', callback),
10-
// ^^^ КОНЕЦ ИЗМЕНЕНИЯ ^^^
1110

11+
// API для работы с файлами
1212
connect: (camera) => ipcRenderer.invoke('scp-connect', camera),
1313
list: (cameraId, path) => ipcRenderer.invoke('scp-list', { cameraId, path }),
1414
download: (cameraId, remotePath) => ipcRenderer.invoke('scp-download', { cameraId, remotePath }),
@@ -17,7 +17,7 @@ contextBridge.exposeInMainWorld('scpApi', {
1717
deleteFile: (cameraId, path) => ipcRenderer.invoke('scp-delete-file', { cameraId, path }),
1818
deleteDirectory: (cameraId, path) => ipcRenderer.invoke('scp-delete-dir', { cameraId, path }),
1919

20-
// Для локальной файловой системы
20+
// API для локальной файловой системы
2121
getLocalDiskList: () => ipcRenderer.invoke('get-local-disk-list'),
2222
listLocal: (path) => ipcRenderer.invoke('list-local-files', path),
2323

0 commit comments

Comments
 (0)