Репозитории ALT
S: | 2.0.8-alt5 |
5.1: | 2.0.8-alt1 |
4.1: | 2.0.8-alt1 |
4.0: | 2.0.8-alt1 |
3.0: | 2.0.8-alt1 |
Группа :: Звук
Пакет: fmio
Главная Изменения Спек Патчи Исходники Загрузить Gear Bugs and FR Repocop
#!/usr/bin/python
# vim: ts=4 sw=4 et:
#
# Use fmio with gqradio or other presets
# Written by Andy Shevchenko <andy@smile.org.ua>
# Check for new version at http://smile.org.ua/~andy/prj/patch/fmio-gq-wrapper.py
#
import sys
import os
import getopt
import re
FALSE = 0
TRUE = 1
#
# Options
#
# version
version = "0.4.1"
# default fmio path
fmio = "/usr/bin/fmio"
# default fmio driver
driver = "v4l"
# default volume
volume = 10
# user's home directory
homedir = os.environ["HOME"]
# possible configurations
cfgs = {
# program : ['basedir', 'presets']
'gqradio' : ['.gqradio', 'presets.gqmpeg'],
'kradio' : ['.kde/share/config', '.kradiorc'],
'radio' : ['', '.radio'],
'wmfmiorc' : ['', '.wmfmiorc'],
}
cfgsRE = {
'gqradio' : '^radio:(?P<frequency>\d+\.?\d*)(:(?P<name>.*))?$',
'kradio' : '^(?P<frequency>\d{8,9})(=(?P<name>.*))?$',
'radio' : '^(?P<frequency>\d{8,9})(=(?P<name>.*))?$',
'wmfmiorc' : '^\s*(?P<frequency>\d{1,3}\.?\d{,3})\s*(#\s*(?P<name>[^\s].*))?$',
}
# use configuration from given program
cfgprogram = "gqradio"
# verbosity
verbosity = 0
quiet = FALSE
#
# internal variable(s)
#
preset = 0
frequency = '87.5'
list = FALSE
#
# Program
#
def debug(level, msg):
if level <= verbosity:
print msg
def fatal(msg):
if quiet == FALSE:
print "FATAL: %s" % msg
def usage():
print \
"""Usage: %s [... options ...] [-- fmio options ...]
-c, --config=PROGRAM use configuration of the PROGRAM
-l, --list list available presets
-p, --preset=PRESET get data from PRESET (PRESET = 1, 2, ...)
-d, --driver=DRIVER use DRIVER
-v, --volume=VOLUME set VOLUME of card (0 will mute card)
-h, --help this help
-x increase verbosity
--quiet be quiet
-b, --build get version""" % os.path.basename(sys.argv[0])
def readfile(filename):
if not os.access(filename, os.R_OK):
return
f = open(filename, "r")
lines = f.readlines()
f.close()
return lines
def parse(program, lines):
if not lines:
return
records = []
reCfg = re.compile(cfgsRE[program], re.UNICODE)
for s in lines:
check = reCfg.match(s)
if check:
frequency = check.group('frequency')
# Hack for radio or kradio syntax
if len(frequency) == 8 or len(frequency) == 9:
frequency = str(intConv(frequency) / 1000000.0)
name = check.group('name')
debug(2, "Push preset: %s %s" % (frequency, name))
records.append({'frequency': frequency, 'name' : name})
return records
def intConv(s):
try:
integer = int(s)
except ValueError:
debug(1, "expecting integer, got " + s)
integer = 0
return integer
def printStation(records, preset):
if quiet == FALSE:
print "% 3d: (%-7s) %s" % (preset, records[preset - 1]['frequency'], records[preset - 1]['name'])
#
# MAIN
#
try:
(opts, rest) = getopt.getopt(sys.argv[1:],
"bc:d:hlp:v:x",
["build", "config", "driver=", "help", "list", "preset=", "quiet", "volume="])
except (getopt.GetoptError), e:
fatal(e)
usage()
sys.exit(1)
for (opt, value) in opts:
if opt == "-b" or opt == "--build":
print "%s version %s" % (os.path.basename(sys.argv[0]), version)
sys.exit(0)
if opt == "-c" or opt == "--cfg":
cfgprogram = value
if opt == "-h" or opt == "--help":
usage()
sys.exit(0)
if opt == "-d" or opt == "--driver":
driver = value
if opt == "-l" or opt == "--list":
list = TRUE
if opt == "-p" or opt == "--preset":
preset = intConv(value)
if opt == "--quiet":
quiet = TRUE
if opt == "-v" or opt == "--volume":
volume = intConv(value)
if opt == "-x":
verbosity += 1
# check for proper fmio path
if not os.access(fmio, os.X_OK):
fatal("fmio doesn't present at %s!" % fmio)
sys.exit(1)
if not cfgs.get(cfgprogram, None):
fatal("%s isn't allowed!" % cfgprogram)
sys.exit(1)
# read and parse file
presetsFile = homedir + "/" + cfgs[cfgprogram][0] + "/" + cfgs[cfgprogram][1]
lines = readfile(presetsFile)
if not lines:
fatal("can't read file %s!" % presetsFile)
sys.exit(1)
records = parse(cfgprogram, lines)
# --list
if list == TRUE:
count = 0
while count < len(records):
printStation(records, count + 1)
count += 1
sys.exit(0)
# Fix preset parameter
if preset < 1 or preset > len(records):
preset = 0
# Setup default frequency
if len(records) > 0:
if preset == 0:
preset = 1
frequency = records[0]['frequency']
debug(2, "default frequency: %s " % frequency)
if preset > 1:
frequency = records[preset - 1]['frequency']
debug(2, "work frequency: %s" % frequency)
cmdline = [fmio, "-d", driver, "-v", str(volume), "-f", frequency] + rest
debug(1, cmdline)
printStation(records, preset)
os.execvp(cmdline[0], cmdline)