#!/usr/bin/env python
# -*- coding: utf-8 -*-
# generated by wxGlade 0.6.3 on Thu May 26 11:45:56 2011

import wx, os.path, commands

# begin wxGlade: extracode
# end wxGlade

#インストールコマンド群  
installCommands=(  
    (   #みくつべ♪インストールコマンド群  
        "gksudo add-apt-repository ppa:khf03353/ppa-kaorin","gksudo apt-get update",'gksudo "apt-get -y install mikutube"'  
    ),  
    (   #みくかべ♪インストールコマンド群  
        "gksudo add-apt-repository ppa:khf03353/ppa-kaorin","gksudo apt-get update",'gksudo "apt-get -y install mikukabe"'  
        ),  
    (   #audaciousスキンインストールコマンド群  
        "gksudo apt-get update",'gksudo "apt-get -y install audacious"',  
        #gksudo に渡す際に"でコマンドをくくる必要があるので、文字列定義としては'を使っている  
        'gksudo "wget -P /usr/share/audacious/Skins/ http://mangareview.up.seesaa.net/image/mikumiku001.tar.gz"',  
        'gksudo "wget -P /usr/share/audacious/Skins/ http://mangareview.up.seesaa.net/image/mikumiku_00220.tar.gz"',  
        'gksudo "wget -P /usr/share/audacious/Skins/ http://mangareview.up.seesaa.net/image/mikumiku_003.tar.gz"',  
        'gksudo "tar xvzf /usr/share/audacious/Skins/mikumiku001.tar.gz -C /usr/share/audacious/Skins/"',  
        'gksudo "tar xvzf /usr/share/audacious/Skins/mikumiku_00220.tar.gz -C /usr/share/audacious/Skins/"',  
        'gksudo "tar xvzf /usr/share/audacious/Skins/mikumiku_003.tar.gz -C /usr/share/audacious/Skins/"',  
        'gksudo "rm -f /usr/share/audacious/Skins/mikumiku001.tar.gz"',  
        'gksudo "rm -f /usr/share/audacious/Skins/mikumiku_00220.tar.gz"',  
        'gksudo "rm -f /usr/share/audacious/Skins/mikumiku_003.tar.gz"',  
    )  
)

class MikunchApp(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MikunchApp.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.sizer_2_staticbox = wx.StaticBox(self, -1, "")
        self.label_1 = wx.StaticText(self, -1, u"みくんちゅ♪セットアップヘルパ")
        self.chkMikutube = wx.CheckBox(self, -1, u"みくつべ♪をインストール")
        self.chkMikukabe = wx.CheckBox(self, -1, u"みくかべ♪をインストール")
        self.chkAudacious = wx.CheckBox(self, -1, u"Audaciousのスキンをインストール")
        self.cmbAudaciousConf = wx.ComboBox(self, -1, choices=[u"初音ミク001", u"初音ミク002", u"初音ミク003"], style=wx.CB_DROPDOWN|wx.CB_READONLY)
        self.btCancel = wx.Button(self, wx.ID_CANCEL, "")
        self.btOK = wx.Button(self, wx.ID_OK, "")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.on_btCancel_clicked, self.btCancel)
        self.Bind(wx.EVT_BUTTON, self.on_btOK_clicked, self.btOK)
        # self.Bind(wx.EVT_COMBOBOX, self.on_Select, self.cmbAudaciousConf)
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MikunchApp.__set_properties
        self.SetTitle(u"みくんちゅ♪セットアップヘルパ")
        self.cmbAudaciousConf.SetSelection(0)
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MikunchApp.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_2 = wx.StaticBoxSizer(self.sizer_2_staticbox, wx.VERTICAL)
        sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_2.Add(self.label_1, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
        sizer_2.Add(self.chkMikutube, 0, 0, 0)
        sizer_2.Add(self.chkMikukabe, 0, 0, 0)
        sizer_3.Add(self.chkAudacious, 0, wx.ALIGN_CENTER_VERTICAL, 0)
        sizer_3.Add(self.cmbAudaciousConf, 0, 0, 0)
        sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
        sizer_4.Add((240, 30), 0, 0, 0)
        sizer_4.Add(self.btCancel, 0, 0, 0)
        sizer_4.Add(self.btOK, 0, 0, 0)
        sizer_2.Add(sizer_4, 1, wx.EXPAND, 0)
        sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        self.Layout()
        # end wxGlade

    def on_btCancel_clicked(self, event): # wxGlade: MikunchApp.<event_handler>
        self.Close(True)

    def on_btOK_clicked(self, event): # wxGlade: MikunchApp.<event_handler>
        # 適用を行ってアプリケーションを終了する
        # みくつべ♪インストールコマンドを実行
        [self.execCommand(cmd) for cmd in installCommands[0] if self.chkMikutube.GetValue()]
        # みくかべ♪インストールコマンドを実行
        [self.execCommand(cmd) for cmd in installCommands[1] if self.chkMikukabe.GetValue()]
        if self.chkAudacious.GetValue():
            # Audacious用のスキンインストールと適用
            for cmd in installCommands[2]:
                self.execCommand(cmd)
            # 適用スキンのコンフィグ名を定義
            confName = ("mikumiku_001", "mikumiku_002", "mikumiku_003")
            # 選択されているスキンの番号を取得
            sel = self.cmbAudaciousConf.GetCurrentSelection()
            # コンフィグファイルのパスを生成
            configpath = os.path.join(os.path.expanduser("~"), ".config/audacious/config")
            # 選択スキンをコンフィグファイルに設定
            self.editConfig("skin=", "skin=/usr/share/audacious/Skins/" + \
                                confName[sel], configpath)
            # 壊れているスキンも有効にする設定を True に
            self.editConfig("allow_broken_skins=", "allow_broken_skins=TRUE", \
                                configpath)

        # ウィンドウを閉じてアプリケーションを終了する
        self.Close()

    # コマンド実行のメソッド
    def execCommand(self, command):
        print command                   # 受け渡されたコマンドのデバッグ用プリント
        ret = commands.getoutput(command)
        print ret                       # 実行結果のデバッグ用プリント
        return ret

    # 設定ファイルの書き換え
    def editConfig(self, keyword, replaceString, configPath):
        print keyword
        print replaceString
        # ファイルをオープン
        f = open(configPath, 'r')
        # 新しい書き込み用リストを生成
        cnf = [txt.strip().find(keyword) >= 0 and replaceString + '\n' or txt \
               for txt in [line for line in f.readlines()]] 
        f.close()
        # 書き込み用に再度ファイルを開く
        fw = open(configPath, "w")
        # 生成したリストを書きこむ
        fw.writelines(cnf)
        # 書き込んだのでファイルを閉じる
        fw.close()

# end of class MikunchApp


if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    TopLevel = MikunchApp(None, -1, "")
    app.SetTopWindow(TopLevel)
    TopLevel.Show()
    app.MainLoop()
