Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
synapsenstau
- Beiträge: 172
- Registriert: 08.10.2013 09:56:34
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Südharz
Beitrag
von synapsenstau » 27.02.2014 18:37:08
Hi,
ich habe hier dieses Script im Netz gefunden:
Code: Alles auswählen
#!/bin/sh
# This script tells about song played in amarok2
message="/me is listening silence now"
nowPlaying="$(qdbus org.kde.amarok /Player org.freedesktop.MediaPlayer.GetMetadata 2>/dev/null)"
if [ -n "${nowPlaying}" ]
then
title="$(echo "${nowPlaying}" | sed -ne 's/^title: \(.*\)$/\1/p')"
artist="$(echo "${nowPlaying}" | sed -ne 's/^artist: \(.*\)$/\1/p')"
message="/me is listening now: ${artist} - ${title}"
fi
echo "${message}"
welches auch soweit funktioniert. Ich wollte es aber ein wenig an meine Bedürfnisse anpassen. Ich habe herausgefunden, das man mit qbus mehr erfahren kann:
Code: Alles auswählen
xx@xx:~$ qdbus org.kde.amarok /Player org.freedesktop.MediaPlayer.GetMetadata
album: Goa Beach Vol. 22 WEB
albumartist: Various Artists
artist: Avshi
arturl: file:///media/fs/av/audio/goa/2014/sampler/VA_-_Goa_Beach_Vol._22-YSE324DCD-WEB-2014-FYM/00-va_-_goa_beach_vol._22-yse324dcd-web-2014-fym.jpg
audio-bitrate: 320
audio-samplerate: 44100
comment: FYM WAS HERE
genre: Psychedelic
location: file:///media/fs/av/audio/goa/2014/sampler/VA_-_Goa_Beach_Vol._22-YSE324DCD-WEB-2014-FYM/04-avshi_-_lost_in_trancelation-fym.mp3
mtime: 473000
rating: 0
time: 473
title: Lost in Trancelation
tracknumber: 4
year: 2014
Ich hätte nun noch gerne das Verzeichnis (VA_-_Goa_Beach_Vol._22-YSE324DCD-WEB-2014-FYM) und den Dateinamen (04-avshi_-_lost_in_trancelation-fym.mp3) je in einer Variable. Leider ist das Problem dabei, das ich mit "sed" nicht zurechtkomme
und wie ich
location: file:///media/fs/av/audio/goa/2014/sampler/VA_-_Goa_Beach_Vol._22-YSE324DCD-WEB-2014-FYM/04-avshi_-_lost_in_trancelation-fym.mp3
zerteile.
Habe jetzt schon mehrere Wiki's/Howto's und immer noch nicht begriffen, wie ich die info da "extrahieren" kann.
Vielleicht kann mir ja jemand mit netterweise einen Tip geben
Grüße Syn
Zuletzt geändert von
synapsenstau am 27.02.2014 20:23:01, insgesamt 1-mal geändert.
..::: Intel® Core™ i5-6600 :::..::: 16 GB Ram :::..
..::: 1 TB Nvme :::..::: 1 TB SSD :::..::: NVIDIA GeForce GTX 1070 :::.
-
newdeb
- Beiträge: 134
- Registriert: 03.02.2011 11:11:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Frankfurt
Beitrag
von newdeb » 27.02.2014 20:03:37
Dafür genügt Parameter-Expansion:
Code: Alles auswählen
VAR1="... hier steht die location - Zeile ..."
VAR2=${VAR1##*/}
VAR3=${VAR1%/$VAR2}
VAR4=${VAR3##*/}
VAR2 und VAR4 enthalten das Gewünschte.
-
synapsenstau
- Beiträge: 172
- Registriert: 08.10.2013 09:56:34
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Südharz
Beitrag
von synapsenstau » 27.02.2014 20:22:26
Habe gerade an anderer stelle diese Lösung gekriegt, die mir das liefert was ich brauche:
Dateiname:
Verzeichniss:
Ist dann halt nur "awk" und nicht "sed"....
Danke für deine mühen
..::: Intel® Core™ i5-6600 :::..::: 16 GB Ram :::..
..::: 1 TB Nvme :::..::: 1 TB SSD :::..::: NVIDIA GeForce GTX 1070 :::.
-
NearlyRandom
- Beiträge: 23
- Registriert: 22.09.2012 00:49:42
Beitrag
von NearlyRandom » 27.02.2014 22:40:19
hatte vor 2 Jahre mal was ähnliches für den VLC geskriptet. Ist ja beides MPRIS.
ist alter Code, würde ich heute anders schreiben, muss sicher auch angepasst werden.
License: GPLv3+
Code: Alles auswählen
#!/bin/bash
# by 51 - 2012.05.18, 2012.06.08, 2012.06.17
# dependencies: mdbus2
# Licence : GPL v3
### -- to configure: -- ###
### at [ Settings / All / Interface / Control Interface ] tick [ "D-Bus control Interface" ] ###
process="$(ps -eF | grep -E '( vlc | vlc$)' | grep -v grep | grep -v "$(echo $0 | sed 's/\.\///g')")"
HELP()
{
echo -e\
exit 0
}
# yet unused
GETOPT()
{
if [ "$param" == "$@" ]; then param="$(echo "$@" | sed 's/^ *'"$1"'\(.*\)$/\1/' 2>/dev/null)"; fi
if [ ! "$(echo "$param" | sed 's/^.*-'"$opt"'.*$//' 2>/dev/null)" ]; then
next="$(echo "$param" | sed 's/^.*-'"$opt"'\(.\).*$/\1/' 2>/dev/null)"
ex="$(echo "$param" | sed 's/^.*-'"$opt"'.\(.*$\)/\1/;s/^\([^'"$next"']*\)'"$next"'.*$/\1/' 2>/dev/null)"
param="$(echo "$param" | sed 's/\(^.*-'"$opt"'\).'"$ex"'\(.*$\)/\1\2/;s/\(^.*-'"$opt"'\).\(.*$\)/\1\2/;s/\(^.*\)-'"$opt"'\(.*$\)/\1\2/' 2>/dev/null)"
next=""; opt=""
fi
}
DBUS()
{
path="$(echo $metadata | grep \"location\" | sed 's|^.*location": "file://\([^"]*\)".*$|\1|' | echo -e $(sed 's/%/\\\x/g'))"
seconds="$(echo "$metadata" | grep \"time\" | sed 's|^.*"time": \(.*\)$|\1|;s|^\([^,]*\)*,.*$|\1|')"
imgpath="$(echo "$metadata" | grep \"arturl\" | sed 's|^.*arturl": "file://\(.*\).*$|\1|;s|".*$||' | echo -e $(sed 's/%/\\\x/g') | sed '/^$/d')"
artist="$(echo "$metadata" | grep \"artist\" | sed 's|^.*artist": "\(.*\).*$|\1|;s|".*$||')"
album="$(echo "$metadata" | grep \"album\" | sed 's|^.*album": "\(.*\).*$|\1|;s|".*$||')"
title="$(echo "$metadata" | grep \"title\" | sed 's|^.*title": "\(.*\).*$|\1|;s|".*$||')"
genre="$(echo "$metadata" | grep \"genre\" | sed 's|^.*genre": "\(.*\).*$|\1|;s|".*$||')"
tracknumber="$(echo "$metadata" | grep \"tracknumber\" | sed 's|^.*tracknumber": "\(.*\).*$|\1|;s|".*$||')"
year="$(echo "$metadata" | grep \"date\" | sed 's|^.*date": "\(.*\).*$|\1|;s|".*$||')"
encoder="$(echo "$metadata" | grep \"encodedby\" | sed 's|^.*encodedby": "\(.*\).*$|\1|;s|".*$||')"
position="$(mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.PositionGet 2>/dev/null | echo $(sed 's/( //;s/ )//')/1000 | bc)"
volumeget="$(mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.VolumeGet | sed 's/( //;s/ )//')"
vlcversion="$(mdbus2 org.mpris.vlc / org.freedesktop.MediaPlayer.Identity | sed 's/( "vlc //;s/" )//')"
playlistlength="$(mdbus2 org.mpris.vlc /TrackList org.freedesktop.MediaPlayer.GetLength | sed 's/( //;s/ )//')"
playlistnumber="$(mdbus2 org.mpris.vlc /TrackList org.freedesktop.MediaPlayer.GetCurrentTrack | sed 's/( //;s/ )//')"
}
VolumeSet()
{
vol=""
if [ ! "$(echo "$2" | sed 's/^$/<abc>/;s/^[[:digit:]]*$//')" ]; then vol="$(printf "%01d" "$(echo $2)")"; else exit 1; fi
p="\<$vol\>"
# VLC zeigt das 4x-fache an
if [[ $(echo {0..100}) =~ $p ]]; then mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.VolumeSet $vol >/dev/null; else exit 1; fi
exit 0
}
PositionSet()
{
# Test ob Zahl vorliegt
if [[ "$(echo "$2" | grep [[:digit:]])" ]]; then positionset="$(printf "%01d" "$(echo $2)")"; else exit 1; fi
# Test ob gueltige Positionsangabe
if [ ! 0 -le "$positionset" ]; then exit 1; fi
if [ ! "$positionset" -le "$seconds" ]; then exit 1; fi
mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.PositionSet "$(echo $(echo $positionset)*1000 | bc)" >/dev/null
exit 0
}
Duration()
{
minutes="$(printf "%02d" $(echo $seconds/60 | bc))"
fractsec="$(printf "%02d" $(echo $seconds-$minutes*60 | bc))"
hours="$(printf "%02d" $(echo $minutes/60 | bc))"
fractmin="$(printf "%02d" $(echo $minutes-$hours*60 | bc))"
duration="$(echo $hours:$fractmin:$fractsec | sed ':b;s/^0*://;tb;s/^00$//')"
seconds="$(printf "%01d" $seconds)"
minutes="$(printf "%01d" $minutes)"
hours="$(printf "%01d" $hours)"
}
AddTrack()
{
if [ ! -f "$2" ]; then exit 1; fi
mdbus2 org.mpris.vlc /TrackList org.freedesktop.MediaPlayer.AddTrack file://"$2" $switch >/dev/null
exit 0
}
#DelTrack()
#{
#if [ ! -f "$2" ]; then exit 1; else echo yay; fi
#mdbus2 org.mpris.vlc /TrackList org.freedesktop.MediaPlayer.DelTrack file://"$2"
#exit 0
#}
ConkyPicture()
{
### Pfad zum Alternativbild für Conky (wird übermittelt wenn VLC nicht läuft) ###
aimgpath=""
### Pfad zum Alternativbild für Conky (wird übermittelt wenn kein Cover gefunden wurde) ###
nimgpath=""
if [ "$vlc" == "notrun" ]; then imgpath="$aimgpath"; fi
if [ "$vlc" == "running" ]; then if [ ! "$imgpath" ]; then imgpath="$nimgpath"; fi; fi
if [ "$imgpath" ]
then options="$(echo $@ | sed 's/'"$1"' *//')"
if [ ! "$options" ]; then options="$(echo " }")"; else options="$(echo -e \ $options\ })"; fi
cimgpath="$(echo "$(echo \"$imgpath\" | sed 's/^/\$\{image /')"$options | sed 'N;s/\n//')"
else cimgpath=""
fi
}
Conkysetnocovpic()
{
if [ ! -z "$2" ]
then sed -e 's/^\(nimgpath="\)[^"]*"\(.*\)$/\1'"$(echo $2 | sed 's/\//\\\//g;s/&/\\\&/g;s/#/\\\#/g;s/\$\([^ ]\)/\\\$\1/g;s/ /\\\ /g')"'"\2/' $0 > .$0; rm $0; mv .$0 $0; chmod +rwx $0; echo Der Dateipfad des No-Cover-Found-Bildes fuer Conky wurde gespeichert.
else sed -e 's/^\(nimgpath="\)[^"]*"\(.*\)$/\1"\2/' $0 > .$0; rm $0; mv .$0 $0; chmod +rwx $0; echo Der Dateipfad des No-Cover-Found-Bildes fuer Conky wurde resettet.
fi; exit 0
}
Conkysetaltpic()
{
if [ ! -z "$2" ]
then sed -e 's/^\(aimgpath="\)[^"]*"\(.*\)$/\1'"$(echo $2 | sed 's/\//\\\//g;s/&/\\\&/g;s/#/\\\#/g;s/\$\([^ ]\)/\\\$\1/g;s/ /\\\ /g')"'"\2/' $0 > .$0; rm $0; mv .$0 $0; chmod +rwx $0; echo Der Dateipfad des Alternativbildes fuer Conky wurde gespeichert.
else sed -e 's/^\(aimgpath="\)[^"]*"\(.*\)$/\1"\2/' $0 > .$0; rm $0; mv .$0 $0; chmod +rwx $0; echo Der Dateipfad des Alternativbildes fuer Conky wurde resettet.
fi; exit 0
}
Play()
{
case "$(mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.GetStatus | sed 's/^[^,]*\(.\),[^,]*,[^,]*,[^,]*$/\1/')" in
"0") if [ "$play" == "off" ]; then mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.Pause >/dev/null; fi;;
"1") if [ "$play" == "on" ]; then mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.Pause >/dev/null; fi;;
"2") if [ "$play" == "on" ]; then mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.Play >/dev/null; fi
# kurzer Start mit darauf folgendem Pausieren
if [ "$play" == "off" ]; then mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.Play >/dev/null; mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.Pause >/dev/null; fi;;
esac
exit 0
}
TrackList()
{
tracklist=1
if [ "$3" ]; then param="$(echo "$3" | sed 's/^-\(-.*\)$/\1/;s/^-\(.\)\(.*\)$/-\u\1\L\2/')"; else exit 1; fi
if [[ "$(echo "$2" | grep [[:digit:]] | grep -v [[:alpha:]])" ]]; then track="$(printf "%01d" "$(echo $2)")"; else exit 1; fi
metadata="$(mdbus2 org.mpris.vlc /TrackList org.freedesktop.MediaPlayer.GetMetadata $track)"
DBUS $@; Player $@
}
Player()
{
case $param in
"-Path") echo "$path"; exit 0;;
"-Seconds") echo $seconds; exit 0;;
"-Minutes") Duration; echo $minutes; exit 0;;
"-Hours") Duration; echo $hours; exit 0;;
"-Duration") Duration; echo $duration; exit 0;;
"-Picture") echo $imgpath; exit 0;;
"-Artist") echo $artist; exit 0;;
"-Album") echo $album; exit 0;;
"-Title") echo $title; exit 0;;
"-Genre") echo $genre; exit 0;;
"-Tracknumber") echo $tracknumber; exit 0;;
"-Year") echo $year; exit 0;;
"-Encoder") echo $encoder; exit 0;;
esac
if [ "$tracklist" == 1 ]; then exit 1; fi
case $param in
"-File") process="$(echo "$process" | sed 's/^[^/]*$//g')"; echo "${process##*/}"; exit 0;;
"-Files") echo "$process" | sed 's/^[^/]*$//g;s/^.*\/\([^/]*\)$/\1/g;/^$/d'; exit 0;;
"-Conkypicture") vlc=running; ConkyPicture $@; echo $cimgpath; exit 0;;
"-Conkysetaltpic") Conkysetaltpic;;
"-Volumeget") echo $volumeget; exit 0;;
"-Volumeset") VolumeSet $@;;
"-Positionget") echo $position; exit 0;;
"-Positionset") PositionSet $@;;
"-Addtrack") switch=0; AddTrack $@;;
"-Addtrackswitch") switch=1; AddTrack $@;;
#"-Deltrack") DelTrack $@;;
"-Playlistlength") echo $playlistlength; exit 0;;
"-Playlistnumber") echo $playlistnumber; exit 0;;
"-Play") play=on; Play;;
"-Pause") play=off; Play;;
"-Stop") mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.Stop >/dev/null; exit 0;;
"-Previous") mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.Prev >/dev/null; exit 0;;
"-Prev") mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.Prev >/dev/null; exit 0;;
"-Next") mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.Next >/dev/null; exit 0;;
"-Loopon") mdbus2 org.mpris.vlc /TrackList org.freedesktop.MediaPlayer.SetLoop 1 >/dev/null; exit 0;;
"-Loopoff") mdbus2 org.mpris.vlc /TrackList org.freedesktop.MediaPlayer.SetLoop 0 >/dev/null; exit 0;;
"-Trackloopon") mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.Repeat 1 >/dev/null; exit 0;;
"-Trackloopoff") mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.Repeat 0 >/dev/null; exit 0;;
"-Randomon") mdbus2 org.mpris.vlc /TrackList org.freedesktop.MediaPlayer.SetRandom 1 >/dev/null; exit 0;;
"-Randomoff") mdbus2 org.mpris.vlc /TrackList org.freedesktop.MediaPlayer.SetRandom 0 >/dev/null; exit 0;;
"-Vlcversion") echo $vlcversion; exit 0;;
"-Vlcclose") mdbus2 org.mpris.vlc / org.freedesktop.MediaPlayer.Quit >/dev/null; exit 0;;
"-Help") HELP;;
"-H") HELP;;
*) echo "incorrect parameters"; exit 1;;
esac
}
Choice()
{
tracklist=0
# Test if vlc is running
if [ "$process" ]
then
if [ "$param" == "-Track" ]; then TrackList $@; exit 0; fi
metadata="$(mdbus2 org.mpris.vlc /Player org.freedesktop.MediaPlayer.GetMetadata 2>/dev/null)"
DBUS $@; Player $@
else
### Option --quiet / -q stellt Meldung ab
if [ ! "$(echo "$@" | sed 's/^.* --quiet .*$//;s/^.* --quiet$//' 2>/dev/null)" ]; then exit 0; fi
if [ ! "$(echo "$@" | sed 's/^.* -q .*$//;s/^.* -q$//' 2>/dev/null)" ]; then exit 0; fi
case $param in
# Setze Alternativbild, wenn VLC nicht laeuft
"-Conkypicture") vlc=notrun; ConkyPicture $@ echo $cimgpath; exit 0;;
"-Conkysetaltpic") Conkysetaltpic $@;;
"-Conkysetnocovpic") Conkysetnocovpic $@;;
"-Help") HELP;;
"-H") HELP;;
*) echo "VLC is not running"; exit 0;;
esac
fi
}
# leicht abweichende Parameter erlauben (-File; --File; -file; --file; --FiLE) ==> (-File)
param="$(echo "$1" | sed 's/^-\(-.*\)$/\1/;s/^-\(.\)\(.*\)$/-\u\1\L\2/')"
Choice $@
# exit 1 ist Standard
# wenn das Skript bis hierher laeuft, ist irgendetwas faul ==> Methode checken
#METHODCHECK
exit 1
########################
##### #####
##### TODO #####
##### #####
########################
### Konfigurationsdatei des VLC-Players
### $HOME/.config/vlc/vlcrc
### Fake-tty-method
### vlcrc: rc-unix=/tmp/vlc.sock
### vlcrc: rc-fake-tty=1
#
#unixsocket="/tmp/vlc.sock"
#if [ cat "$HOME/.config/vlc/vlcrc" | sed '/rc-unix/!d' ]; then echo yay; fi
#sed 's/^#*rc-unix=/rc-unix='"$(echo "$unixsocket" | sed '')"'/'
#
### DBUS-method
# control=.*dbus.*
#case $dbus in
# "mdbus2") ;;
# "qdbus") ;;
# "gdbus") ;;
# esac
-
synapsenstau
- Beiträge: 172
- Registriert: 08.10.2013 09:56:34
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Südharz
Beitrag
von synapsenstau » 03.03.2014 09:38:38
Danke für das Script.....werde ich mir bei gelegneheit mal anschauen..
Fürs erste hat mir "awk" zu auslesen der Statusmeldungen gereicht, weil diese von einem anderen Programm genutzt wird.
..::: Intel® Core™ i5-6600 :::..::: 16 GB Ram :::..
..::: 1 TB Nvme :::..::: 1 TB SSD :::..::: NVIDIA GeForce GTX 1070 :::.