update script
This commit is contained in:
30
README.md
30
README.md
@@ -27,13 +27,29 @@ A modern, high-contrast **KDE Plasma System Tray Uploader** and desktop integrat
|
|||||||
|
|
||||||
Ensure the following system dependencies are installed:
|
Ensure the following system dependencies are installed:
|
||||||
|
|
||||||
| Dependency | Purpose | Recommended Package (Fedora / Arch / Ubuntu) |
|
| Dependency | Purpose | Recommended Package (Arch / Fedora / Ubuntu) |
|
||||||
| :---------------------- | :------------------------- | :------------------------------------------- |
|
| :---------------------------------- | :---------------------------------- | :------------------------------------------- |
|
||||||
| **Python 3.9+** | Execution Runtime | `python3` |
|
| **Python 3.9+** | Execution Runtime | `python` / `python3` |
|
||||||
| **PySide6** | GUI Framework & IPC | `python3-pyside6` or `pip install PySide6` |
|
| **PySide6** | GUI Framework & IPC | `python-pyside6` / `python3-pyside6` |
|
||||||
| **Spectacle** | Region Screenshot Capture | `spectacle` (KDE Utility) |
|
| **Spectacle** | Region Screenshot Capture | `spectacle` (KDE Utility) |
|
||||||
| **ffmpeg** _(Optional)_ | Video Thumbnail Generation | `ffmpeg` |
|
| **ffmpeg** _(Optional)_ | Video Thumbnail Generation | `ffmpeg` |
|
||||||
| **libnotify** | Desktop Notifications | `libnotify` (`notify-send`) |
|
| **libnotify** | Desktop Notifications | `libnotify` (`notify-send`) |
|
||||||
|
| **Qt6 & KF6 Purpose** _(Optional)_ | Gwenview / Share Menu C++ Plugin | `qt6-base kf6-purpose kf6-kcoreaddons` |
|
||||||
|
|
||||||
|
### Install Dependencies via Package Manager
|
||||||
|
|
||||||
|
- **Arch Linux / Manjaro**:
|
||||||
|
```bash
|
||||||
|
sudo pacman -S python-pyside6 spectacle ffmpeg qt6-base kf6-purpose kf6-kcoreaddons
|
||||||
|
```
|
||||||
|
- **Fedora**:
|
||||||
|
```bash
|
||||||
|
sudo dnf install python3-pyside6 spectacle ffmpeg qt6-qtbase-devel kf6-purpose-devel kf6-kcoreaddons-devel
|
||||||
|
```
|
||||||
|
- **Ubuntu / Debian**:
|
||||||
|
```bash
|
||||||
|
sudo apt install python3-pyside6 spectacle ffmpeg qt6-base-dev libkf6purpose-dev libkf6kcoreaddons-dev
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,12 @@
|
|||||||
"browser_specific_settings": {
|
"browser_specific_settings": {
|
||||||
"gecko": {
|
"gecko": {
|
||||||
"id": "f0ckm-uploader@local",
|
"id": "f0ckm-uploader@local",
|
||||||
"strict_min_version": "109.0"
|
"strict_min_version": "109.0",
|
||||||
|
"data_collection_permissions": {
|
||||||
|
"required": [
|
||||||
|
"none"
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Upload images, media, links, and URLs directly to f0ckm from context menu or toolbar.",
|
"description": "Upload images, media, links, and URLs directly to f0ckm from context menu or toolbar.",
|
||||||
|
|||||||
69
install.sh
69
install.sh
@@ -6,8 +6,10 @@ APP_DIR="$HOME/.local/share/applications"
|
|||||||
SERVICE_MENU_DIR="$HOME/.local/share/kio/servicemenus"
|
SERVICE_MENU_DIR="$HOME/.local/share/kio/servicemenus"
|
||||||
LEGACY_SERVICE_MENU_DIR="$HOME/.local/share/kservices5/ServiceMenus"
|
LEGACY_SERVICE_MENU_DIR="$HOME/.local/share/kservices5/ServiceMenus"
|
||||||
|
|
||||||
# Check Python 3 and PySide6 dependency
|
# Check dependencies
|
||||||
echo "Checking dependencies..."
|
echo "Checking dependencies..."
|
||||||
|
MISSING_OPTIONAL=()
|
||||||
|
|
||||||
if ! command -v python3 &>/dev/null; then
|
if ! command -v python3 &>/dev/null; then
|
||||||
echo "Error: Python 3 is required but not found on your system."
|
echo "Error: Python 3 is required but not found on your system."
|
||||||
exit 1
|
exit 1
|
||||||
@@ -35,7 +37,65 @@ if ! python3 -c "import PySide6" &>/dev/null; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if ! python3 -c "import PySide6" &>/dev/null; then
|
if ! python3 -c "import PySide6" &>/dev/null; then
|
||||||
echo "Warning: Could not automatically install PySide6. Please install 'PySide6' via pip or your distro package manager (e.g. python3-pyside6)."
|
echo "Warning: Could not automatically install PySide6. Please install 'PySide6' via pip or package manager."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v spectacle &>/dev/null; then
|
||||||
|
MISSING_OPTIONAL+=("spectacle (KDE screenshot capture tool)")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v ffmpeg &>/dev/null; then
|
||||||
|
MISSING_OPTIONAL+=("ffmpeg (Video notification thumbnail generator)")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check Qt6 / KF6 Purpose plugin build requirements
|
||||||
|
HAS_QT6_MOC=false
|
||||||
|
for m in /usr/lib/qt6/moc /usr/lib/qt6/libexec/moc /usr/libexec/qt6/moc /usr/lib64/qt6/libexec/moc /usr/lib/qt6/bin/moc moc-qt6 moc; do
|
||||||
|
if [ -x "$m" ] || command -v "$m" &>/dev/null; then
|
||||||
|
bin_path="$m"
|
||||||
|
[ -x "$m" ] || bin_path="$(command -v "$m")"
|
||||||
|
ver="$("$bin_path" -v 2>&1 || true)"
|
||||||
|
if [[ "$ver" =~ moc\ 6\. ]] || [[ "$ver" =~ Qt\ 6\. ]] || [[ "$ver" =~ 6\.[0-9]+ ]]; then
|
||||||
|
HAS_QT6_MOC=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
HAS_PURPOSE_HDR=false
|
||||||
|
for h in /usr/include/KF6/Purpose /usr/include/purpose; do
|
||||||
|
if [ -d "$h" ]; then
|
||||||
|
HAS_PURPOSE_HDR=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$HAS_QT6_MOC" = false ] || [ "$HAS_PURPOSE_HDR" = false ]; then
|
||||||
|
MISSING_OPTIONAL+=("qt6-base & kf6-purpose (KDE Gwenview Share Menu integration)")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${#MISSING_OPTIONAL[@]} -gt 0 ]; then
|
||||||
|
echo ""
|
||||||
|
echo "--------------------------------------------------------"
|
||||||
|
echo " Notice: Optional dependencies missing:"
|
||||||
|
for dep in "${MISSING_OPTIONAL[@]}"; do
|
||||||
|
echo " - $dep"
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
echo " To install missing dependencies:"
|
||||||
|
if command -v pacman &>/dev/null; then
|
||||||
|
echo " Arch Linux: sudo pacman -S python-pyside6 spectacle ffmpeg qt6-base kf6-purpose kf6-kcoreaddons"
|
||||||
|
elif command -v dnf &>/dev/null; then
|
||||||
|
echo " Fedora: sudo dnf install python3-pyside6 spectacle ffmpeg qt6-qtbase-devel kf6-purpose-devel kf6-kcoreaddons-devel"
|
||||||
|
elif command -v apt-get &>/dev/null; then
|
||||||
|
echo " Debian/Ubuntu: sudo apt install python3-pyside6 spectacle ffmpeg qt6-base-dev libkf6purpose-dev libkf6kcoreaddons-dev"
|
||||||
|
else
|
||||||
|
echo " Arch Linux: sudo pacman -S python-pyside6 spectacle ffmpeg qt6-base kf6-purpose kf6-kcoreaddons"
|
||||||
|
echo " Fedora: sudo dnf install python3-pyside6 spectacle ffmpeg qt6-qtbase-devel kf6-purpose-devel kf6-kcoreaddons-devel"
|
||||||
|
echo " Debian/Ubuntu: sudo apt install python3-pyside6 spectacle ffmpeg qt6-base-dev libkf6purpose-dev libkf6kcoreaddons-dev"
|
||||||
|
fi
|
||||||
|
echo "--------------------------------------------------------"
|
||||||
|
echo ""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create necessary directories
|
# Create necessary directories
|
||||||
@@ -139,9 +199,12 @@ if [ -f "purpose_plugin/build_plugin.sh" ]; then
|
|||||||
cp "purpose_plugin/f0ckmpurposeplugin.so" "$PURPOSE_USER_DIR64/f0ckmpurposeplugin.so"
|
cp "purpose_plugin/f0ckmpurposeplugin.so" "$PURPOSE_USER_DIR64/f0ckmpurposeplugin.so"
|
||||||
cp "purpose_plugin/f0ckmpurposeplugin.so" "$PURPOSE_USER_DIR32/f0ckmpurposeplugin.so"
|
cp "purpose_plugin/f0ckmpurposeplugin.so" "$PURPOSE_USER_DIR32/f0ckmpurposeplugin.so"
|
||||||
|
|
||||||
if [ -w "/usr/lib64/qt6/plugins/kf6/purpose" ]; then
|
if [ -w "/usr/lib/qt6/plugins/kf6/purpose" ]; then
|
||||||
|
cp "purpose_plugin/f0ckmpurposeplugin.so" "/usr/lib/qt6/plugins/kf6/purpose/f0ckmpurposeplugin.so" &>/dev/null || true
|
||||||
|
elif [ -w "/usr/lib64/qt6/plugins/kf6/purpose" ]; then
|
||||||
cp "purpose_plugin/f0ckmpurposeplugin.so" "/usr/lib64/qt6/plugins/kf6/purpose/f0ckmpurposeplugin.so" &>/dev/null || true
|
cp "purpose_plugin/f0ckmpurposeplugin.so" "/usr/lib64/qt6/plugins/kf6/purpose/f0ckmpurposeplugin.so" &>/dev/null || true
|
||||||
elif sudo -n true 2>/dev/null; then
|
elif sudo -n true 2>/dev/null; then
|
||||||
|
sudo cp "purpose_plugin/f0ckmpurposeplugin.so" "/usr/lib/qt6/plugins/kf6/purpose/f0ckmpurposeplugin.so" &>/dev/null || true
|
||||||
sudo cp "purpose_plugin/f0ckmpurposeplugin.so" "/usr/lib64/qt6/plugins/kf6/purpose/f0ckmpurposeplugin.so" &>/dev/null || true
|
sudo cp "purpose_plugin/f0ckmpurposeplugin.so" "/usr/lib64/qt6/plugins/kf6/purpose/f0ckmpurposeplugin.so" &>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ set(CMAKE_CXX_STANDARD 17)
|
|||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
|
||||||
find_package(ECM REQUIRED NO_MODULE)
|
find_package(ECM 5.90.0 QUIET NO_MODULE)
|
||||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
if(ECM_FOUND)
|
||||||
|
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
||||||
|
endif()
|
||||||
|
|
||||||
find_package(Qt6 REQUIRED COMPONENTS Core Gui)
|
find_package(Qt6 REQUIRED COMPONENTS Core Gui)
|
||||||
find_package(KF6 REQUIRED COMPONENTS Purpose CoreAddons)
|
find_package(KF6 REQUIRED COMPONENTS Purpose CoreAddons)
|
||||||
@@ -22,3 +24,4 @@ target_link_libraries(f0ckmpurposeplugin
|
|||||||
KF6::Purpose
|
KF6::Purpose
|
||||||
KF6::CoreAddons
|
KF6::CoreAddons
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -7,50 +7,93 @@ mkdir -p "$OUTPUT_TARGET"
|
|||||||
OUTPUT_DIR="$(cd "$OUTPUT_TARGET" && pwd)"
|
OUTPUT_DIR="$(cd "$OUTPUT_TARGET" && pwd)"
|
||||||
|
|
||||||
MOC_BIN=""
|
MOC_BIN=""
|
||||||
for candidate in /usr/libexec/qt6/moc /usr/lib64/qt6/libexec/moc moc-qt6 moc; do
|
MOC_CANDIDATES=(
|
||||||
if command -v "$candidate" &>/dev/null; then
|
/usr/lib/qt6/moc
|
||||||
MOC_BIN="$candidate"
|
/usr/lib/qt6/libexec/moc
|
||||||
break
|
/usr/libexec/qt6/moc
|
||||||
elif [ -x "$candidate" ]; then
|
/usr/lib64/qt6/libexec/moc
|
||||||
MOC_BIN="$candidate"
|
/usr/lib/qt6/bin/moc
|
||||||
break
|
/usr/lib64/qt6/bin/moc
|
||||||
|
moc-qt6
|
||||||
|
moc6
|
||||||
|
moc
|
||||||
|
)
|
||||||
|
|
||||||
|
for candidate in "${MOC_CANDIDATES[@]}"; do
|
||||||
|
TARGET_BIN=""
|
||||||
|
if [ -x "$candidate" ]; then
|
||||||
|
TARGET_BIN="$candidate"
|
||||||
|
elif command -v "$candidate" &>/dev/null; then
|
||||||
|
TARGET_BIN="$(command -v "$candidate")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$TARGET_BIN" ]; then
|
||||||
|
VER_OUT="$("$TARGET_BIN" -v 2>&1 || true)"
|
||||||
|
if [[ "$VER_OUT" =~ moc\ 6\. ]] || [[ "$VER_OUT" =~ Qt\ 6\. ]] || [[ "$VER_OUT" =~ 6\.[0-9]+ ]]; then
|
||||||
|
MOC_BIN="$TARGET_BIN"
|
||||||
|
break
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -z "$MOC_BIN" ]; then
|
if [ -z "$MOC_BIN" ]; then
|
||||||
echo "Warning: Qt6 moc compiler not found. Skipping Purpose plugin compilation."
|
echo "Warning: Qt6 moc compiler not found (detected Qt5 moc or no moc)."
|
||||||
|
echo "On Arch Linux, please ensure Qt6 development tools are installed:"
|
||||||
|
echo " sudo pacman -S qt6-base kf6-purpose kf6-kcoreaddons"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Detect header search paths
|
# Detect header search paths
|
||||||
INC_ARGS=()
|
INC_ARGS=()
|
||||||
if [ -d "/usr/include/KF6/Purpose" ]; then
|
|
||||||
INC_ARGS+=("-I/usr/include/KF6/Purpose" "-I/usr/include/KF6/KCoreAddons" "-I/usr/include/KF6")
|
|
||||||
elif [ -d "/tmp/purpose_devel/usr/include/KF6/Purpose" ]; then
|
|
||||||
INC_ARGS+=("-I/tmp/purpose_devel/usr/include/KF6/Purpose" "-I/tmp/purpose_devel/usr/include/KF6/KCoreAddons" "-I/tmp/purpose_devel/usr/include/KF6")
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d "/usr/include/qt6" ]; then
|
for path in \
|
||||||
INC_ARGS+=("-I/usr/include/qt6" "-I/usr/include/qt6/QtCore" "-I/usr/include/qt6/QtGui")
|
/usr/include/KF6/Purpose \
|
||||||
fi
|
/usr/include/KF6/KCoreAddons \
|
||||||
|
/usr/include/KF6 \
|
||||||
|
/usr/include/purpose \
|
||||||
|
/tmp/purpose_devel/usr/include/KF6/Purpose \
|
||||||
|
/tmp/purpose_devel/usr/include/KF6; do
|
||||||
|
if [ -d "$path" ]; then
|
||||||
|
INC_ARGS+=("-I$path")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for path in \
|
||||||
|
/usr/include/qt6 \
|
||||||
|
/usr/include/qt6/QtCore \
|
||||||
|
/usr/include/qt6/QtGui \
|
||||||
|
/usr/include/x86_64-linux-gnu/qt6 \
|
||||||
|
/usr/include/x86_64-linux-gnu/qt6/QtCore \
|
||||||
|
/usr/include/x86_64-linux-gnu/qt6/QtGui; do
|
||||||
|
if [ -d "$path" ]; then
|
||||||
|
INC_ARGS+=("-I$path")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
if [ ${#INC_ARGS[@]} -eq 0 ]; then
|
if [ ${#INC_ARGS[@]} -eq 0 ]; then
|
||||||
echo "Warning: KF6 Purpose headers not found. Skipping Purpose plugin compilation."
|
echo "Warning: KF6 Purpose/Qt6 headers not found. Skipping Purpose plugin compilation."
|
||||||
|
echo "On Arch Linux, install development packages: sudo pacman -S kf6-purpose kf6-kcoreaddons qt6-base"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
LIB_ARGS=()
|
LIB_ARGS=()
|
||||||
if [ -f "/usr/lib64/libKF6Purpose.so.6" ]; then
|
for lib_path in \
|
||||||
LIB_ARGS+=("/usr/lib64/libKF6Purpose.so.6")
|
/usr/lib/libKF6Purpose.so.6 /usr/lib64/libKF6Purpose.so.6 /usr/lib/x86_64-linux-gnu/libKF6Purpose.so.6 \
|
||||||
elif [ -f "/usr/lib/libKF6Purpose.so.6" ]; then
|
/usr/lib/libKF6Purpose.so /usr/lib64/libKF6Purpose.so /usr/lib/x86_64-linux-gnu/libKF6Purpose.so; do
|
||||||
LIB_ARGS+=("/usr/lib/libKF6Purpose.so.6")
|
if [ -f "$lib_path" ]; then
|
||||||
fi
|
LIB_ARGS+=("$lib_path")
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
if [ -f "/usr/lib64/libKF6CoreAddons.so.6" ]; then
|
for lib_path in \
|
||||||
LIB_ARGS+=("/usr/lib64/libKF6CoreAddons.so.6")
|
/usr/lib/libKF6CoreAddons.so.6 /usr/lib64/libKF6CoreAddons.so.6 /usr/lib/x86_64-linux-gnu/libKF6CoreAddons.so.6 \
|
||||||
elif [ -f "/usr/lib/libKF6CoreAddons.so.6" ]; then
|
/usr/lib/libKF6CoreAddons.so /usr/lib64/libKF6CoreAddons.so /usr/lib/x86_64-linux-gnu/libKF6CoreAddons.so; do
|
||||||
LIB_ARGS+=("/usr/lib/libKF6CoreAddons.so.6")
|
if [ -f "$lib_path" ]; then
|
||||||
fi
|
LIB_ARGS+=("$lib_path")
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
BUILD_DIR="$(mktemp -d)"
|
BUILD_DIR="$(mktemp -d)"
|
||||||
trap 'rm -rf "$BUILD_DIR"' EXIT
|
trap 'rm -rf "$BUILD_DIR"' EXIT
|
||||||
@@ -67,3 +110,4 @@ g++ -shared -fPIC -O2 f0ckmplugin.cpp \
|
|||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
|
|
||||||
echo "Successfully built f0ckmpurposeplugin.so at $OUTPUT_DIR/f0ckmpurposeplugin.so"
|
echo "Successfully built f0ckmpurposeplugin.so at $OUTPUT_DIR/f0ckmpurposeplugin.so"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user