Финальное исправление иконок в оформлении
This commit is contained in:
Binary file not shown.
60
makefile
60
makefile
@@ -1,4 +1,4 @@
|
||||
.PHONY: all clean build-mac build-windows build-linux build-linux-musl package help quick package-single setup icons favicon windows-icon
|
||||
.PHONY: all clean build-mac build-windows build-linux build-linux-musl package help quick package-single icons
|
||||
|
||||
# Название проекта
|
||||
PROJECT_NAME := ae_anons
|
||||
@@ -26,11 +26,6 @@ TIMING_FILE := .build_timing
|
||||
# Определение команды ImageMagick (v6 = convert, v7 = magick)
|
||||
IMAGEMAGICK := $(shell command -v magick 2>/dev/null || command -v convert 2>/dev/null || echo "false")
|
||||
|
||||
# Параметры Font Awesome
|
||||
FONTAWESOME_VERSION := 6.4.0
|
||||
FONTAWESOME_CSS_URL := https://cdnjs.cloudflare.com/ajax/libs/font-awesome/$(FONTAWESOME_VERSION)/css/all.min.css
|
||||
FONTAWESOME_FONTS_URL := https://cdnjs.cloudflare.com/ajax/libs/font-awesome/$(FONTAWESOME_VERSION)/webfonts
|
||||
|
||||
help:
|
||||
@echo "$(BOLD)$(CYAN)AE Anons - Makefile команды$(NC)"
|
||||
@echo ""
|
||||
@@ -50,7 +45,8 @@ help:
|
||||
@echo " make package-single - Создать пакет для текущей платформы"
|
||||
@echo ""
|
||||
@echo "$(GREEN)Подготовка ресурсов:$(NC)"
|
||||
@echo " make setup - Загрузить и подготовить все статические ресурсы"
|
||||
@echo " make setup - Подготовить иконки (логотипы, favicon)"
|
||||
@echo " make setup-fontawesome-manual - Скачать и исправить all.min.css (если удалён)"
|
||||
@echo ""
|
||||
@echo "$(GREEN)Очистка:$(NC)"
|
||||
@echo " make clean - Очистить все сборки"
|
||||
@@ -103,30 +99,12 @@ define print_timing_summary
|
||||
endef
|
||||
|
||||
# ============================================
|
||||
# ПОДГОТОВКА СТАТИЧЕСКИХ РЕСУРСОВ
|
||||
# ПОДГОТОВКА РЕСУРСОВ
|
||||
# ============================================
|
||||
|
||||
setup: setup-fontawesome icons
|
||||
setup: icons
|
||||
@echo "$(GREEN)✅ Все статические ресурсы подготовлены$(NC)"
|
||||
|
||||
# Скачивает и подготавливает Font Awesome, если его ещё нет
|
||||
setup-fontawesome:
|
||||
@echo "$(GREEN)📦 Проверка Font Awesome...$(NC)"
|
||||
@if [ ! -f src/static/fontawesome/all.min.css ]; then \
|
||||
echo "$(YELLOW) Скачивание all.min.css и шрифтов...$(NC)"; \
|
||||
mkdir -p src/static/fontawesome/webfonts; \
|
||||
curl -sL -o src/static/fontawesome/all.min.css $(FONTAWESOME_CSS_URL); \
|
||||
curl -sL -o src/static/fontawesome/webfonts/fa-solid-900.woff2 $(FONTAWESOME_FONTS_URL)/fa-solid-900.woff2; \
|
||||
curl -sL -o src/static/fontawesome/webfonts/fa-regular-400.woff2 $(FONTAWESOME_FONTS_URL)/fa-regular-400.woff2; \
|
||||
curl -sL -o src/static/fontawesome/webfonts/fa-brands-400.woff2 $(FONTAWESOME_FONTS_URL)/fa-brands-400.woff2; \
|
||||
echo "$(GREEN) ✓ Font Awesome скачан$(NC)"; \
|
||||
else \
|
||||
echo "$(GREEN) ✓ Font Awesome уже существует$(NC)"; \
|
||||
fi
|
||||
@echo "$(GREEN) Исправление путей в all.min.css...$(NC)"
|
||||
@sed -i '' 's|../webfonts/|/static/fontawesome/webfonts/|g' src/static/fontawesome/all.min.css
|
||||
@echo "$(GREEN) ✓ Пути исправлены$(NC)"
|
||||
|
||||
# Генерация иконок (favicon, .ico, .icns) из логотипа
|
||||
icons:
|
||||
@echo "$(GREEN)🎨 Генерация иконок...$(NC)"
|
||||
@@ -155,8 +133,16 @@ icons:
|
||||
@rm -rf assets/icon.iconset
|
||||
@echo "$(GREEN) ✓ assets/logo.icns$(NC)"
|
||||
|
||||
# Восстановить CSS Font Awesome вручную (если файл удалён)
|
||||
setup-fontawesome-manual:
|
||||
@echo "$(GREEN)📥 Скачивание Font Awesome CSS...$(NC)"
|
||||
@curl -sL -o src/static/fontawesome/all.min.css $(FONTAWESOME_CSS_URL)
|
||||
@sed -i '' -E 's|(\.\./)*webfonts/|/static/fontawesome/webfonts/|g' \
|
||||
src/static/fontawesome/all.min.css
|
||||
@echo "$(GREEN)✓ CSS восстановлен и пути исправлены$(NC)"
|
||||
|
||||
# ============================================
|
||||
# ИКОНКА ДЛЯ WINDOWS .EXE (доп. проверка)
|
||||
# ИКОНКА ДЛЯ WINDOWS .EXE
|
||||
# ============================================
|
||||
windows-icon:
|
||||
@if [ ! -f assets/logo.ico ]; then \
|
||||
@@ -187,7 +173,7 @@ endif
|
||||
# БЫСТРАЯ СБОРКА (ТЕКУЩАЯ ПЛАТФОРМА)
|
||||
# ============================================
|
||||
|
||||
quick: setup detect-platform
|
||||
quick: detect-platform
|
||||
|
||||
quick-release:
|
||||
ifeq ($(UNAME_S),Darwin)
|
||||
@@ -204,7 +190,7 @@ else
|
||||
@exit 1
|
||||
endif
|
||||
|
||||
quick-mac: setup
|
||||
quick-mac:
|
||||
@rm -f $(TIMING_FILE)
|
||||
@$(call measure_time,"🍎 macOS $(UNAME_M)",cargo build --release)
|
||||
@mkdir -p $(BINARIES_DIR)/$(PROJECT_NAME)-v$(VERSION)-macos-$(UNAME_M)
|
||||
@@ -213,7 +199,7 @@ quick-mac: setup
|
||||
@echo "$(GREEN)✅ Пакет: $(BINARIES_DIR)/$(PROJECT_NAME)-v$(VERSION)-macos-$(UNAME_M)/$(NC)"
|
||||
@$(call print_timing_summary)
|
||||
|
||||
quick-linux: setup
|
||||
quick-linux:
|
||||
@rm -f $(TIMING_FILE)
|
||||
@$(call measure_time,"🐧 Linux $(UNAME_M)",cargo build --target x86_64-unknown-linux-musl --release)
|
||||
@mkdir -p $(BINARIES_DIR)/$(PROJECT_NAME)-v$(VERSION)-linux-$(UNAME_M)
|
||||
@@ -222,7 +208,7 @@ quick-linux: setup
|
||||
@echo "$(GREEN)✅ Пакет: $(BINARIES_DIR)/$(PROJECT_NAME)-v$(VERSION)-linux-$(UNAME_M)/$(NC)"
|
||||
@$(call print_timing_summary)
|
||||
|
||||
quick-windows: setup windows-icon
|
||||
quick-windows: windows-icon
|
||||
@rm -f $(TIMING_FILE)
|
||||
@if command -v x86_64-w64-mingw32-gcc >/dev/null 2>&1; then \
|
||||
$(call measure_time,"🪟 Windows x64",cargo build --target x86_64-pc-windows-gnu --release); \
|
||||
@@ -241,19 +227,19 @@ quick-windows: setup windows-icon
|
||||
# СБОРКА ПОД КОНКРЕТНЫЕ ПЛАТФОРМЫ
|
||||
# ============================================
|
||||
|
||||
build-mac: setup
|
||||
build-mac:
|
||||
@echo "$(GREEN)🍎 Сборка для macOS...$(NC)"
|
||||
@time cargo build --release
|
||||
|
||||
build-windows: setup windows-icon
|
||||
build-windows: windows-icon
|
||||
@echo "$(GREEN)🪟 Сборка для Windows x86_64...$(NC)"
|
||||
@time cargo build --target x86_64-pc-windows-gnu --release
|
||||
|
||||
build-linux: setup
|
||||
build-linux:
|
||||
@echo "$(GREEN)🐧 Сборка для Linux x86_64 (GNU)...$(NC)"
|
||||
@time cargo build --target x86_64-unknown-linux-gnu --release
|
||||
|
||||
build-linux-musl: setup
|
||||
build-linux-musl:
|
||||
@echo "$(GREEN)🐧 Сборка для Linux x86_64 (musl static)...$(NC)"
|
||||
@time cargo build --target x86_64-unknown-linux-musl --release
|
||||
|
||||
@@ -261,7 +247,7 @@ build-linux-musl: setup
|
||||
# СБОРКА ВСЕХ ПЛАТФОРМ С ТАЙМИНГОМ
|
||||
# ============================================
|
||||
|
||||
build-all: setup
|
||||
build-all:
|
||||
@rm -f $(TIMING_FILE)
|
||||
@echo "$(BOLD)$(CYAN)🚀 Сборка для всех платформ...$(NC)"
|
||||
@echo ""
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
20
src/static/fontawesome/all.min.css
vendored
20
src/static/fontawesome/all.min.css
vendored
@@ -6793,7 +6793,7 @@
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: block;
|
||||
src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")
|
||||
src: url(/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")
|
||||
}
|
||||
|
||||
.fa-brands,
|
||||
@@ -8713,7 +8713,7 @@
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: block;
|
||||
src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype")
|
||||
src: url(/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype")
|
||||
}
|
||||
|
||||
.fa-regular,
|
||||
@@ -8732,7 +8732,7 @@
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: block;
|
||||
src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype")
|
||||
src: url(/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype")
|
||||
}
|
||||
|
||||
.fa-solid,
|
||||
@@ -8744,45 +8744,45 @@
|
||||
font-family: "Font Awesome 5 Brands";
|
||||
font-display: block;
|
||||
font-weight: 400;
|
||||
src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")
|
||||
src: url(/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Font Awesome 5 Free";
|
||||
font-display: block;
|
||||
font-weight: 900;
|
||||
src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype")
|
||||
src: url(/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype")
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Font Awesome 5 Free";
|
||||
font-display: block;
|
||||
font-weight: 400;
|
||||
src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype")
|
||||
src: url(/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype")
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "FontAwesome";
|
||||
font-display: block;
|
||||
src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype")
|
||||
src: url(/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype")
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "FontAwesome";
|
||||
font-display: block;
|
||||
src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")
|
||||
src: url(/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "FontAwesome";
|
||||
font-display: block;
|
||||
src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype");
|
||||
src: url(/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype");
|
||||
unicode-range: u+f003, u+f006, u+f014, u+f016-f017, u+f01a-f01b, u+f01d, u+f022, u+f03e, u+f044, u+f046, u+f05c-f05d, u+f06e, u+f070, u+f087-f088, u+f08a, u+f094, u+f096-f097, u+f09d, u+f0a0, u+f0a2, u+f0a4-f0a7, u+f0c5, u+f0c7, u+f0e5-f0e6, u+f0eb, u+f0f6-f0f8, u+f10c, u+f114-f115, u+f118-f11a, u+f11c-f11d, u+f133, u+f147, u+f14e, u+f150-f152, u+f185-f186, u+f18e, u+f190-f192, u+f196, u+f1c1-f1c9, u+f1d9, u+f1db, u+f1e3, u+f1ea, u+f1f7, u+f1f9, u+f20a, u+f247-f248, u+f24a, u+f24d, u+f255-f25b, u+f25d, u+f271-f274, u+f278, u+f27b, u+f28c, u+f28e, u+f29c, u+f2b5, u+f2b7, u+f2ba, u+f2bc, u+f2be, u+f2c0-f2c1, u+f2c3, u+f2d0, u+f2d2, u+f2d4, u+f2dc
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "FontAwesome";
|
||||
font-display: block;
|
||||
src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-v4compatibility.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-v4compatibility.ttf) format("truetype");
|
||||
src: url(/static/fontawesome/webfonts/fa-v4compatibility.woff2) format("woff2"), url(/static/fontawesome/webfonts/fa-v4compatibility.ttf) format("truetype");
|
||||
unicode-range: u+f041, u+f047, u+f065-f066, u+f07d-f07e, u+f080, u+f08b, u+f08e, u+f090, u+f09a, u+f0ac, u+f0ae, u+f0b2, u+f0d0, u+f0d6, u+f0e4, u+f0ec, u+f10a-f10b, u+f123, u+f13e, u+f148-f149, u+f14c, u+f156, u+f15e, u+f160-f161, u+f163, u+f175-f178, u+f195, u+f1f8, u+f219, u+f27a
|
||||
}
|
||||
39
src/web.rs
39
src/web.rs
@@ -11,7 +11,6 @@ use serde::Serialize;
|
||||
use std::net::SocketAddr;
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::Mutex;
|
||||
use tower_http::services::ServeDir;
|
||||
use tower_http::trace::TraceLayer;
|
||||
|
||||
#[derive(Clone)]
|
||||
@@ -89,19 +88,26 @@ pub async fn run_web_server(config: Config) -> anyhow::Result<()> {
|
||||
.route("/favicon.ico", get(favicon))
|
||||
.route("/static/style.css", get(style_css))
|
||||
.route("/static/fontawesome/all.min.css", get(fontawesome_css))
|
||||
.route(
|
||||
"/static/fontawesome/webfonts/fa-solid-900.woff2",
|
||||
get(fa_solid_woff2),
|
||||
)
|
||||
.route(
|
||||
"/static/fontawesome/webfonts/fa-regular-400.woff2",
|
||||
get(fa_regular_woff2),
|
||||
)
|
||||
.route(
|
||||
"/static/fontawesome/webfonts/fa-brands-400.woff2",
|
||||
get(fa_brands_woff2),
|
||||
)
|
||||
.route("/assets/logo.png", get(logo_png))
|
||||
.route("/api/jobs", get(list_jobs))
|
||||
.route("/api/generate", post(generate_jobs))
|
||||
.route("/api/cleanup", post(cleanup_jobs))
|
||||
.route("/api/status", get(get_status))
|
||||
.route("/api/jobs/stop-all", post(stop_all_jobs))
|
||||
.nest_service(
|
||||
"/static/fontawesome/webfonts",
|
||||
ServeDir::new("src/static/fontawesome/webfonts"),
|
||||
)
|
||||
.layer(TraceLayer::new_for_http())
|
||||
.with_state(state);
|
||||
|
||||
let addr: SocketAddr = format!("0.0.0.0:{}", web_port).parse()?;
|
||||
log::info!("Web server listening on http://{}", addr);
|
||||
|
||||
@@ -229,6 +235,27 @@ async fn stop_all_jobs(State(state): State<AppState>) -> Result<impl IntoRespons
|
||||
Ok((StatusCode::OK, format!("Stopped {} jobs", stopped)))
|
||||
}
|
||||
|
||||
async fn fa_solid_woff2() -> impl IntoResponse {
|
||||
(
|
||||
[(CONTENT_TYPE, "font/woff2")],
|
||||
include_bytes!("static/fontawesome/webfonts/fa-solid-900.woff2").as_slice(),
|
||||
)
|
||||
}
|
||||
|
||||
async fn fa_regular_woff2() -> impl IntoResponse {
|
||||
(
|
||||
[(CONTENT_TYPE, "font/woff2")],
|
||||
include_bytes!("static/fontawesome/webfonts/fa-regular-400.woff2").as_slice(),
|
||||
)
|
||||
}
|
||||
|
||||
async fn fa_brands_woff2() -> impl IntoResponse {
|
||||
(
|
||||
[(CONTENT_TYPE, "font/woff2")],
|
||||
include_bytes!("static/fontawesome/webfonts/fa-brands-400.woff2").as_slice(),
|
||||
)
|
||||
}
|
||||
|
||||
struct AppError(StatusCode, String);
|
||||
|
||||
impl IntoResponse for AppError {
|
||||
|
||||
Reference in New Issue
Block a user