Skip to content

Commit 5e21a86

Browse files
authored
Merge pull request #42 from Zarestia-Dev/Cron-and-Serve
Cron and serve
2 parents 7b1ac81 + 2b71ddd commit 5e21a86

File tree

219 files changed

+17113
-5665
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

219 files changed

+17113
-5665
lines changed

.dockerignore

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# Docker ignore file for RClone Manager
2+
# This prevents unnecessary files from being sent to Docker build context
3+
4+
# Node modules
5+
node_modules/
6+
npm-debug.log*
7+
8+
# Build outputs
9+
dist/
10+
.angular/
11+
target/
12+
13+
# IDE files
14+
.vscode/
15+
.idea/
16+
*.swp
17+
*.swo
18+
*~
19+
20+
# OS files
21+
.DS_Store
22+
Thumbs.db
23+
24+
# Git
25+
.git/
26+
.gitignore
27+
.gitattributes
28+
29+
# Documentation
30+
*.md
31+
docs/
32+
33+
# Test files
34+
*.spec.ts
35+
*.test.ts
36+
e2e/
37+
cypress/
38+
39+
# Environment files (keep these local)
40+
.env
41+
.env.local
42+
.env.*.local
43+
44+
# Temporary files
45+
tmp/
46+
temp/
47+
*.tmp
48+
49+
# Logs
50+
logs/
51+
*.log
52+
53+
# Cache
54+
.cache/
55+
.npm/
56+
.eslintcache
57+
58+
# CI/CD
59+
.github/
60+
.gitlab-ci.yml
61+
azure-pipelines.yml
62+
63+
# Package manager files
64+
package-lock.json
65+
yarn.lock
66+
pnpm-lock.yaml
67+
68+
# Rust debug builds (we only need release)
69+
src-tauri/target/debug/
70+
71+
# Tauri specific
72+
src-tauri/gen/
73+
74+
# Docker files (don't include in build context)
75+
Dockerfile
76+
docker-compose*.yml
77+
.dockerignore

AUR/PKGBUILD

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Maintainer: Hakan İSMAİL <hakanismail53@gmail.com>
22
pkgname=rclone-manager
33
appname='Rclone.Manager'
4-
releasetag=0.1.6
5-
pkgver=0.1.6
4+
releasetag=0.1.7
5+
pkgver=0.1.7
66
pkgrel=1
77
pkgdesc="User-friendly GUI for Rclone"
88
arch=('x86_64' 'aarch64')

AUR/PKGBUILD-git

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Maintainer: Hakan İSMAİL <hakanismail53@gmail.com>
22
pkgname=rclone-manager-git
33
appname='Rclone.Manager'
4-
pkgver=0.1.6 # Set initial value, will be overwritten by pkgver()
4+
pkgver=0.1.7 # Set initial value, will be overwritten by pkgver()
55
pkgrel=1
66
pkgdesc="User-friendly GUI for Rclone"
77
arch=('x86_64' 'aarch64')

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
# Changelog
22
# All notable changes to this project will be documented in this file.
33

4+
## [v0.1.7] - 2025-11-14
5+
### Added
6+
- Added schedule support for sync, copy, move, and bisync operations. You can now schedule these operations to run at specific times or intervals using a cron-like syntax. You can find the scheduling options in the remote sync operation settings. (Supports detailed cron expressions. Example `15,45 8-18/2 * 1,11 1-5`: Every 2 hours at minutes 15 and 45 between 8 AM and 6 PM on Mondays and Fridays in January and November)
7+
- New time picker module added for better clock time selection.
8+
- Rclone Serve support added. You can now start and stop rclone serve commands. The serve status is displayed in the sidebar for easy access. You can find the serve options in the Serve Tab. Serve configurations (vfs, backend and filter) separated from the other configurations.
9+
10+
### Changed
11+
- Backup and Restore system has been completely redesigned and rewritten for better reliability and performance. Old backup files are not compatible with the new system. Please create a new backup after updating to this version.
12+
- A lot of Rust backend refactoring and optimizations have been made for better performance and maintainability.
13+
14+
### Fixed
15+
- Critical fix for process management. Now the app correctly find own rclone processes via ports.
416

517
## [v0.1.6] - 2025-11-02
618
### Added

Dockerfile

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# Multi-stage Dockerfile for RClone Manager Headless Server (TESTING)
2+
# Stage 1: Build Angular frontend
3+
FROM node:20-alpine AS frontend-builder
4+
5+
WORKDIR /app
6+
7+
# Copy package files
8+
COPY package*.json ./
9+
10+
# Install dependencies
11+
RUN npm install
12+
13+
# Copy source files
14+
COPY . .
15+
16+
# Build Angular application
17+
RUN npm run build
18+
19+
# Stage 2: Build Rust backend
20+
FROM debian:bookworm-slim AS backend-builder
21+
22+
# Install Rust nightly and build dependencies
23+
RUN apt-get update && apt-get install -y \
24+
curl \
25+
build-essential \
26+
pkg-config \
27+
libssl-dev \
28+
libdbus-1-dev \
29+
libsoup-3.0-dev \
30+
libjavascriptcoregtk-4.1-dev \
31+
libwebkit2gtk-4.1-dev \
32+
wget \
33+
&& rm -rf /var/lib/apt/lists/*
34+
35+
# Install Rust nightly
36+
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain nightly
37+
ENV PATH="/root/.cargo/bin:${PATH}"
38+
39+
WORKDIR /app
40+
41+
# Copy Cargo files
42+
COPY src-tauri/Cargo.toml src-tauri/Cargo.lock ./src-tauri/
43+
44+
# Copy source code
45+
COPY src-tauri/src ./src-tauri/src
46+
COPY src-tauri/icons ./src-tauri/icons
47+
COPY src-tauri/build.rs ./src-tauri/build.rs
48+
COPY src-tauri/tauri.conf.json ./src-tauri/tauri.conf.json
49+
COPY src-tauri/capabilities ./src-tauri/capabilities
50+
51+
# Copy built frontend from previous stage
52+
COPY --from=frontend-builder /app/dist ./dist
53+
54+
# Build the headless binary with optimizations
55+
WORKDIR /app/src-tauri
56+
RUN cargo build --release --bin rclone-manager-headless --features web-server
57+
58+
# Stage 3: Runtime - slim Debian image
59+
FROM debian:bookworm-slim
60+
61+
# Install runtime dependencies including GTK libraries and Xvfb for virtual display
62+
RUN apt-get update && \
63+
apt-get install -y --no-install-recommends \
64+
ca-certificates \
65+
curl \
66+
unzip \
67+
fuse3 \
68+
libgtk-3-0 \
69+
libwebkit2gtk-4.1-0 \
70+
libayatana-appindicator3-1 \
71+
xvfb \
72+
dbus-x11 \
73+
&& rm -rf /var/lib/apt/lists/*
74+
75+
# Install rclone
76+
RUN curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip && \
77+
unzip rclone-current-linux-amd64.zip && \
78+
cd rclone-*-linux-amd64 && \
79+
cp rclone /usr/bin/ && \
80+
chown root:root /usr/bin/rclone && \
81+
chmod 755 /usr/bin/rclone && \
82+
cd .. && \
83+
rm -rf rclone-*-linux-amd64 rclone-current-linux-amd64.zip
84+
85+
# Create non-root user
86+
RUN useradd -m -u 1000 rclone-manager && \
87+
mkdir -p /home/rclone-manager/.config/rclone-manager && \
88+
chown -R rclone-manager:rclone-manager /home/rclone-manager
89+
90+
# Copy the built binary
91+
COPY --from=backend-builder /app/src-tauri/target/release/rclone-manager-headless /usr/local/bin/
92+
93+
# Copy the frontend dist files to match expected path
94+
COPY --from=frontend-builder /app/dist/rclone-manager/browser /usr/share/rclone-manager/dist/rclone-manager/browser
95+
96+
# Set working directory where the app will look for static files
97+
WORKDIR /usr/share/rclone-manager
98+
99+
# Switch to non-root user
100+
USER rclone-manager
101+
102+
# Expose the default port
103+
EXPOSE 8080
104+
105+
# Health check
106+
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
107+
CMD curl -f http://localhost:8080/api/health || exit 1
108+
109+
# Set environment variables
110+
ENV RUST_LOG=info
111+
ENV RCLONE_CONFIG=/home/rclone-manager/.config/rclone/rclone.conf
112+
ENV DISPLAY=:99
113+
114+
# Create startup script that runs Xvfb and the application
115+
USER root
116+
RUN echo '#!/bin/bash\n\
117+
set -e\n\
118+
# Start Xvfb in background\n\
119+
Xvfb :99 -screen 0 1024x768x24 -nolisten tcp &\n\
120+
XVFB_PID=$!\n\
121+
# Wait for X to start\n\
122+
sleep 2\n\
123+
# Start dbus\n\
124+
export $(dbus-launch)\n\
125+
# Run the application as rclone-manager user\n\
126+
exec su rclone-manager -c "/usr/local/bin/rclone-manager-headless $*"\n\
127+
' > /usr/local/bin/entrypoint.sh && \
128+
chmod +x /usr/local/bin/entrypoint.sh
129+
130+
# Run the headless server with Xvfb wrapper
131+
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
132+
CMD ["--host", "0.0.0.0", "--port", "8080"]

README.md

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,25 +40,18 @@
4040
## 📸 Screenshots
4141

4242
<p align="center">
43-
<strong>💻 Desktop Interface</strong><br/>
44-
<img src="assets/desktop-ui.png" alt="Desktop UI" width="500"/>
43+
<img src="assets/desktop-ui.png" alt="Desktop UI" width="40%">
4544
</p>
46-
4745
<p align="center">
48-
<strong>🏠 Home & Overview</strong><br/>
49-
<img src="assets/general-home.png" alt="General Home" width="250"/>
50-
<img src="assets/general-remote.png" alt="General Remote" width="250"/>
51-
</p>
5246

53-
<p align="center">
54-
<strong>⚙️ Mount Control & Job Monitoring</strong><br/>
55-
<img src="assets/mount-control.png" alt="Mount Control" width="250"/>
56-
<img src="assets/job-watcher.png" alt="Job Watcher" width="250"/>
57-
</p>
47+
| Home | Remote Overview | Mount Control |
48+
| :-----------------------------------------------------------------: | :---------------------------------------------------------------------: | :-------------------------------------------------------------------: |
49+
| <img src="assets/general-home.png" alt="General Home" width="250"/> | <img src="assets/general-remote.png" alt="General Remote" width="250"/> | <img src="assets/mount-control.png" alt="Mount Control" width="250"/> |
50+
51+
| Job Watcher | Serve Control | Responsive |
52+
| :---------------------------------------------------------------: | :-------------------------------------------------------------------: | :-----------------------------------------------------------: |
53+
| <img src="assets/job-watcher.png" alt="Job Watcher" width="250"/> | <img src="assets/serve-control.png" alt="Serve Control" width="250"/> | <img src="assets/mobile-ui.png" alt="Mobile UI" width="150"/> |
5854

59-
<p align="center">
60-
<strong>📱 Responsive</strong><br/>
61-
<img src="assets/mobile-ui.png" alt="Mobile UI" width="150"/>
6255
</p>
6356

6457
<p align="center">
@@ -74,7 +67,8 @@
7467
- 🛠 **Complete Remote Management** – Add, edit, delete, and clone remotes with an intuitive wizard
7568
- 🔐 **OAuth & Interactive Configuration** – Seamless authentication with providers like OneDrive, Google Drive, and iCloud
7669
- 🔑 **Encrypted Configuration Support** – Secure password storage using system keyring/credential store
77-
- 💾 **Import/Export** – Backup and restore your entire configuration, with optional 7z encryption
70+
-**Scheduled Tasks** – Automate syncs with a built-in scheduler. Create, edit, enable/disable, and monitor scheduled jobs.
71+
- 💾 **Import/Export** – Backup and restore your settings, with optional 7z encryption.
7872

7973
### ⚡ File Operations
8074

@@ -83,6 +77,7 @@
8377
- ↔️ **Bidirectional Sync (Bisync)** – Keep two locations perfectly synchronized in both directions
8478
- 🚚 **Move Operations** – Transfer files between locations without leaving duplicates
8579
- 🎯 **Primary Actions** – Set up to 3 quick-access actions per remote for instant operations
80+
- 📡 **Serve Remotes** – Expose remotes over HTTP, WebDAV, FTP, SFTP and more.
8681

8782
### 🎨 User Experience
8883

angular.json

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,16 @@
4848
"browser": "src/main.ts",
4949
"polyfills": ["zone.js"],
5050
"tsConfig": "tsconfig.app.json",
51-
"assets": ["src/assets"],
51+
"assets": ["src/assets", "src/favicon.ico"],
5252
"styles": ["src/custom-theme.scss"]
5353
},
5454
"configurations": {
5555
"production": {
5656
"budgets": [
5757
{
5858
"type": "initial",
59-
"maximumWarning": "500kb",
60-
"maximumError": "2.5mb"
59+
"maximumWarning": "2mb",
60+
"maximumError": "2.6mb"
6161
},
6262
{
6363
"type": "anyComponentStyle",
@@ -67,14 +67,6 @@
6767
],
6868
"outputHashing": "all"
6969
},
70-
"headless": {
71-
"fileReplacements": [
72-
{
73-
"replace": "src/app/services/index.ts",
74-
"with": "src/app/services-headless/index.ts"
75-
}
76-
]
77-
},
7870
"development": {
7971
"optimization": false,
8072
"extractLicenses": false,

assets/general-home.png

-11.7 KB
Loading

assets/general-remote.png

-4.22 KB
Loading

assets/mount-control.png

18 KB
Loading

0 commit comments

Comments
 (0)