Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37401200
en ru br
Репозитории 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
www.altlinux.org/Changes

Группа :: Звук
Пакет: 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)

 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin