private ILoadProcess PrepareImpl(string cueSheetName) { var builtInData = m_builtinDatabase.Find(cueSheetName); if (m_remoteDatabase == null) { if (builtInData == null) { return(SkipLoadProcess.Create(cueSheetName)); } } var database = GetUseDatabase(cueSheetName); return(DownloadImpl(database, cueSheetName)); }
private ISoundLoadDatabase GetUseDatabase(string cueSheetName) { if (m_remoteDatabase == null) { // ログイン前は内包しか使えない return(m_builtinDatabase); } var remote = m_remoteDatabase.Find(cueSheetName); if (remote == null) { // リモートに無いなら内包しかない return(m_builtinDatabase); } var builtin = m_builtinDatabase.Find(cueSheetName); if (builtin == null) { // 内包に無いならリモートしかない return(m_remoteDatabase); } var matchAcb = builtin.Acb.Hash == remote.Acb.Hash; var matchAwb = builtin.Awb.Hash == remote.Awb.Hash; // リモートのとHashが一致してるなら内包ので良い if (matchAcb && matchAwb) { return(m_builtinDatabase); } return(m_remoteDatabase); }
private ILoadProcess DownloadImpl(ISoundLoadDatabase database, string cueSheetName) { var fileData = database.Find(cueSheetName); if (fileData == null) { ChipstarLog.Log_RequestCueSheet_Error(cueSheetName); return(SkipLoadProcess.Create(cueSheetName)); } ChipstarLog.Log_Download_Sound(fileData); ILoadProcess acbJob = SkipLoadProcess.Create(cueSheetName); var(acbUrl, awbUrl) = database.GetServerLocation(fileData); if (!HasAcb(fileData)) { acbJob = Download(acbUrl, fileData.Acb); } else { ChipstarLog.Log($"Cached :: {fileData.Acb.Identifier}"); } if (!fileData.HasAwb()) { // Awbファイルがないならココまで return(acbJob); } ILoadProcess awbJob = SkipLoadProcess.Create(cueSheetName); if (!HasAwb(fileData)) { awbJob = Download(awbUrl, fileData.Awb); } else { ChipstarLog.Log($"Cached :: {fileData.Awb.Identifier}"); } return(acbJob.ToJoin(awbJob)); }
private bool HasFileImpl(ISoundLoadDatabase database, string cueSheetName) { if (database == null) { return(false); } if (!database.Contains(cueSheetName)) { ChipstarLog.Log_NotContains_RemoteDB_Sound(cueSheetName); return(false); } // サウンドデータ var data = database.Find(cueSheetName); // --- acb-check if (!HasAcb(data)) { return(false); } if (!data.HasAwb()) { // Awb無いならここまででいい return(true); } // --- awb-check // if (!HasAwb(data)) { return(false); } return(true); }