}\r
\r
/**\r
+ * 指定したディレクトリの下のサブフォルダに、character.iniがある場合は、\r
+ * キャラクターなんとか機のディレクトリとして、標準のcharacter.xmlを生成する.<br>\r
+ * ただし、書き込み禁止の場合は何もしない.<br>\r
+ * すでにcharacter.xmlがある場合も何もしない.<br>\r
+ * \r
+ * @param dataDir\r
+ * キャラクターなんとか機のデータディレクトリ\r
+ */\r
+ public void convertCharacterNantokaIniToXml(File dataDir) {\r
+ if (dataDir == null || !dataDir.isDirectory() || !dataDir.canWrite()) {\r
+ return;\r
+ }\r
+\r
+ for (File dir : dataDir.listFiles()) {\r
+ if (!dir.isDirectory()) {\r
+ continue;\r
+ }\r
+ File characterXmlFile = new File(dir,\r
+ CharacterDataPersistent.CONFIG_FILE);\r
+ if (characterXmlFile.exists()) {\r
+ // すでにキャラクター定義XMLが存在する場合はスキップする.\r
+ continue;\r
+ }\r
+\r
+ File characterIniFile = new File(dir,\r
+ CharacterDataPersistent.COMPATIBLE_CONFIG_NAME);\r
+ if (characterIniFile.exists() && characterIniFile.canWrite()\r
+ && dir.canWrite()) {\r
+ // character.iniが存在し、書き込み可能であれば、それをcharacter.xmlに変換する.\r
+\r
+ // eye_colorフォルダがあるか?\r
+ File eyeColorFolder = new File(dir, "eye_color");\r
+ boolean hasEyeColorFolder = eyeColorFolder.exists()\r
+ && eyeColorFolder.isDirectory();\r
+\r
+ DefaultCharacterDataVersion version;\r
+ if (hasEyeColorFolder) {\r
+ // eye_colorフォルダがあればver3形式とみなす.\r
+ version = DefaultCharacterDataVersion.V3;\r
+ } else {\r
+ version = DefaultCharacterDataVersion.V2;\r
+ }\r
+\r
+ try {\r
+ convertFromCharacterIni(characterIniFile, characterXmlFile,\r
+ version);\r
+\r
+ } catch (Exception ex) {\r
+ logger.log(Level.WARNING, "character.xmlの生成に失敗しました。:"\r
+ + characterXmlFile, ex);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ /**\r
* キャラクターデータを非同期に読み込む.<br>\r
* 読み込み完了したものが随時、コールバックに渡される.\r
* \r
DirectoryConfig dirConfig = DirectoryConfig.getInstance();\r
File baseDir = dirConfig.getCharactersDir();\r
\r
+ // キャラクターなんとか機のcharacter.iniがあれば、character.xmlに変換する.\r
+ convertCharacterNantokaIniToXml(baseDir);\r
+\r
// ファイル名をノーマライズする\r
FileNameNormalizer normalizer = FileNameNormalizer.getDefault();\r
\r
import javax.swing.KeyStroke;\r
\r
import charactermanaj.Main;\r
-import charactermanaj.model.io.CharacterDataDefaultProvider.DefaultCharacterDataVersion;\r
-import charactermanaj.model.io.CharacterDataPersistent;\r
import charactermanaj.ui.util.FileDropTarget;\r
import charactermanaj.util.ErrorMessageHelper;\r
import charactermanaj.util.LocalizedResourcePropertyLoader;\r
}\r
combDir.setSelectedItem(dropFile);\r
}\r
- \r
- /**\r
- * 指定したディレクトリの下のサブフォルダに、すでにcharacter.iniがある場合は、\r
- * キャラクターなんとか機のディレクトリとして、標準のcharacter.xmlを生成する.<br>\r
- * ただし、書き込み禁止の場合は何もしない.\r
- * \r
- * @param dirs\r
- * 対象ディレクトリ\r
- */\r
- protected void checkCharacterNantokaDirs(File dirs) {\r
- if (dirs == null || !dirs.isDirectory() || !dirs.canWrite()) {\r
- return;\r
- }\r
- \r
- CharacterDataPersistent persist = CharacterDataPersistent.getInstance();\r
\r
- for (File dir : dirs.listFiles()) {\r
- if (!dir.isDirectory()) {\r
- continue;\r
- }\r
- File characterXmlFile = new File(dir, CharacterDataPersistent.CONFIG_FILE);\r
- if (characterXmlFile.exists()) {\r
- // すでにキャラクター定義XMLが存在する場合はスキップする.\r
- continue;\r
- }\r
-\r
- File characterIniFile = new File(dir, CharacterDataPersistent.COMPATIBLE_CONFIG_NAME);\r
- if (characterIniFile.exists() && characterIniFile.canWrite() && dir.canWrite()) {\r
- // character.iniが存在し、書き込み可能であれば、それをcharacter.xmlに変換する.\r
-\r
- // eye_colorフォルダがあるか?\r
- File eyeColorFolder = new File(dir, "eye_color");\r
- boolean hasEyeColorFolder = eyeColorFolder.exists()\r
- && eyeColorFolder.isDirectory();\r
-\r
- DefaultCharacterDataVersion version;\r
- if (hasEyeColorFolder) {\r
- // eye_colorフォルダがあればver3形式とみなす.\r
- version = DefaultCharacterDataVersion.V3;\r
- } else {\r
- version = DefaultCharacterDataVersion.V2;\r
- }\r
-\r
- try {\r
- persist.convertFromCharacterIni(characterIniFile,\r
- characterXmlFile, version);\r
-\r
- } catch (Exception ex) {\r
- logger.log(Level.WARNING, "character.xmlの生成に失敗しました。:"\r
- + characterXmlFile, ex);\r
- }\r
- }\r
- }\r
- \r
- }\r
- \r
protected void onClose() {\r
selectedCharacterDir = null;\r
dispose();\r
logger.log(Level.INFO, "mkdirs(" + file+ ") succeeded=" + result);\r
}\r
if (file.isDirectory()) {\r
- checkCharacterNantokaDirs(file);\r
logger.log(Level.CONFIG, "selectedCharactersDir=" + file);\r
selectedCharacterDir = file;\r
doNotAskAgain = chkDoNotAsk.isSelected();\r