# -*- coding: ISO-8859-1 -*-
""" capellaScript -- (c) Paul Villiger
>>> Cap2CapX Konverter

    Dieses Skript konvertiert alle cap-Dateien eines Ordners wahlweise in das cap, capx oder xml Format:
    cap --> capx, capx --> cap, cap/capx --> xml
    Die neuen Dateien werden wahlweise in einem Unterverzeichnis angelegt.
    
<<<


History: 12.09.05 - Erstausgabe
         16.09.05 - cap-Dateien werden nicht mehr als capx erzeugt
         25.08.07 - Konvertierung nach XML (MusicXML)

"""

from caplib.capDOM import ScoreChange
import os, sys, tempfile

progDir = getProgramDir()
sys.path.append(os.path.join(progDir, 'data\\CapToMusic'))
                
try:
    from CapToMusic import MusicXMLExport
except:
    pass    # CapToMusic ist nicht vorhanden

select = Radio(['cap --> capx','capx --> cap', 'cap(x) --> xml'], value = 0)
newDir = CheckBox('Unterverzeichnis anlegen', value = True)

dlg = Dialog('cap <-> capx Konverter',
             VBox([select,
                   newDir,
                   Label(' ')], padding = 10)
             )
exitSkript = False
if dlg.run():
    select = select.value()
    newDir = newDir.value()
else:
    exitSkript = True

dlg = FileDialog()
dlg.__init__(bOpen=False)
dlg.setTitle('Bitte Ordner auswählen')
dlg.addFilter('capella-Dateien', '*.cap;*.capx')
dlg.setStartFile('$$XX.cap')

if not exitSkript and dlg.run():
    capFile=dlg.filePath()
    capDir, capName = os.path.split(capFile)
else:
    exitSkript = True


if not exitSkript:
    if newDir:
        if select == 0:
            subDir = 'CAPX'
        elif select == 1:
            subDir = 'CAP'
        else: 
            subDir = 'XML'
        destDir = os.path.join(capDir, subDir)
        if not os.path.exists(destDir):
            os.mkdir(destDir)
    else:
        destDir = capDir

    dirlist = os.listdir(capDir)
    dirlist.sort()


    for capFile in dirlist:
        head, tail = os.path.splitext(capFile)
        if select in [0,1]:
            if tail.lower() <> ['.cap','.capx'][select]:
                continue
        if select == 2 and tail.lower() not in ['.cap','.capx']:
                continue
        
        if not os.path.isfile(os.path.join(capDir,capFile)):
            continue

        openScore(os.path.join(capDir,capFile))
        if activeScore():
            if select in [0,1]:
                fileName = '%s.%s' % (head,['capx','cap'][select])
                name = os.path.join(destDir, fileName)
                activeScore().write(name, xml=1-select)
            elif select == 2:
                fileName = '%s.%s' % (head,'xml')
                name = os.path.join(destDir, fileName)
                tmpFile = tempfile.mktemp('.capx')
                activeScore().write(tmpFile)
                ME = MusicXMLExport(tmpFile, name)
                os.remove(tmpFile)

        
        closeActiveScore()

