예제 #1
0
        // (0.6.0)
        #region *[static]XML要素からオブジェクトを生成(Generate)
        public static SeekPosition Generate(XElement seekElement)
        {
            var seek_pos = new SeekPosition();

            var position = (TimeSpan?)seekElement.Attribute(POSITION_ATTRIBUTE);

            if (position.HasValue)
            {
                seek_pos.Position = position.Value;
            }

            var comment = (string)seekElement.Attribute(COMMENT_ATTRIBUTE);

            if (!string.IsNullOrEmpty(comment))
            {
                seek_pos.Comment = comment;
            }

            return(seek_pos);
        }
예제 #2
0
        // (0.6.0)SeekPositionに対応、
        // (0.4.3)memo要素に対応。
        // (0.3.3)
        #region *[static]XML要素からオブジェクトを生成(Generate)
        public static SweetQuestion Generate(XElement questionElement, string songsRoot = null)
        {
            var question = new SweetQuestion();

            // XMLからインスタンスを生成するならばIDは常にあるのでは?
            // →songをインポートする時とかはそうではないかもしれない?ので一応有無をチェックする.
            // →でも,インポートする時はXML経由ではなくオブジェクト経由で行った方がいいのでは?(ファイル名のパスの扱いとか...)
            var id_attribute = questionElement.Attribute(ID_ATTRIBUTE);

            if (id_attribute != null)
            {
                question.ID = (int)id_attribute;
            }
            question.Category = (string)questionElement.Attribute(CATEGORY_ATTRIBUTE);

            question.No = (int?)questionElement.Attribute(NO_ATTRIBUTE);

            question.Title  = (string)questionElement.Element(TITLE_ELEMENT);
            question.Artist = (string)questionElement.Element(ARTIST_ELEMENT);
            var file_name = (string)questionElement.Element(FILE_NAME_ELEMENT);                 // 相対パスをフルパスに直す作業が必要!

            if (!Path.IsPathRooted(file_name))
            {
                file_name = Path.Combine(songsRoot, file_name);
                if (!Path.IsPathRooted(file_name))
                {
                    throw new ArgumentException("ファイル名が相対パスで記録されています.songsRootには,絶対パスを指定して下さい.", "songsRoot");
                }
            }
            question.FileName = file_name;
            var sabi_pos = (double?)questionElement.Attribute(SABI_POS_ATTRIBUTE);

            if (sabi_pos.HasValue)
            {
                question.SabiPos = TimeSpan.FromSeconds(sabi_pos.Value);
            }
            var play_pos = (double?)questionElement.Attribute(PLAY_POS_ATTRIBUTE);

            if (play_pos.HasValue)
            {
                question.PlayPos = TimeSpan.FromSeconds(play_pos.Value);
            }
            var stop_pos = (double?)questionElement.Attribute(STOP_POS_ATTRIBUTE);

            if (stop_pos.HasValue)
            {
                question.StopPos = TimeSpan.FromSeconds(stop_pos.Value);
            }

            var memo = (string)questionElement.Element(MEMO_ELEMENT);

            if (!string.IsNullOrEmpty(memo))
            {
                question.Memo = memo;
            }

            foreach (var seek_element in questionElement.Elements(SeekPosition.ELEMENT_NAME))
            {
                question.SeekPositionList.Add(SeekPosition.Generate(seek_element));
                ;
            }

            return(question);
        }