コード例 #1
0
ファイル: SongDataCache.cs プロジェクト: zurgeg/riivolution
        public static SongData Load(FormatData data)
        {
            if (FormatData.LocalSongCache && Cache.ContainsKey(data))
            {
                return(Cache[data]);
            }
            CacheMutex.WaitOne();
            SongData song;

            try {
                Stream stream = data.GetStream("songdata");
                song = SongData.Create(stream);
                data.CloseStream(stream);
            } catch (Exception ex) {
                CacheMutex.ReleaseMutex();
                throw ex;
            }
            CacheMutex.ReleaseMutex();
            song.PropertyChanged += new Action <SongData>(data.Song_PropertyChanged);
            if (FormatData.LocalSongCache)
            {
                Cache[data] = song;
            }
            return(song);
        }
コード例 #2
0
        public override PlatformData Create(string path, Game game, ProgressIndicator progress)
        {
            PlatformData data = new PlatformData(this, game);

            DirectoryNode dir = data.GetDirectoryStructure(path);

            List <DirectoryNode> dirs = new List <DirectoryNode>();

            dirs.Add(dir);
            dirs.AddRange(dir.Directories);

            progress.NewTask(dirs.Count);

            foreach (DirectoryNode songdir in dirs)
            {
                data.Session["songdir"] = songdir;

                FileNode datafile    = songdir.Navigate("data", false, true) as FileNode;
                FileNode newdatafile = songdir.Navigate("songdata", false, true) as FileNode;
                if (datafile == null && newdatafile == null)
                {
                    Exceptions.Warning("Unable to find a custom in " + songdir.Filename);
                    continue;
                }

                try {
                    SongData song = null;
                    if (datafile != null)
                    {
                        song = HarmonixMetadata.GetSongData(data, DTB.Create(new EndianReader(datafile.Data, Endianness.LittleEndian)));
                        datafile.Data.Close();
                        AddSongOld(data, song, progress);
                    }
                    else
                    {
                        song = SongData.Create(newdatafile.Data);
                        newdatafile.Data.Close();
                        AddSongNew(data, song, progress);
                    }
                } catch (Exception exception) {
                    Exceptions.Error(exception, "Unable to open the custom from " + songdir.Filename);
                }

                progress.Progress();
            }
            progress.EndTask();

            return(data);
        }