#!/bin/bash # Configuration directories INSTALL_DIR="$HOME/.local/bin" APP_DIR="$HOME/.local/share/applications" SERVICE_MENU_DIR="$HOME/.local/share/kio/servicemenus" LEGACY_SERVICE_MENU_DIR="$HOME/.local/share/kservices5/ServiceMenus" # Create necessary directories mkdir -p "$INSTALL_DIR" "$APP_DIR" "$SERVICE_MENU_DIR" "$LEGACY_SERVICE_MENU_DIR" # Clean legacy kde-uploader names rm -f "$INSTALL_DIR/kde-uploader" "$INSTALL_DIR/kde-uploader-gui" rm -f "$APP_DIR/kde-uploader.desktop" "$APP_DIR/kde-uploader-gui.desktop" rm -f "$SERVICE_MENU_DIR/kde-uploader-servicemenu.desktop" "$LEGACY_SERVICE_MENU_DIR/kde-uploader-servicemenu.desktop" rm -f "$HOME/.config/autostart/kde-uploader-gui.desktop" # 1. Install the scripts cp uploader.sh "$INSTALL_DIR/f0ckm-uploader" chmod +x "$INSTALL_DIR/f0ckm-uploader" cp gui.py "$INSTALL_DIR/f0ckm-uploader-gui" chmod +x "$INSTALL_DIR/f0ckm-uploader-gui" mkdir -p "$HOME/.local/share/icons/hicolor/scalable/apps" mkdir -p "$HOME/.local/share/pixmaps" # Generate multi-resolution PNG icons (32x32, 48x48, 64x64, 128x128, 256x256) for KRunner search compatibility python3 -c ' import os from PySide6.QtGui import QImage, QPainter from PySide6.QtSvg import QSvgRenderer try: renderer = QSvgRenderer("icon_app.svg") sizes = [32, 48, 64, 128, 256] for sz in sizes: dir_path = f"'$HOME'/.local/share/icons/hicolor/{sz}x{sz}/apps" os.makedirs(dir_path, exist_ok=True) img = QImage(sz, sz, QImage.Format_ARGB32) img.fill(0) p = QPainter(img) renderer.render(p) p.end() img.save(os.path.join(dir_path, "f0ckm-uploader.png")) img_48 = QImage(48, 48, QImage.Format_ARGB32) img_48.fill(0) p = QPainter(img_48) renderer.render(p) p.end() img_48.save("'$HOME'/.local/share/pixmaps/f0ckm-uploader.png") except Exception as e: pass ' &> /dev/null if [ -f icon_app.svg ]; then cp icon_app.svg "$INSTALL_DIR/icon_app.svg" cp icon_app.svg "$HOME/.local/share/icons/hicolor/scalable/apps/f0ckm-uploader.svg" elif [ -f icon.svg ]; then cp icon.svg "$HOME/.local/share/icons/hicolor/scalable/apps/f0ckm-uploader.svg" fi if [ -f icon.svg ]; then cp icon.svg "$INSTALL_DIR/icon.svg" fi if [ -f icon_light.svg ]; then cp icon_light.svg "$INSTALL_DIR/icon_light.svg" fi if [ -f .env ]; then cp .env "$INSTALL_DIR/.env" fi # Clean up any stale auto-generated desktop entries rm -f "$APP_DIR/net.local.spectacle_uploader.sh.desktop" ICON_PATH="f0ckm-uploader" # 2. Install standard application entry (for Spectacle - hidden from main menu) sed -e "s|__EXEC_PATH__|$INSTALL_DIR/f0ckm-uploader-gui --spectacle|g" -e "s|__ICON_PATH__|$ICON_PATH|g" f0ckm-uploader.desktop > "$APP_DIR/f0ckm-uploader.desktop" chmod +x "$APP_DIR/f0ckm-uploader.desktop" # 3. Install the GUI application entry (visible in main menu) sed -e "s|__EXEC_PATH__|$INSTALL_DIR/f0ckm-uploader-gui|g" -e "s|__ICON_PATH__|$ICON_PATH|g" f0ckm-uploader-gui.desktop > "$APP_DIR/f0ckm-uploader-gui.desktop" chmod +x "$APP_DIR/f0ckm-uploader-gui.desktop" update-desktop-database "$APP_DIR" &> /dev/null gtk-update-icon-cache -f -t "$HOME/.local/share/icons/hicolor" &> /dev/null || true kbuildsycoca6 --noincremental &> /dev/null || kbuildsycoca5 --noincremental &> /dev/null || true # 4. Install KDE Service Menu entry (for Dolphin) sed "s|__EXEC_PATH__|$INSTALL_DIR/f0ckm-uploader-gui --upload|g" f0ckm-uploader-servicemenu.desktop > "$SERVICE_MENU_DIR/f0ckm-uploader-servicemenu.desktop" chmod +x "$SERVICE_MENU_DIR/f0ckm-uploader-servicemenu.desktop" sed "s|__EXEC_PATH__|$INSTALL_DIR/f0ckm-uploader-gui --upload|g" f0ckm-uploader-servicemenu.desktop > "$LEGACY_SERVICE_MENU_DIR/f0ckm-uploader-servicemenu.desktop" chmod +x "$LEGACY_SERVICE_MENU_DIR/f0ckm-uploader-servicemenu.desktop" # 5. Migrate config to config.json if not present CONFIG_DIR="$HOME/.config/f0ckm-uploader" CONFIG_FILE="$CONFIG_DIR/config.json" if [ ! -f "$CONFIG_FILE" ]; then mkdir -p "$CONFIG_DIR" # Fallback to the default key in script if no config file is found cat < "$CONFIG_FILE" { "api_url": "", "api_key": "", "default_rating": "", "default_tags": "", "default_is_oc": false, "enable_notifications": true, "show_progress_dialog": true, "autostart": false } EOF echo "Initial configuration created at $CONFIG_FILE" fi echo "Installation complete!" echo "The script has been installed to $INSTALL_DIR/f0ckm-uploader" echo "The GUI has been installed to $INSTALL_DIR/f0ckm-uploader-gui" echo "You can launch the GUI uploader from your applications menu (f0ckm Uploader GUI)." echo "You can now right click files in Dolphin and find 'Upload to f0ckm' in the Actions menu." echo "In Spectacle, you should find 'Upload to f0ckm' in the Export or Share menu."