Пример #1
0
        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));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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));
        }
Пример #4
0
        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);
        }