Esempio n. 1
0
File: base.py Progetto: shiwano/cwpy
    def export_image(self):
        """内部画像を出力する"""
        if not hasattr(self, "image"):
            return ""

        # 画像保存ディレクトリ
        if self.xmltype == "Summary":
            imgdir = self.get_dir()
        elif self.xmltype == "BeastCard" and self.summoneffect:
            imgdir = self.get_imgdir()

            if not imgdir:
                root = self.get_root()
                name = util.check_filename(root.name)
                imgdir = util.join_paths(self.get_dir(),
                                                "Material", root.xmltype, name)
                imgdir = util.check_duplicate(imgdir)
                self.set_imgdir(imgdir)

        elif self.xmltype in ("Adventurer", "SkillCard", "ItemCard",
                                                    "BeastCard", "CastCard"):
            name = util.check_filename(self.name)
            imgdir = util.join_paths(self.get_dir(), "Material",
                                                        self.xmltype, name)
            imgdir = util.check_duplicate(imgdir)
            self.set_imgdir(imgdir)
        else:
            imgdir = util.join_paths(self.get_dir(), "Material", self.xmltype)

        # 画像保存
        if self.image:
            # 画像パス
            if self.xmltype == "Summary":
                path = util.join_paths(imgdir, self.xmltype + ".bmp")
            else:
                name = util.check_filename(self.name) + ".bmp"
                path = util.join_paths(imgdir, name)

            # 画像出力
            path = util.check_duplicate(path)

            if not os.path.isdir(imgdir):
                os.makedirs(imgdir)

            f = open(path, "wb")
            f.write(self.image)
            f.close()
            # 最後に参照パスを返す
            path = path.replace(self.get_dir() + "/", "", 1)
            return util.repl_escapechar(path)
        else:
            return ""
Esempio n. 2
0
    def convert(self):
        if not self.datalist:
            self.load()

        self.curnum = 0

        # 宿データをxmlに変換
        for data in self.datalist:
            self.message = u"%s を変換中" % (os.path.basename(data.fpath))
            self.curnum += 1

            try:
                data.create_xml(self.dir)
            except:
                s = os.path.basename(data.fpath)
                s = u"%s は変換できませんでした。\n" % (s)
                self.write_errorlog(s)

        # その他のファイルを宿ディレクトリにコピー
        for path in self.otherfiles:
            self.message = u"%s をコピー中" % (os.path.basename(path))
            self.curnum += 1
            dst = util.join_paths(self.dir, os.path.basename(path))
            dst = util.check_duplicate(dst)
            shutil.copy2(path, dst)

            if not os.access(dst, os.R_OK|os.W_OK|os.X_OK):
                os.chmod(dst, stat.S_IWRITE|stat.S_IREAD)

        # ディレクトリを宿ディレクトリにコピー
        for path in self.otherdirs:
            self.message = u"%s をコピー中" % (os.path.basename(path))
            self.curnum += 1
            dst = util.join_paths(self.dir, os.path.basename(path))
            dst = util.check_duplicate(dst)
            shutil.copytree(path, dst)

            if not os.access(dst, os.R_OK|os.W_OK|os.X_OK):
                os.chmod(dst, stat.S_IWRITE|stat.S_IREAD)

        # 存在しないディレクトリを作成
        dnames = ("Adventurer", "Album", "BeastCard", "ItemCard", "SkillCard",
                                                                    "Party")

        for dname in dnames:
            path = util.join_paths(self.dir, dname)

            if not os.path.isdir(path):
                os.makedirs(path)

        self.curnum = self.maxnum
        return self.dir
Esempio n. 3
0
    def convert(self):
        if not self.datalist:
            self.load()

        self.curnum = 0

        # シナリオファイルをxmlに変換
        for data in self.datalist:
            self.message = u"%s を変換中..." % (os.path.basename(data.fpath))
            self.curnum += 1

            try:
                data.create_xml(self.dir)
            except Exception:
                cw.util.print_ex()
                s = os.path.basename(data.fpath)
                s = u"%s は変換できませんでした。\n" % (s)
                self.write_errorlog(s)

        # 素材ファイルをMaterialディレクトリにコピー
        materialdir = util.join_paths(self.dir, "Material")

        if not os.path.isdir(materialdir):
            os.makedirs(materialdir)

        for path in self.materials:
            self.message = u"%s をコピー中..." % (os.path.basename(path))
            self.curnum += 1
            dst = util.join_paths(materialdir, os.path.basename(path))
            dst = util.check_duplicate(dst)
            shutil.copy2(path, dst)

        # その他のファイルをシナリオディレクトリにコピー
        for path in self.otherfiles:
            self.message = u"%s をコピー中..." % (os.path.basename(path))
            self.curnum += 1
            dst = util.join_paths(self.dir, os.path.basename(path))
            dst = util.check_duplicate(dst)
            shutil.copy2(path, dst)

        # ディレクトリをシナリオディレクトリにコピー
        for path in self.otherdirs:
            self.message = u"%s をコピー中..." % (os.path.basename(path))
            self.curnum += 1
            dst = util.join_paths(self.dir, os.path.basename(path))
            dst = util.check_duplicate(dst)
            shutil.copytree(path, dst)

        self.curnum = self.maxnum
        return self.dir
Esempio n. 4
0
    def convert(self):
        if not self.datalist:
            self.load()

        self.curnum = 0

        # シナリオファイルをxmlに変換
        for data in self.datalist:
            self.message = u"%s を変換中" % (os.path.basename(data.fpath))
            self.curnum += 1

            try:
                data.create_xml(self.dir)
            except:
                s = os.path.basename(data.fpath)
                s = u"%s は変換できませんでした。\n" % (s)
                self.write_errorlog(s)

        # 素材ファイルをMaterialディレクトリにコピー
        materialdir = util.join_paths(self.dir, "Material")

        if not os.path.isdir(materialdir):
            os.makedirs(materialdir)

        for path in self.materials:
            self.message = u"%s をコピー中" % (os.path.basename(path))
            self.curnum += 1
            dst = util.join_paths(materialdir, os.path.basename(path))
            dst = util.check_duplicate(dst)
            shutil.copy2(path, dst)

        # その他のファイルをシナリオディレクトリにコピー
        for path in self.otherfiles:
            self.message = u"%s をコピー中" % (os.path.basename(path))
            self.curnum += 1
            dst = util.join_paths(self.dir, os.path.basename(path))
            dst = util.check_duplicate(dst)
            shutil.copy2(path, dst)

        # ディレクトリをシナリオディレクトリにコピー
        for path in self.otherdirs:
            self.message = u"%s をコピー中" % (os.path.basename(path))
            self.curnum += 1
            dst = util.join_paths(self.dir, os.path.basename(path))
            dst = util.check_duplicate(dst)
            shutil.copytree(path, dst)

        self.curnum = self.maxnum
        return self.dir
Esempio n. 5
0
File: base.py Progetto: shiwano/cwpy
    def create_xml(self, dpath):
        """XMLファイルを作成する。
        dpath: XMLを作成するディレクトリ
        """
        # 保存ディレクトリ設定
        self.set_dir(dpath)
        # xml文字列取得
        xmltext = '<?xml version="1.0" encoding="UTF-8"?>\n'
        xmltext += self.get_xmltext(0)

        # xmlファイルパス
        if self.xmltype in ("Summary", "Environment"):
            path = util.join_paths(self.get_dir(), self.xmltype + ".xml")
        else:
            name = util.check_filename(self.name) + ".xml"

            # シナリオデータは先頭にidを付与
            if not self.is_yadodata():
                name = str(self.id).zfill(2) + "_" + name

            path = util.join_paths(self.get_dir(), self.xmltype, name)

        # xml出力
        path = util.check_duplicate(path)

        if not os.path.isdir(os.path.dirname(path)):
            os.makedirs(os.path.dirname(path))

        f = open(path, "wb")
        f.write(xmltext.encode("utf-8"))
        f.close()
Esempio n. 6
0
    def __init__(self, path, dstpath, skintype=""):
        self.name = os.path.basename(path)
        self.path = path
        self.dir = util.join_paths(dstpath, os.path.basename(path))
        self.dir = util.check_duplicate(self.dir)
        self.skintype = skintype
        # progress dialog data
        self.message = ""
        self.curnum = 0
        self.maxnum = 1
        # 読み込んだデータリスト
        self.datalist = []
        self.wyd = None
        self.wchs = []
        self.wcps = []
        self.wrms = []
        self.wpls = []
        self.wpts = []
        self.nowadventuringparties = []
        # エラーログ
        self.errorlog = ""
        # pathにあるファイル・ディレクトリを
        # (宿ファイル,シナリオファイル,その他のファイル,ディレクトリ)に種類分け。
        exts_yado = set(["wch", "wcp", "wpl", "wpt", "wrm", "whs"])
        exts_sce = set(["wsm", "wid", "wcl"])
        exts_ignore = set(["wck", "wci", "wcb"])
        self.yadofiles = []
        self.cardfiles = []
        self.otherfiles = []
        self.otherdirs = []
        self.environmentpath = None

        for name in os.listdir(self.path):
            path = util.join_paths(self.path, name)

            if os.path.isfile(path):
                ext = cw.util.splitext(name)[1].lstrip(".").lower()

                if name == "Environment.wyd" and not self.environmentpath:
                    self.environmentpath = path
                    self.yadofiles.append(path)
                elif ext in exts_yado:
                    self.yadofiles.append(path)
                elif ext in exts_sce:
                    self.cardfiles.append(path)
                elif not ext in exts_ignore:
                    self.otherfiles.append(path)

            else:
                self.otherdirs.append(path)
Esempio n. 7
0
    def __init__(self, path, dstpath, skintype=""):
        self.name = os.path.basename(path)
        self.path = path
        self.dir = util.join_paths(dstpath, os.path.basename(path))
        self.dir = util.check_duplicate(self.dir)
        self.skintype = skintype
        # progress dialog data
        self.message = ""
        self.curnum = 0
        self.maxnum = 1
        # 読み込んだデータリスト
        self.datalist = []
        self.wyd = None
        self.wchs = []
        self.wcps = []
        self.wrms = []
        self.wpls = []
        self.wpts = []
        # エラーログ
        self.errorlog = ""
        # pathにあるファイル・ディレクトリを
        # (宿ファイル,シナリオファイル,その他のファイル,ディレクトリ)に種類分け。
        exts_yado = set(["wch", "wcp", "wpl", "wpt", "wrm"])
        exts_sce  = set(["wsm", "wid"])
        self.yadofiles = []
        self.cardfiles = []
        self.otherfiles = []
        self.otherdirs = []
        self.environmentpath = None

        for name in os.listdir(self.path):
            path = util.join_paths(self.path, name)

            if os.path.isfile(path):
                ext = os.path.splitext(name)[1].lstrip(".").lower()

                if name == "Environment.wyd" and not self.environmentpath:
                    self.environmentpath = path
                    self.yadofiles.append(path)
                elif ext in exts_yado:
                    self.yadofiles.append(path)
                elif ext in exts_sce:
                    self.cardfiles.append(path)
                else:
                    self.otherfiles.append(path)

            else:
                self.otherdirs.append(path)
Esempio n. 8
0
 def __init__(self, ydata, dstpath, targetengine):
     self.ydata = ydata
     self.targetengine = targetengine
     self.name = self.ydata.name
     self.dir = util.join_paths(dstpath, util.check_filename(self.name))
     self.dir = util.check_duplicate(self.dir)
     # progress dialog data
     self.message = ""
     self.curnum = 0
     self.maxnum = 1
     self.maxnum += len(ydata.storehouse)
     self.maxnum += len(ydata.standbys)
     self.maxnum += len(ydata.partys) * 2
     self.maxnum += len(ydata.album)
     # エラーログ
     self.errorlog = ""
Esempio n. 9
0
    def __init__(self, path, dstdir, skintype):
        """カードワースのシナリオを読み込み、XMLファイルに変換するクラス。
        path: カードワースシナリオフォルダのパス。
        dstdir: 変換先ディレクトリ。
        skintype: スキンタイプ。
        """
        self.name = os.path.basename(path)
        self.path = path
        self.dir = util.join_paths(dstdir, os.path.basename(self.path))
        self.dir = util.check_duplicate(self.dir)
        self.skintype = skintype
        # progress dialog data
        self.message = ""
        self.curnum = 0
        self.maxnum = 1
        # 読み込んだデータリスト
        self.datalist = []
        # エラーログ
        self.errorlog = ""
        # pathにあるファイル・ディレクトリを
        # (シナリオファイル,素材ファイル,その他ファイル, ディレクトリ)に分ける。
        exts_mat = set(["bmp", "jpg", "jpeg", "wav", "wave", "mid", "midi",
                                                    "jpdc", "jpy1", "jptx"])
        self.cwfiles = []
        self.materials = []
        self.otherfiles = []
        self.otherdirs = []
        self.summarypath = None

        for name in os.listdir(self.path):
            path = util.join_paths(self.path, name)

            if os.path.isfile(path):
                ext = os.path.splitext(name)[1].lstrip(".").lower()

                if name == "Summary.wsm" and not self.summarypath:
                    self.summarypath = path
                    self.cwfiles.append(path)
                elif ext == "wid":
                    self.cwfiles.append(path)
                elif ext in exts_mat:
                    self.materials.append(path)
                else:
                    self.otherfiles.append(path)

            else:
                self.otherdirs.append(path)
Esempio n. 10
0
    def convert(self):

        if not self.datalist:
            self.load()

        self.curnum_n = 0
        self.curnum = 50

        # 宿データをxmlに変換
        if not os.path.isdir(self.dir):
            os.makedirs(self.dir)
        yadodb = cw.yadodb.YadoDB(self.dir)
        for data in self.datalist:
            data.yadodb = yadodb
            self.message = u"%s を変換中..." % (os.path.basename(data.fpath))
            self.curnum_n += 1
            self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum)

            try:
                fpath = data.create_xml(self.dir)

                if isinstance(data, party.Party) and\
                        self.wyd.partyname == cw.util.splitext(os.path.basename(data.fpath))[0]:
                    fpath = cw.util.relpath(fpath, self.dir)
                    fpath = cw.util.join_paths(fpath)
                    self.wyd.cwpypartyname = fpath

                if hasattr(data, "errorcards"):
                    for errcard in data.errorcards:
                        s = errcard.fname
                        s = u"%s は読込できませんでした。\n" % (s)
                        self.write_errorlog(s)
            except Exception:
                cw.util.print_ex()
                s = os.path.basename(data.fpath)
                s = u"%s は変換できませんでした。\n" % (s)
                self.write_errorlog(s)

        # 冒険中情報を変換
        for partyinfo, partymembers in self.nowadventuringparties:
            self.message = u"%s の冒険中情報を変換中..." % (partyinfo.name)
            self.curnum_n += 1
            self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum)

            try:
                self.create_log(partyinfo, partymembers)

            except Exception:
                cw.util.print_ex()
                s = partyinfo.name
                s = u"%s の冒険中情報は変換できませんでした。\n" % (s)
                self.write_errorlog(s)

        yadodb.commit()
        yadodb.close()

        # その他のファイルを宿ディレクトリにコピー
        for path in self.otherfiles:
            self.message = u"%s をコピー中..." % (os.path.basename(path))
            self.curnum_n += 1
            self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum)
            dst = util.join_paths(self.dir, os.path.basename(path))
            dst = util.check_duplicate(dst)
            shutil.copy2(path, dst)

            if not os.access(dst, os.R_OK | os.W_OK | os.X_OK):
                os.chmod(dst, stat.S_IWRITE | stat.S_IREAD)

        # ディレクトリを宿ディレクトリにコピー
        for path in self.otherdirs:
            self.message = u"%s をコピー中..." % (os.path.basename(path))
            self.curnum_n += 1
            self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum)
            dst = util.join_paths(self.dir, os.path.basename(path))
            dst = util.check_duplicate(dst)
            shutil.copytree(path, dst)

            if not os.access(dst, os.R_OK | os.W_OK | os.X_OK):
                os.chmod(dst, stat.S_IWRITE | stat.S_IREAD)

        # 存在しないディレクトリを作成
        dnames = ("Adventurer", "Album", "BeastCard", "ItemCard", "SkillCard",
                  "Party")

        for dname in dnames:
            path = util.join_paths(self.dir, dname)

            if not os.path.isdir(path):
                os.makedirs(path)

        self.curnum = 100
        return self.dir
Esempio n. 11
0
 def create_fpath(name, ext):
     fpath = util.join_paths(self.dir, util.check_filename(name) + ext)
     fpath = util.check_duplicate(fpath)
     return fpath
Esempio n. 12
0
    def __init__(self,
                 path,
                 dstdir,
                 skintype,
                 materialdir="Material",
                 image_export=True):
        """カードワースのシナリオを読み込み、XMLファイルに変換するクラス。
        path: カードワースシナリオフォルダのパス。
        dstdir: 変換先ディレクトリ。
        skintype: スキンタイプ。
        """
        self.name = os.path.basename(path)
        self.path = path
        self.dir = util.join_paths(dstdir, os.path.basename(self.path))
        self.dir = util.check_duplicate(self.dir)
        self.skintype = skintype
        self.materialdir = materialdir
        self.image_export = image_export
        # progress dialog data
        self.message = ""
        self.curnum = 0
        self.maxnum = 1
        # 読み込んだデータリスト
        self.datalist = []
        # エラーログ
        self.errorlog = ""
        # pathにあるファイル・ディレクトリを
        # (シナリオファイル,素材ファイル,その他ファイル, ディレクトリ)に分ける。
        exts_mat = set([
            "bmp", "jpg", "jpeg", "wav", "wave", "mid", "midi", "jpdc", "jpy1",
            "jptx"
        ])
        self.cwfiles = []
        self.materials = []
        self.otherfiles = []
        self.otherdirs = []
        self.summarypath = None

        # 互換性マーク
        self.versionhint = None
        self.hasmodeini = False

        if self.path == "":
            return
        for name in os.listdir(self.path):
            path = util.join_paths(self.path, name)

            if os.path.isfile(path):
                ext = cw.util.splitext(name)[1].lstrip(".").lower()

                if name.lower() == "summary.wsm" and not self.summarypath:
                    self.summarypath = path
                    self.cwfiles.append(path)
                elif ext == "wid":
                    self.cwfiles.append(path)
                elif ext in exts_mat:
                    self.materials.append(path)
                elif name.lower() == "mode.ini":
                    self.read_modeini(path)
                else:
                    self.otherfiles.append(path)

            else:
                self.otherdirs.append(path)

        if self.summarypath:
            self.versionhint = cw.cwpy.sct.merge_versionhints(
                self.versionhint,
                cw.cwpy.sct.get_versionhint(fpath=self.summarypath))