Прошло совсем мало времени а я опять решил продолжить своё скрипто-писательство, всячески облегчающее жизнь рядовому анимешнику в его нелёгкой стезе освоения ОС 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. Если кто имеет какие нибудь соображения, интересные идеи/мысли по автоматизации повседневной рутины или даже критику с радостью их выслушаю и попытаюсь реализовать.