Compare commits
10
Commits
feature/ui
...
3e868c184a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e868c184a | ||
|
|
cd60bace64 | ||
|
|
dda6b93724 | ||
|
|
58ad6ca9d7 | ||
|
|
d606a5a600 | ||
|
|
4eabcc8aef | ||
|
|
35e8d8077d | ||
|
|
6e9a113629 | ||
|
|
75afcea506 | ||
|
|
44b94bdb0b |
No files matched your search
@@ -26,9 +26,6 @@ jobs:
|
|||||||
- target: x86_64-pc-windows-gnu
|
- target: x86_64-pc-windows-gnu
|
||||||
suffix: ".exe"
|
suffix: ".exe"
|
||||||
binary_path: "target/x86_64-pc-windows-gnu/release"
|
binary_path: "target/x86_64-pc-windows-gnu/release"
|
||||||
- target: x86_64-apple-darwin
|
|
||||||
suffix: ""
|
|
||||||
binary_path: "target/x86_64-apple-darwin/release"
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
@@ -36,16 +33,20 @@ jobs:
|
|||||||
|
|
||||||
- name: Install System Dependencies
|
- name: Install System Dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
# Зависимости для egui/eframe на Linux
|
# Базовые инструменты сборки (исправляет ошибку ring на Linux/Windows)
|
||||||
sudo apt-get install -y libwayland-dev libxkbcommon-dev libegl1-mesa-dev libgbm-dev
|
apt-get install -y build-essential llvm-dev libclang-dev clang
|
||||||
# Инструменты кросс-компиляции
|
|
||||||
|
# Зависимости для графики egui
|
||||||
|
apt-get install -y libwayland-dev libxkbcommon-dev libegl1-mesa-dev libgbm-dev
|
||||||
|
|
||||||
if [[ "${{ matrix.target }}" == *"windows"* ]]; then
|
if [[ "${{ matrix.target }}" == *"windows"* ]]; then
|
||||||
sudo apt-get install -y gcc-mingw-w64
|
apt-get install -y gcc-mingw-w64
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Install Rust & Target
|
- name: Install Rust & Target
|
||||||
run: |
|
run: |
|
||||||
|
# Используем вашу логику установки
|
||||||
if ! command -v rustc &> /dev/null; then
|
if ! command -v rustc &> /dev/null; then
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
|
||||||
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
||||||
@@ -65,7 +66,13 @@ jobs:
|
|||||||
${{ matrix.target }}-release-
|
${{ matrix.target }}-release-
|
||||||
|
|
||||||
- name: Build Binary
|
- name: Build Binary
|
||||||
run: cargo build --release --target ${{ matrix.target }}
|
run: |
|
||||||
|
# Для 'ring' при кросс-компиляции часто помогает использование clang вместо gcc
|
||||||
|
if [[ "${{ matrix.target }}" == *"apple"* ]]; then
|
||||||
|
export AR_x86_64_apple_darwin=x86_64-apple-darwin-ar
|
||||||
|
export CC_x86_64_apple_darwin=x86_64-apple-darwin-clang
|
||||||
|
fi
|
||||||
|
cargo build --release --target ${{ matrix.target }}
|
||||||
|
|
||||||
- name: Prepare Artifact
|
- name: Prepare Artifact
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ jobs:
|
|||||||
mkdir -p ./docs-output && cp -r target/doc/* ./docs-output/
|
mkdir -p ./docs-output && cp -r target/doc/* ./docs-output/
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: rust-documentation
|
name: rust-documentation
|
||||||
path: ./docs-output/
|
path: ./docs-output/
|
||||||
|
|||||||
@@ -26,9 +26,6 @@ jobs:
|
|||||||
- target: x86_64-pc-windows-gnu
|
- target: x86_64-pc-windows-gnu
|
||||||
suffix: ".exe"
|
suffix: ".exe"
|
||||||
binary_path: "target/x86_64-pc-windows-gnu/release"
|
binary_path: "target/x86_64-pc-windows-gnu/release"
|
||||||
- target: x86_64-apple-darwin
|
|
||||||
suffix: ""
|
|
||||||
binary_path: "target/x86_64-apple-darwin/release"
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
@@ -76,7 +73,7 @@ jobs:
|
|||||||
cp -r assets ./out/assets
|
cp -r assets ./out/assets
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ env.APP_NAME }}-${{ matrix.target }}
|
name: ${{ env.APP_NAME }}-${{ matrix.target }}
|
||||||
path: ./out/
|
path: ./out/
|
||||||
|
|||||||
@@ -0,0 +1,181 @@
|
|||||||
|
# Rclone UI Manager
|
||||||
|
|
||||||
|
Кроссплатформенный графический интерфейс для [rclone](https://rclone.org/), написанный на Rust с использованием [egui](https://github.com/emilk/egui). Приложение предоставляет удобный способ управления облачными хранилищами (Google Drive, Dropbox, S3 и др.) и локальными файлами, поддерживает копирование, перемещение, удаление и синхронизацию с отображением хода выполнения операций.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Возможности
|
||||||
|
|
||||||
|
- **Автоматическая установка rclone** – обнаруживает системный rclone или загружает последнюю версию автоматически.
|
||||||
|
- **Управление удалёнными хранилищами (remotes)** – просмотр, проверка и использование всех настроенных в rclone подключений.
|
||||||
|
- **Локальный файловый менеджер** – навигация по локальной файловой системе, выбор папок назначения.
|
||||||
|
- **Основные файловые операции**:
|
||||||
|
- Копирование / Перемещение / Удаление нескольких файлов или папок.
|
||||||
|
- Рекурсивная обработка директорий.
|
||||||
|
- **Фоновые задачи** – асинхронные операции с индикаторами прогресса и статусом выполнения.
|
||||||
|
- **История навигации** – кнопки «Назад» / «Вперёд» для быстрого перемещения.
|
||||||
|
- **Пользовательские шрифты** – поддержка Sans.otf и NotoColorEmoji.ttf для улучшенного внешнего вида (опционально).
|
||||||
|
- **Кроссплатформенность** – работает на Windows, macOS и Linux.
|
||||||
|
|
||||||
|
## Системные требования
|
||||||
|
|
||||||
|
- **Rust** (при сборке из исходников) – стабильный инструментарий.
|
||||||
|
- **Cargo** – входит в состав Rust.
|
||||||
|
- **Операционная система** – Windows 10/11, macOS 10.15+ или современный дистрибутив Linux.
|
||||||
|
- **rclone** – не требуется, приложение загрузит его при необходимости.
|
||||||
|
|
||||||
|
## Установка
|
||||||
|
|
||||||
|
### Готовые сборки (пока не предоставляются)
|
||||||
|
|
||||||
|
В будущих релизах могут быть добавлены исполняемые файлы. Пока что собирайте из исходников.
|
||||||
|
|
||||||
|
### Сборка из исходников
|
||||||
|
|
||||||
|
1. Клонируйте репозиторий:
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/yourusername/rclone-ui-manager.git
|
||||||
|
cd rclone-ui-manager
|
||||||
|
```
|
||||||
|
|
||||||
|
2. (Опционально) Поместите пользовательские шрифты в папку `assets/fonts/`:
|
||||||
|
- `Sans.otf`
|
||||||
|
- `NotoColorEmoji.ttf`
|
||||||
|
|
||||||
|
3. Соберите и запустите:
|
||||||
|
```bash
|
||||||
|
cargo run --release
|
||||||
|
```
|
||||||
|
|
||||||
|
Первый запуск может занять некоторое время из-за компиляции зависимостей. Исполняемый файл появится в `target/release/rclone-ui-manager` (или `rclone-ui-manager.exe` на Windows).
|
||||||
|
|
||||||
|
### Зависимости для Linux
|
||||||
|
|
||||||
|
На Linux могут потребоваться следующие системные библиотеки:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Ubuntu / Debian
|
||||||
|
sudo apt install libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libwayland-dev pkg-config
|
||||||
|
|
||||||
|
# Fedora
|
||||||
|
sudo dnf install libX11-devel libXrandr-devel libXinerama-devel libXcursor-devel libXi-devel wayland-devel pkgconf
|
||||||
|
```
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
|
||||||
|
1. Запустите приложение.
|
||||||
|
2. На левой боковой панели отобразится список ваших rclone remote (если они есть). Если remotes не настроены, используйте командную строку rclone для их добавления – в будущих версиях появится графический интерфейс для настройки.
|
||||||
|
3. Нажмите на имя remote, чтобы просмотреть его содержимое.
|
||||||
|
4. Выберите файлы/папки, щёлкая по их иконке (📁 или 📄). Можно выбирать несколько элементов.
|
||||||
|
5. После выбора внизу появятся кнопки: **Копировать**, **Переместить**, **Удалить**.
|
||||||
|
6. Для копирования/перемещения укажите путь назначения:
|
||||||
|
- **Облако** – введите путь в формате rclone (например, `gdrive:/backup`).
|
||||||
|
- **ПК** – выберите локальную папку через встроенный файловый браузер или введите путь вручную.
|
||||||
|
7. Нажмите **Начать** – операция запустится в фоне. Прогресс отображается на правой панели.
|
||||||
|
|
||||||
|
### Навигация
|
||||||
|
|
||||||
|
- **⬅ / ➡** – переход назад / вперёд по истории.
|
||||||
|
- **🔄** – обновить текущую директорию.
|
||||||
|
- **📁 .. (Вверх)** – подняться на уровень выше.
|
||||||
|
|
||||||
|
### Обработка ошибок
|
||||||
|
|
||||||
|
Сообщения об ошибках появляются во всплывающих окнах. Активные задачи перечислены на правой панели. Вы можете закрыть приложение, пока операции выполняются (они запускаются в отдельных потоках).
|
||||||
|
|
||||||
|
## Конфигурация
|
||||||
|
|
||||||
|
Приложение хранит настройки в стандартной пользовательской папке данных:
|
||||||
|
- Windows: `%APPDATA%\rclone-ui\`
|
||||||
|
- macOS: `~/Library/Application Support/rclone-ui/`
|
||||||
|
- Linux: `~/.local/share/rclone-ui/`
|
||||||
|
|
||||||
|
Сейчас в `AppSettings` хранятся только некоторые параметры (показ скрытых файлов, ограничение скорости). В будущих версиях они будут доступны через интерфейс.
|
||||||
|
|
||||||
|
## Разработка
|
||||||
|
|
||||||
|
### Структура проекта
|
||||||
|
|
||||||
|
```
|
||||||
|
src/
|
||||||
|
├── main.rs # Точка входа, загрузка шрифтов
|
||||||
|
├── ui.rs # Состояние UI и типы
|
||||||
|
├── ui/
|
||||||
|
│ ├── app.rs # Реализация egui::App
|
||||||
|
│ └── rcloneui.rs # Логика UI, фоновые задачи
|
||||||
|
├── operations/
|
||||||
|
│ ├── files.rs # Обёртка над rclone lsjson
|
||||||
|
│ ├── sync.rs # copy/move/delete/purge
|
||||||
|
│ ├── remotes.rs # list/get/create/update/delete remotes
|
||||||
|
│ ├── local_fs.rs # Чтение локальных директорий
|
||||||
|
│ ├── fileinfo.rs # Вспомогательные методы FileInfo
|
||||||
|
│ └── ... # info, search, check
|
||||||
|
└── rclone_install/
|
||||||
|
├── mod.rs # Определение RcloneApp
|
||||||
|
└── rclone_install_real.rs # Обнаружение и загрузка rclone
|
||||||
|
```
|
||||||
|
|
||||||
|
### Добавление новых функций
|
||||||
|
|
||||||
|
- **Новые операции с remotes** – расширяйте `operations/remotes.rs`.
|
||||||
|
- **Дополнительные команды файловых операций** – реализуйте в `operations/sync.rs` и вызывайте из `RcloneUI`.
|
||||||
|
- **Новые панели UI** – используйте `egui::SidePanel`, `CentralPanel` или `Window`.
|
||||||
|
|
||||||
|
### Тестирование
|
||||||
|
|
||||||
|
Запуск всех тестов:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo test
|
||||||
|
```
|
||||||
|
|
||||||
|
Некоторые тесты помечены как `ignore` (например, реальная загрузка rclone) – запустите их командой `cargo test -- --ignored`.
|
||||||
|
|
||||||
|
## Устранение неполадок
|
||||||
|
|
||||||
|
### «Rclone not found» / ошибка установки
|
||||||
|
|
||||||
|
- Проверьте интернет-соединение – приложение скачивает rclone с GitHub.
|
||||||
|
- На Linux убедитесь, что установлен `unzip` (хотя crate `zip` не требует его, но для ручной проверки может понадобиться).
|
||||||
|
- При работе через корпоративный прокси установите переменные окружения `HTTP_PROXY` и `HTTPS_PROXY`.
|
||||||
|
|
||||||
|
### Отсутствие шрифтов
|
||||||
|
|
||||||
|
Приложение нормально работает со стандартными системными шрифтами. Поместите файлы шрифтов в `assets/fonts/`, чтобы изменить внешний вид.
|
||||||
|
|
||||||
|
### Ошибки компиляции на Linux
|
||||||
|
|
||||||
|
Установите все необходимые пакеты для разработки X11 (см. раздел «Зависимости для Linux»).
|
||||||
|
|
||||||
|
### Приложение не показывает локальные директории на Windows
|
||||||
|
|
||||||
|
Локальный браузер по умолчанию открывает `C:\`. Чтобы перейти на другой диск, введите путь вручную (например, `D:\`) в поле назначения.
|
||||||
|
|
||||||
|
## Планы на будущее
|
||||||
|
|
||||||
|
- [ ] Графическая настройка remote (создание/изменение).
|
||||||
|
- [ ] Предварительный просмотр синхронизации (dry-run со списком файлов).
|
||||||
|
- [ ] Ползунок ограничения скорости.
|
||||||
|
- [ ] Поиск файлов по имени/пути.
|
||||||
|
- [ ] Поддержка фильтров rclone (`--include`, `--exclude`).
|
||||||
|
- [ ] Отображение информации о ёмкости хранилища (rclone about).
|
||||||
|
- [ ] Переключение светлой/тёмной темы.
|
||||||
|
|
||||||
|
## Лицензия
|
||||||
|
|
||||||
|
Проект лицензируется на условиях **MIT License** или **Apache License 2.0** на ваш выбор. Файл `LICENSE` будет добавлен позднее.
|
||||||
|
|
||||||
|
## Участие в разработке
|
||||||
|
|
||||||
|
Приветствуются любые вклады! Пожалуйста, создавайте issue или pull request. Соблюдайте существующий стиль кода и по возможности добавляйте тесты.
|
||||||
|
|
||||||
|
## Благодарности
|
||||||
|
|
||||||
|
- [rclone](https://rclone.org/) – основа всех операций с хранилищами.
|
||||||
|
- [egui](https://github.com/emilk/egui) – библиотека для мгновенного GUI.
|
||||||
|
- [tokio](https://tokio.rs/) – асинхронная среда выполнения для загрузки rclone.
|
||||||
|
- [dirs](https://crates.io/crates/dirs) – кросс-платформенное определение директорий.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Наслаждайтесь удобным управлением вашими облачными файлами!**
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 59 KiB |
Reference in new issue
Block a user