CDPlay

Uff… Těžko shrnout, co vše se u mě (nyní již u „nás“) vše změnilo. Shrnu to tedy do bodů:

  • Fotovoltaická elektrárna na střeše (napíšu později)
  • Nová okna v pracovně (stará byla vybourána, nová nainstalována – opět popíšu v dalším článku)
  • Předělaná elektrika a hlavní jistič
  • Nová práce

Toto všechno bylo poměrně náročné. Ale zrovna tento článek bude o něčem trochu jiném: malém skriptíku jménem CDplay, který jsem napsal pro svou ženu.

Máme sice televizi, ale jen v obyváku. Stará, žravá CTR ludra v obyváku. V kuchyni, kde má nádherná žena tráví asi nejvíc času (mimo pracovnu), bohužel televize není. A ačkoli máme funkční TV tuner, tak ani ten nepomůže — ačkoli máme Hády asi 4 km daleko, jsou za kopcem a není zde žádný signál — kabelová televize, která v Bílovicích funguje, je tak jedinou možností k připojení k běžné televizi. Než ovšem probourám zdi tak, abych do kuchyne dotáhl koax (anténu), tak máme jen jedinou možnost: CD/DVD (sitové úložiště sice mám, ale Synology mi vyhořel, takže čekám na reklamaci). Jak vidíte, jediná možnost je nyní jen CD/DVD.

A protože v kuchyni je starý notebook T41 k tomuto určený, rozhodl jsem se, že vše bude lehké: Mageia s LXDE a mplayer. Problem trochu je, jak bude má žena ovládat mplayer. Rozhodl jsem se jí to trochu ulechčit a napsal jsem jí CDplay.

  • Připojí CD/DVD do /mnt (potřebuje k tomu sudo!)
  • V případě, že je na CD/DVD více adresářů, dá vybrat ten vhodný (potrebuje Xdialog)
  • Dá vybrat, které souboru přehrát (potrebuje Xdialog)
  • Spustí mplayer

Funkce CDplay skriptu:

help-fnc

  1. function help-fnc() {
  2. echo -e "Plays CD/DVD videos.
  3. Usage: CDplay"
  4. }

Vypíše nápovědu

xdialog-check (napsaný pro RPM-distro)

  1. function xdialog-check() {
  2. if [[ ! `rpm -q xdialog` ]]; then
  3. echo "Xdialog not found, please install it"
  4. exit 1
  5. else
  6. echo "Xdialog: OK"
  7. return 0
  8. fi
  9. }

Překontroluje, jestli je na systému RPM s xdialogem…

mount-check

  1. function mount-check() {
  2. if ( mountpoint -qd /dev/cdrom ); then
  3. echo "CD/DVD already mounted"
  4. else
  5. sudo mount /dev/sr0 /mnt 2> /dev/null
  6. if [ $? = 0 ]; then
  7. echo "Mount: OK"
  8. else
  9.  
  10. echo "Problems with mounting, contact yours sysadmin"
  11. exit 1
  12. fi
  13. fi
  14. }

Překontroluje, jestli je připojeno CD/DVD. Pokud není, pokusí se jej připojit.

checks-fnc

  1. function checks-fnc() {
  2. xdialog-check
  3. mount-check
  4. }
Spouští jen oba výše zmíněné kontroly.

get-files

  1. function get-files() {
  2. echo -e `ls -1 $1 \
  3. | tr -d '*' \
  4. | sed 's/\(.*\)/"\1"/g' | sed 's/.*/& & off/' \
  5. | xargs Xdialog --stdout --checklist "Choose yours item" 40 120 0` \
  6. | tr '\/' '\n'
  7. }
V adresáři předaném jako parametr vytvoří seznam souborů pro checklist v Xdialogu. Prvně se vypíše seznam souborů, ten se upraví tak, aby jej Xdialog akceptoval a pošle do Xdialogu. Vrací seznam vybraných souborů.

get-wdir

  1. function get-wdir() {
  2. if [ `find /mnt -type d | wc -l` -gt 1 ]; then
  3. Xdialog --stdout --no-buttons --dselect /mnt 0 0
  4. else
  5. echo '/mnt'
  6. fi
  7. }
Pokud v /mnt existují podadresáře, dá vybrat případný pracovní podadresář. Jinak definuje pracovní adresář jako /mnt.

Výkonná část skriptu

  1. if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then help-fnc; exit; fi
  2. checks-fnc
  3. WDIR="`get-wdir`"
  4. pushd "$WDIR" 1> /dev/null
  5. get-files | while read LINE;
  6. do
  7. mplayer -noconsolecontrols -fs -cache 8192 "$LINE"
  8. done
  9. popd 1>/dev/null

Řádky:

  1.  Pokud je předán parametr -h, vypíše nápovědu.
  2. Spustí obě kontroly
  3. Nastaví do proměnné WDIR adresář, ve kterém mají být přehrávané soubory
  4. Změní adresář na WDIR
  5. Pomocí funkce get-files se vypíší soubory a postulně se ukládají do proměnné LINE tak aby
  6. se mohly ty soubory postupne předávat
  7. mplayeru. Je nutné použít parametr -noconsolecontrols, jinak je přehrávání zpauzované a přehraje se pouze jeden soubor…
  8. Konec smyčky
  9. Vrátí řízení zpět do předešlého adresáře

Celý skript by se snad mohl někomu i hodit. Proto…

  1. #!/bin/bash
  2.  
  3. function help-fnc() {
  4. echo -e "Plays CD/DVD videos.
  5. Usage: CDplay
  6. "
  7. }
  8.  
  9. function xdialog-check() {
  10. if [[ ! `rpm -q xdialog` ]]; then
  11. echo "Xdialog not found, please install it"
  12. exit 1
  13. else
  14. echo "Xdialog: OK"
  15. return 0
  16. fi
  17. }
  18.  
  19. function mount-check() {
  20. if ( mountpoint -qd /dev/cdrom ); then
  21. echo "CD/DVD already mounted"
  22. else
  23. sudo mount /dev/sr0 /mnt 2> /dev/null
  24. if [ $? = 0 ]; then
  25. echo "Mount: OK"
  26. else
  27. echo "Problems with mounting, contact yours sysadmin"
  28. exit 1
  29. fi
  30. fi
  31. }
  32.  
  33. function checks-fnc() {
  34. xdialog-check
  35. mount-check
  36. }
  37.  
  38. function get-files() {
  39. echo -e `ls -1 $1 \
  40. | tr -d '*' \
  41. | sed 's/\(.*\)/"\1"/g' | sed 's/.*/& & off/' \
  42. | xargs Xdialog --stdout --checklist "Choose yours item" 40 120 0` \
  43. | tr '\/' '\n'
  44. }
  45.  
  46. function get-wdir() {
  47. if [ `find /mnt -type d | wc -l` -gt 1 ]; then
  48. Xdialog --stdout --no-buttons --dselect /mnt 0 0
  49. else
  50. echo '/mnt'
  51. fi
  52. }
  53.  
  54. if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then help-fnc; exit; fi
  55. checks-fnc
  56. WDIR="`get-wdir`"
  57.  
  58. pushd "$WDIR" 1> /dev/null
  59. get-files | while read LINE;
  60. do
  61. mplayer -noconsolecontrols -fs -cache 8192 "$LINE"
  62. done
  63. popd 1>/dev/null

1 komentář u „CDPlay“

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *