forked from Leak_Technologies/VideoTools
Features: - Add persistent conversion stats bar visible on all screens - Shows running job progress with live updates - Displays pending/completed/failed job counts - Clickable to open queue view - Add multi-video navigation with Prev/Next buttons - Load multiple videos for batch queue setup - Switch between loaded videos to review settings - Add install script with animated loading spinner - Add error dialogs with "Copy Error" button for debugging Improvements: - Update queue tile to show active/total jobs instead of completed/total - Fix deadlock in queue callback system (run callbacks in goroutines) - Improve batch file handling with detailed error reporting - Fix queue status to always show progress percentage (even at 0%) - Better error messages for failed video analysis 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
136 lines
3.4 KiB
Bash
Executable File
136 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Spinner function
|
|
spinner() {
|
|
local pid=$1
|
|
local task=$2
|
|
local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
|
|
local i=0
|
|
|
|
while kill -0 $pid 2>/dev/null; do
|
|
i=$(( (i+1) %10 ))
|
|
printf "\r${BLUE}${spin:$i:1}${NC} %s..." "$task"
|
|
sleep 0.1
|
|
done
|
|
printf "\r"
|
|
}
|
|
|
|
# Configuration
|
|
BINARY_NAME="VideoTools"
|
|
DEFAULT_INSTALL_PATH="/usr/local/bin"
|
|
USER_INSTALL_PATH="$HOME/.local/bin"
|
|
|
|
echo "========================================="
|
|
echo " VideoTools Installation Script"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Check if Go is installed
|
|
if ! command -v go &> /dev/null; then
|
|
echo -e "${RED}Error: Go is not installed or not in PATH${NC}"
|
|
echo "Please install Go 1.21+ from https://go.dev/dl/"
|
|
exit 1
|
|
fi
|
|
|
|
# Check Go version
|
|
GO_VERSION=$(go version | awk '{print $3}' | sed 's/go//')
|
|
echo -e "${GREEN}✓${NC} Found Go version: $GO_VERSION"
|
|
|
|
# Build the binary
|
|
echo ""
|
|
go build -o "$BINARY_NAME" . > /tmp/videotools-build.log 2>&1 &
|
|
BUILD_PID=$!
|
|
spinner $BUILD_PID "Building $BINARY_NAME"
|
|
|
|
if wait $BUILD_PID; then
|
|
echo -e "${GREEN}✓${NC} Build successful"
|
|
else
|
|
echo -e "${RED}Error: Build failed${NC}"
|
|
cat /tmp/videotools-build.log
|
|
rm -f /tmp/videotools-build.log
|
|
exit 1
|
|
fi
|
|
rm -f /tmp/videotools-build.log
|
|
|
|
# Determine installation path
|
|
echo ""
|
|
echo "Where would you like to install $BINARY_NAME?"
|
|
echo "1) System-wide (/usr/local/bin) - requires sudo"
|
|
echo "2) User-local (~/.local/bin) - no sudo needed"
|
|
read -p "Enter choice [1 or 2]: " choice
|
|
|
|
case $choice in
|
|
1)
|
|
INSTALL_PATH="$DEFAULT_INSTALL_PATH"
|
|
NEEDS_SUDO=true
|
|
;;
|
|
2)
|
|
INSTALL_PATH="$USER_INSTALL_PATH"
|
|
NEEDS_SUDO=false
|
|
# Create ~/.local/bin if it doesn't exist
|
|
mkdir -p "$INSTALL_PATH"
|
|
;;
|
|
*)
|
|
echo -e "${RED}Invalid choice. Exiting.${NC}"
|
|
rm -f "$BINARY_NAME"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Install the binary
|
|
echo ""
|
|
if [ "$NEEDS_SUDO" = true ]; then
|
|
sudo install -m 755 "$BINARY_NAME" "$INSTALL_PATH/$BINARY_NAME" > /dev/null 2>&1 &
|
|
INSTALL_PID=$!
|
|
spinner $INSTALL_PID "Installing $BINARY_NAME to $INSTALL_PATH"
|
|
|
|
if wait $INSTALL_PID; then
|
|
echo -e "${GREEN}✓${NC} Installation successful"
|
|
else
|
|
echo -e "${RED}Error: Installation failed${NC}"
|
|
rm -f "$BINARY_NAME"
|
|
exit 1
|
|
fi
|
|
else
|
|
install -m 755 "$BINARY_NAME" "$INSTALL_PATH/$BINARY_NAME" > /dev/null 2>&1 &
|
|
INSTALL_PID=$!
|
|
spinner $INSTALL_PID "Installing $BINARY_NAME to $INSTALL_PATH"
|
|
|
|
if wait $INSTALL_PID; then
|
|
echo -e "${GREEN}✓${NC} Installation successful"
|
|
else
|
|
echo -e "${RED}Error: Installation failed${NC}"
|
|
rm -f "$BINARY_NAME"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Clean up the local binary
|
|
rm -f "$BINARY_NAME"
|
|
|
|
# Check if install path is in PATH
|
|
echo ""
|
|
if [[ ":$PATH:" != *":$INSTALL_PATH:"* ]]; then
|
|
echo -e "${YELLOW}Warning: $INSTALL_PATH is not in your PATH${NC}"
|
|
echo "Add the following line to your ~/.bashrc or ~/.zshrc:"
|
|
echo ""
|
|
echo " export PATH=\"$INSTALL_PATH:\$PATH\""
|
|
echo ""
|
|
fi
|
|
|
|
echo "========================================="
|
|
echo -e "${GREEN}Installation complete!${NC}"
|
|
echo "========================================="
|
|
echo ""
|
|
echo "You can now run: $BINARY_NAME"
|
|
echo ""
|