В помощь Анимешнику-линуксоиду (часть III)

Jan 16, 2010 20:13

Прошло совсем мало времени а я опять решил продолжить своё скрипто-писательство, всячески облегчающее жизнь рядовому анимешнику в его нелёгкой стезе освоения ОС GNU Linux.
В общем просесс кодинга для ROX (затронутых в предыдушем посте http://altutov.livejournal.com/18608.html) пошел у меня бурными темпами. Некоторы проги написаные раньше были улучшены: например добавлена опция сохранения найденных описаний искомого анимэ на диске, а при запуске без параметров автоматически запускался броузер с искомыми но не найденными фразами сразу на страничке google.com и добавлена возможность работы сразу с целым списком каталогов. Если кого заинтересует могу потом выложить листинги или готовый к скачиванию файл.

Но время не стоит на месте и я опять представляю новые воплоощения моих бредовых идей :-). Суть ее придется по душе анимэ-сериальщикам, а именно -предоставляет им возможноть мгновенно продолжить воспроизведение любых TV-серий, на следующей серии фильма одним лишь щелчком по иконке. К тому же скрипт запоминает и ведет базу данных для всех каталогов и проссматриваемых в них фильмах, а простым переносом любого каталого на иконку скрипта дает удобную возможность продолжить воспроизведение лежащего в кактклоге фильма и просммотра сразу множества сериалов одновременно, без запоминания на какой серии остановился в прошлом!

Весь крипт написан для обычного BASH`а:

#!/bin/bash
#Al. Tutov
#player Tv-serial

AppDir=$(dirname "$0")
##При запуске без параметров запускает следующий по порядку файл из директории
#в которой проигрывался предыдущий (т.е последний) файл
if [[ -z "$1" ]] #если хотя бы один параметр отстутсвует
 then
  FilmDir=$(dirname "`tail -n1 "$AppDir"/DB.txt`" ) #папка откуда игрался последний файл
  nom=$(ls "$FilmDir"/*.{mkv,MKV,avi,AVI,mpg,MPG,mp4,MP4} |wc -l) #счетчик видеофайлов
  for ((i=1;i<$nom+1;i++))
  do
  FilmName=$(cd "$FilmDir" && ls *.{mkv,MKV,avi,AVI,mpg,MPG,mp4,MP4} |sort -g |head -n "$i" |tail -n1)
  grep -q "$FilmDir" "$AppDir"/DB.txt |grep -q "$FilmName" "$AppDir"/DB.txt
  if [[ $? -eq 1 ]] #при отрицательном поиске в базе (т.е непросмотренной серии)
  then 
  echo "$FilmDir"/"$FilmName" >>"$AppDir"/DB.txt && exec mplayer "$FilmDir"/"$FilmName" && break #и проигрываем новый
  fi
  done
#При заданном аргументе (т.е папки) воспроизводит следующее по порядку
# и еще непроигранное видео
 else
  FilmDir=$(basename $1) #имя папки добавляемой к имени проигрываемых фильмов
  #для более точного поиска по базе данных DB.txt
  nom=$(cd "$1" && ls *.{mkv,MKV,avi,AVI,mpg,MPG,mp4,MP4} |wc -l) #счетчик видеофайлов  
  for ((i=1;i<$nom+1;i++))
  do 
  FilmName=$( cd "$1" && ls *.{mkv,MKV,avi,AVI,mpg,MPG,mp4,MP4} |sort -g |head -n "$i" |tail -n1)
  grep -q "$FilmDir" "$AppDir"/DB.txt | grep -q "$FilmName" "$AppDir"/DB.txt 
  if [[ $? -eq 1 ]] #при отрицательном поиске в базе (т.е непросмотренной серии)
  then 
  echo "$1"/"$FilmName" >>"$AppDir"/DB.txt && exec mplayer "$1"/"$FilmName" && break 
  #сохраняем url папки и название файла и возпроизводим файл
  fi
  done
fi
exit

Сам ROX-скрипт весьма прост и понятен даже для только начавших осваивать shell-программирование, а так же практически без переделок может работать  слюбым shell`ом (хотя с GUI и под ROX-filer`ом работать намного удобнее). В принципе пожертвовав читабельностью можно его немного сократить подобавляв несколько переменных или подпрограмм и т.п, но для меня не профессионального программиста это не столь принципиально. В дальнейшем планирую добавить в него кучу опций таких как например архивирование скрытого от глаз пользователя базы проссмотренных фильмов. Можно также добавить различных графических диалогов (благо простых средств предостаточно xdialog/Tcl-Tk и т.п), которые интерактивно распрашивали бы действия от пользователя (определение режима между предустановок плейера или возможность выбора между воспроизведением новой серии и возможностью доссмотреть предыдуще уже проссмотренной серии фильма и т.п.).

При тестировании скрипта, как всегда не обошлось и без ошибок. Например пока, еще не нашел возможности устранить баги при работе с файлами содержащих квадратные скобки (хотя путей и папок это не каснулось). Возможно все связано с работой многих системных утилит PuppyRus, большинство из которых являются обычными ссылками на busybox и предоставляющие не всегда полноценные возможности для таких утилит как sort и т.п.  
В общем работенки на будущую отладку и реализцию вполне хватает, а значит  буду продолжать самосовершенствоваться на данном поприще :-))))

P.S. Если кто имеет какие нибудь соображения, интересные идеи/мысли по автоматизации повседневной рутины или даже критику с радостью их выслушаю и попытаюсь реализовать.

linux, bash, anime

Previous post Next post
Up