#!/usr/bin/env python
# This script is generated with chut. Do NOT edit this file.
# All your changes will be lost at the next generation.

version = 'unknown'

import base64, json, types, zlib, sys, os
os.environ['CHUTIFIED'] = '1'
PY3 = sys.version_info[0] == 3
_chut_modules = []
_chut_modules.append(('six', b'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\n'))
_chut_modules.append(('docopt', b'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\n'))
_chut_modules.append(('ConfigObject', b'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\nHpp7vcBJLTMSBP8F6/lKqQ==\n'))
_chut_modules.append(('chut', b'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\n/INjbFoq0/RpyViD+D9Mt5Wk\n'))
for name, code in _chut_modules:
    if PY3:
        if isinstance(code, str):
            code = code.encode('utf-8')
    else:
        name = bytes(name)
    code = zlib.decompress(base64.decodestring(code))
    mod = types.ModuleType(name)
    globs = dict()
    if PY3:
        if isinstance(code, bytes):
            code = code.decode('utf-8')
        exec(code, globs)
    else:
        exec('exec code in globs')
    mod.__dict__.update(globs)
    if name == 'chut':
        mod.wraps_module(mod)
    else:
        sys.modules[name] = mod
from chut import env
# -*- coding: utf-8 -*-
from chut import *  # noqa
import shutil
import sys
import re

__version__ = "0.11"

_episode = re.compile(
    r'[^0-9]+(?P<s>[0-9]+)\s*(x|e|episode)\s*(?P<e>[0-9]+)[^0-9]+')


def extract_numbers(f):
    m = _episode.search(f.lower())
    if m:
        m = m.groupdict()
        return int(m['s']), int(m['e'])


@console_script(fmt='brief')
def vlserie(args):
    """
    Usage: %prog [options] [<season> <episode>]

    Play the serie contained in the current folder. File names should be
    formated like SXXEXX. Also load subtitles if any.

    Store the latest play in ~/.vlserie. So you dont have to remember it
    yourself.

    Require vlc or mplayer.

    Options:

    -l, --latest            Play latest instead of next
    -f, --freeplayer        Play in freeplayer
    --loop                  Loop over episodes
    %options
    """

    config = ini('~/.vlserie')
    config.write()

    player = config.player.binary or 'vlc'
    player_opts = config[player]
    if env.display:
        options = player_opts.xoptions
    else:
        options = player_opts.fboptions
    debug('Using %s player', player)

    def play(filename, episode):
        filename = path.abspath(filename)
        dirname, filename = path.split(filename)
        cd(dirname)
        if args['--freeplayer']:
            cmdline = (
                "%s %r --play-and-exit --sout "
                "'#transcode{vcodec=mp2v,vb=4096,scale=1,audio-sync,soverlay}:"
                "duplicate{dst=std{access=udp,mux=ts,dst=212.27.38.253:1234}}'"
            ) % (options, filename)
        elif player in ('vlc', 'cvlc'):
            cmdline = (
                '%s -f --play-and-exit --qt-minimal-view %r'
            ) % (options, filename)
        elif player == 'mplayer':
            cmdline = '%s -fs %r' % (options, filename)
        else:
            error('Unknown player %r', player)
            sys.exit(1)
        srts = find('-iregex ".*%s\(x\|E\)%02i.*srt"' % episode, shell=True)
        for srt in sorted(srts):
            srt = srt.lstrip('./')
            if '  ' in srt:
                new = srt.replace('  ', ' ')
                shutil.move(srt, new)
                srt = new
            if player in ('vlc', 'cvlc'):
                cmdline += ' --sub-file %r' % srt
            elif player == 'mplayer':
                cmdline += ' -sub %r' % srt
        subs = find('-iregex ".*%s\(x\|E\)%02i.*sub"' % episode, shell=True)
        for sub in sorted(subs):
            if player == 'mplayer':
                sub = sub.lstrip('./')
                cmdline += ' -vobsub %r' % sub[:-4]
        cmd = sh[player](cmdline, combine_stderr=True, shell=True)
        info(repr(cmd))
        serie = config[dirname]
        serie.latest = filename
        config.write()
        try:
            cmd > 1
        except OSError:
            pass
        if not args['--loop']:
            sys.exit(0)

    serie = config[path.abspath('.')]

    filenames = find(
        ('. -iregex '
         '".*[0-9]+\s*\(e\|x\|episode\)\s*[0-9]+.*'
         '\(avi\|wmv\|mkv\|mp4\)"'),
        shell=True)
    filenames = [path.abspath(f) for f in filenames]
    filenames = sorted([(extract_numbers(f), f) for f in filenames])
    filenames = [(e, f) for e, f in filenames if f is not None]

    if args['<season>']:
        episode = int(args['<season>']), int(args['<episode>'])
        filenames = [(x, f) for x, f in filenames if x >= episode]
    elif serie.latest:
        episode = extract_numbers(serie.latest.lower())
        if args['--latest']:
            filenames = [(x, f) for x, f in filenames if x >= episode]
        else:
            filenames = [(x, f) for x, f in filenames if x > episode]

    for episode, filename in filenames:
        play(filename, episode)


@console_script(fmt='brief')
def freeplayer(args):
    """Usage: %prog [options] [<stream>]

    -s      Serve freeplayer page
    """
    if args["-s"]:
        with open('/tmp/settings.html', 'w') as fd:
            fd.write(settings)
        nc('-l -p 8080 -q 1 < /tmp/settings.html', shell=True) > 0
        info('freeplayer initialized')
        return
    stream = args['<stream>']
    if stream.startswith('https://'):
        stream.replace('https://', 'http://')
    cmdline = (
        "%r --play-and-exit --sout "
        "'#transcode{vcodec=mp2v,vb=4096,scale=1,audio-sync,soverlay}:"
        "duplicate{dst=std{access=udp,mux=ts,dst=212.27.38.253:1234}}'"
    ) % stream
    cmd = sh['vlc'](cmdline, combine_stderr=True, shell=True)
    info(repr(cmd))
    cmd > 1

settings = '''HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n
<html><body background="ts://127.0.0.1"></body></html>'''

if __name__ == '__main__':
    freeplayer()
