#!/usr/bin/env python 
# -*- coding: iso-8859-2 -*-

"""
mplayer.py
PJM 'kender' <dziubiak@civ.pl> 2004
Licencja: GPL v.2

Uruchomienie:
mplayer.py <nazwa_pliku_z_filmem> <opcje_mplayera>

Skrypt, jesli mają być wyświetlane napisy, dodaje pasek o wysokości 80 do okna odtwarzania w mplayerze, na ktorym ładnie wyświetlają się napisy nie zasłaniając obrazu.

Jeśli jest mu podana opcja -sub <plik z napisami>, pasek jest po prostu dodawany.
Jeśli nie jest podany plik z napisami, sprawdzany jest katalog z filmem. Jeśli zawiera dokładnie jeden plik filmowy (.avi, .mpg, .mpeg) i dokładnie jeden .txt, przyjmowane jest, ze ten plik tekstowy jest plikiem z napisami.

Przydatne, jeśli nie chcemy przemianowywać wszystkich naszych plików z napisami tak, żeby pasowały do filmów.

TODO: 
- rozpoznawanie kodowania znaków w pliku z napisami i odpowiednia modyfikacja .mplayer/font
- radzenie sobie z wieloma plikami w jednym katalogu
- coś innego? 
"""

MPLAYER_BIN = '`which mplayer`'
import os
import sys

import utils

endsWith = utils.endsWith

def bashit(str):
	"Cytuje po bashowemu"
	tablica = [
		"'",
		"\"",
		"!",
		";",
		" ",
		"&",
		"[",
		"]",
		"(",
		")",
		"{",
		"}",
		"`",
	]

	for ch in tablica:
		str = str.replace(ch, "\\%s" % ch)
	return str

def liniaKomendDlaMplayera(args, mplayerPath=MPLAYER_BIN, autofindSubtitles=1,
	latPath=None, cpPath=None):

	SUB_FILE=None
	autofindSubtitles = int(autofindSubtitles)
	opcje = {}
	argumentyBezMinusa = []
	
	i = 0
	for i in range(0, len(args)):
		try:
			arg = args[i]
		except:
			break
		if arg[0] == '-':
			try:
				if args[i+1][0] == '-':
					raise ""
			except:
				argumentyBezMinusa.append(arg)
			else:
				opcje[arg] = args.pop(i+1)
				utils.debug(opcje)
				
		else:
			argumentyBezMinusa.append(arg)
	sys.stderr.write(`opcje`)
	plikNapisu = None
	if opcje.has_key("-sub"):
		plikNapisu=opcje["-sub"]

	else:
		try:
			plikFilmu = argumentyBezMinusa[0]
		except:
			return None

		katalog = os.path.dirname(plikFilmu) 
		if katalog == '':
			katalog = '.'
		listaPlikow = os.listdir(katalog)
		filmowych = 0
		napisowych = 0
		if autofindSubtitles:
			for plik in listaPlikow:
				if endsWith(plik, [".avi", ".mpg", ".mpeg"]):
					filmowych += 1

				if endsWith(plik, [".txt", ".srt"]):
					napisowych += 1
					SUB = plik
		if filmowych == 1 and napisowych == 1:
			SUB = os.path.join(katalog, SUB)
			plikNapisu = SUB
			
	if plikNapisu and not opcje.has_key("-vop"):
		opcje["-vop"] = "expand=0:-120:0:50"


	wierszPolecenia = mplayerPath
	for o in opcje.keys():
		if o != "-sub":
			wierszPolecenia += " %s %s" % (o, opcje[o])
		else:
			wierszPolecenia += " %s %s" % (o, bashit(opcje[o]))
	for a in argumentyBezMinusa:
		wierszPolecenia += " %s " % bashit(a)
	if plikNapisu and not opcje.has_key("-sub"):
		wierszPolecenia += " -sub %s" % bashit(plikNapisu)
		
	return wierszPolecenia

if __name__ == '__main__':
	
	args = sys.argv
	x = liniaKomendDlaMplayera(args[1:])
	os.system(x)



2004-11-22 11:39:16 CET