#!/bin/bash # ๐Ÿงน XMPP Client Cache Cleaner for Upload Issues # Fixes Dino and Gajim upload problems after restart # Date: August 26, 2025 set -euo pipefail # Colors GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' RED='\033[0;31m' NC='\033[0m' echo -e "${BLUE}๐Ÿงน XMPP CLIENT CACHE CLEANER${NC}" echo "==============================" echo "Fixing Dino and Gajim upload issues after restart" echo "" # Function to safely stop processes stop_process() { local process_name="$1" echo -e "${YELLOW}๐Ÿ›‘ Stopping $process_name...${NC}" if pgrep -f "$process_name" >/dev/null; then pkill -f "$process_name" sleep 2 # Force kill if still running if pgrep -f "$process_name" >/dev/null; then pkill -9 -f "$process_name" 2>/dev/null || true sleep 1 fi if ! pgrep -f "$process_name" >/dev/null; then echo -e "${GREEN}โœ… $process_name stopped${NC}" else echo -e "${RED}โš ๏ธ $process_name may still be running${NC}" fi else echo -e "${GREEN}โœ… $process_name not running${NC}" fi } # Function to clear cache directory clear_cache() { local app_name="$1" local cache_dir="$2" if [ -d "$cache_dir" ]; then echo -e "${YELLOW}๐Ÿ—‘๏ธ Clearing $app_name cache: $cache_dir${NC}" rm -rf "$cache_dir" 2>/dev/null || true echo -e "${GREEN}โœ… $app_name cache cleared${NC}" else echo -e "${BLUE}โ„น๏ธ $app_name cache not found: $cache_dir${NC}" fi } # Function to clear upload-related files clear_upload_files() { local app_name="$1" local data_dir="$2" if [ -d "$data_dir" ]; then echo -e "${YELLOW}๐Ÿ” Clearing $app_name upload-related files...${NC}" # Find and remove upload/token related files local files_removed=0 for pattern in "*upload*" "*token*" "*session*" "*cache*"; do while IFS= read -r -d '' file; do rm -f "$file" 2>/dev/null && ((files_removed++)) || true done < <(find "$data_dir" -name "$pattern" -type f -print0 2>/dev/null || true) done if [ $files_removed -gt 0 ]; then echo -e "${GREEN}โœ… Removed $files_removed upload-related files from $app_name${NC}" else echo -e "${BLUE}โ„น๏ธ No upload-related files found in $app_name${NC}" fi else echo -e "${BLUE}โ„น๏ธ $app_name data directory not found: $data_dir${NC}" fi } # Function to backup data (optional) backup_data() { local app_name="$1" local data_dir="$2" local backup_dir="${data_dir}.backup.$(date +%Y%m%d_%H%M%S)" if [ -d "$data_dir" ]; then echo -e "${YELLOW}๐Ÿ’พ Creating backup of $app_name data...${NC}" if cp -r "$data_dir" "$backup_dir" 2>/dev/null; then echo -e "${GREEN}โœ… Backup created: $backup_dir${NC}" else echo -e "${RED}โš ๏ธ Failed to create backup for $app_name${NC}" fi fi } # Main execution echo -e "${BLUE}Step 1: Stopping XMPP clients${NC}" echo "-----------------------------" stop_process "dino" stop_process "gajim" echo "" echo -e "${BLUE}Step 2: Creating backups (optional)${NC}" echo "-----------------------------------" if [ "${1:-}" = "--backup" ]; then backup_data "Dino" "$HOME/.local/share/dino" backup_data "Gajim" "$HOME/.local/share/gajim" else echo -e "${YELLOW}โ„น๏ธ Skipping backups (use --backup flag to create backups)${NC}" fi echo "" echo -e "${BLUE}Step 3: Clearing caches${NC}" echo "---------------------" clear_cache "Dino" "$HOME/.cache/dino" clear_cache "Gajim" "$HOME/.cache/gajim" echo "" echo -e "${BLUE}Step 4: Clearing upload-related files${NC}" echo "------------------------------------" clear_upload_files "Dino" "$HOME/.local/share/dino" clear_upload_files "Gajim" "$HOME/.local/share/gajim" echo "" echo -e "${BLUE}Step 5: Restarting XMPP clients${NC}" echo "------------------------------" # Check if display is available if [ -z "${DISPLAY:-}" ]; then echo -e "${RED}โš ๏ธ No DISPLAY environment variable - cannot start GUI clients${NC}" echo "Please manually start Dino and Gajim after setting DISPLAY" else echo -e "${YELLOW}๐Ÿš€ Starting Dino...${NC}" if command -v dino >/dev/null 2>&1; then dino & echo -e "${GREEN}โœ… Dino started${NC}" else echo -e "${RED}โŒ Dino not found in PATH${NC}" fi echo -e "${YELLOW}๐Ÿš€ Starting Gajim...${NC}" if command -v gajim >/dev/null 2>&1; then gajim & echo -e "${GREEN}โœ… Gajim started${NC}" else echo -e "${RED}โŒ Gajim not found in PATH${NC}" fi fi echo "" echo -e "${GREEN}๐ŸŽ‰ CLEANUP COMPLETE!${NC}" echo "===================" echo "" echo -e "${GREEN}โœ… What was done:${NC}" echo " โ€ข Stopped Dino and Gajim processes" echo " โ€ข Cleared application caches" echo " โ€ข Removed upload/token related files" echo " โ€ข Restarted XMPP clients" echo "" echo -e "${BLUE}๐Ÿงช Next steps:${NC}" echo " 1. Wait for clients to fully load" echo " 2. Try uploading a small file in both clients" echo " 3. Upload should work with fresh authentication" echo "" echo -e "${YELLOW}๐Ÿ“‹ If upload still fails:${NC}" echo " โ€ข Check server logs: tail -f /var/log/hmac-file-server-mobile.log" echo " โ€ข Use enhanced server: ./hmac-file-server-desktop-fixed -config config-mobile-resilient.toml" echo " โ€ข Check network configuration with: ip addr show" echo "" echo "Cache cleanup completed at $(date)"