#!/usr/bin/env bash
#
# Creates a summary of active torrents
#

main() {
  local rtorrent_session_dir=${1:-"${HOME}/.cache/rtorrent"} ; shift
  local max_count=${1:-3} ; shift
  local cap=${1:-40} ; shift

  local file target_dir chunks_wanted chunks_done chunks_total i

  for file in $(find "$rtorrent_session_dir" -name '*.rtorrent' | sed -nr 's/^(.*)\.rtorrent$/\0/p'); do
    target_dir=$(sed -nr 's/.*directory[0-9]+:(.*)7:hashing.*/\1/p' "$file")

    state=$(egrep -ro "statei([0-9]+)e13" "$file")
    state=${state##*i}
    state=${state%%e*}

    chunks_done=$(egrep -ro "chunks_donei([0-9]+)e13" "$file")
    chunks_wanted=$(egrep -ro "chunks_wantedi([0-9]+)e8" "$file")
    chunks_done=${chunks_done##*i}
    chunks_done=${chunks_done%%e*}
    chunks_wanted=${chunks_wanted##*i}
    chunks_wanted=${chunks_wanted%%e*}
    chunks_total=$(( chunks_done + chunks_wanted ))

    if (( $(sed -nr 's/.*statei([0-9]+)e13.*/\1/p' "$file") )); then
      [[ "$chunks_total" == "$chunks_wanted" ]] && [[ $chunks_done -eq 0 ]] && continue;

      num_files=$(( num_files + 1 ))
      label=$(echo "$target_dir" | sed -nr 's/\//\n/gp' | tail -1)

      if [[ ${#label} -gt $cap ]]; then
        label=${label:0:$cap}
        label="${label% *}..."
      fi

      echo "${label}:${chunks_total:-0}:${chunks_done:-0}:${chunks_wanted:-0}"

      i=$(( i + 1 ))

      [[ $i -ge $max_count ]] && break
    fi
  done
}

main "$@"