93 lines
2.6 KiB
Bash
Executable File
93 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# ocr_rofi.sh - Search OCR'd screenshots with rofi
|
|
# This script displays OCR data from SQLite and allows opening files with rofi
|
|
|
|
# Database path
|
|
DB_PATH="${XDG_DATA_HOME:-$HOME/.local/share}/screenshot-gallery/screenshot_ocr.db"
|
|
SCREENSHOTS_DIR="$HOME/Screenshots"
|
|
MAX_TEXT_LENGTH=100
|
|
|
|
# Check dependencies
|
|
if ! command -v rofi &> /dev/null; then
|
|
echo "Error: rofi is not installed. Please install it with: sudo pacman -S rofi"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v sqlite3 &> /dev/null; then
|
|
echo "Error: sqlite3 is not installed. Please install it with: sudo pacman -S sqlite"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$DB_PATH" ]; then
|
|
echo "Error: Database not found at $DB_PATH"
|
|
echo "Run the OCR script first to create and populate the database."
|
|
exit 1
|
|
fi
|
|
|
|
# Create temporary files
|
|
ENTRIES_FILE=$(mktemp)
|
|
PATHS_FILE=$(mktemp)
|
|
trap "rm -f $ENTRIES_FILE $PATHS_FILE" EXIT
|
|
|
|
# Query the database and format for rofi
|
|
echo "Preparing OCR data for search..."
|
|
sqlite3 -separator "|" "$DB_PATH" "SELECT filename, ocr_text, full_path FROM ocr_results ORDER BY filename" | while IFS="|" read -r filename ocr_text path; do
|
|
# Clean up text (remove newlines, limit length)
|
|
clean_text=$(echo "$ocr_text" | tr '\n' ' ' | tr -s ' ')
|
|
if [ ${#clean_text} -gt $MAX_TEXT_LENGTH ]; then
|
|
clean_text="${clean_text:0:$MAX_TEXT_LENGTH}..."
|
|
fi
|
|
|
|
# Save formatted entry for rofi
|
|
echo "$filename | $clean_text" >> "$ENTRIES_FILE"
|
|
|
|
# Save path in corresponding line
|
|
echo "$path" >> "$PATHS_FILE"
|
|
done
|
|
|
|
# Count entries
|
|
entry_count=$(wc -l < "$ENTRIES_FILE")
|
|
if [ "$entry_count" -eq 0 ]; then
|
|
echo "No OCR data found in database. Run ocr_screenshots.py first."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Found $entry_count screenshots with OCR data."
|
|
|
|
# Display rofi menu
|
|
selected_line=$(cat "$ENTRIES_FILE" | rofi -dmenu -i -p "Screenshot OCR" \
|
|
-width 80 -lines 15 -font "mono 10")
|
|
|
|
# Exit if no selection
|
|
if [ -z "$selected_line" ]; then
|
|
echo "No selection made."
|
|
exit 0
|
|
fi
|
|
|
|
# Get filename from selection
|
|
selected_filename=$(echo "$selected_line" | cut -d '|' -f 1 | sed 's/ *$//')
|
|
|
|
# Find corresponding line number
|
|
line_num=1
|
|
while IFS= read -r line; do
|
|
if [[ "$line" == "$selected_filename"* ]]; then
|
|
break
|
|
fi
|
|
line_num=$((line_num + 1))
|
|
done < "$ENTRIES_FILE"
|
|
|
|
# Get full path from paths file
|
|
selected_path=$(sed "${line_num}q;d" "$PATHS_FILE")
|
|
|
|
# Open the file
|
|
if [ -n "$selected_path" ] && [ -f "$selected_path" ]; then
|
|
echo "Opening: $selected_path"
|
|
xdg-open "$selected_path" &
|
|
else
|
|
echo "Error: Could not find file: $selected_path"
|
|
exit 1
|
|
fi
|
|
|
|
exit 0
|