/// <summary> /// transfers actualized data from subTitleFile /// </summary> public void ReadFromSubTitleFile() { TimeSpan timOffsetTime; string strOffsetTime; // reading basic information strOffsetTime = this.Description.RightOf("(Offset ").LeftOf(")"); this.Description = this.Description.Replace("(Offset " + strOffsetTime + ")", string.Empty); TimeSpan.TryParse(strOffsetTime, out timOffsetTime); this.OffsetTime = timOffsetTime; // reading subtitle content if (this.URL == string.Empty || !File.Exists(this.URL)) { return; } using (StreamReader srdSrtFile = new StreamReader(this.URL, Encoding.UTF8)) { Configuration.SrtSubTitleLineType lineType = default(Configuration.SrtSubTitleLineType); SrtSubTitleFileEntry srtSubTitleFileEntry = new SrtSubTitleFileEntry(); lineType = Configuration.SrtSubTitleLineType.EntryNumber; while (true) { string srtLine = srdSrtFile.ReadLine(); // end of file if (srtLine == null) { break; } // additional empty lines (on end); just skipping if (srtLine == string.Empty && lineType == Configuration.SrtSubTitleLineType.EntryNumber) { continue; } srtSubTitleFileEntry.OffsetTime = this.OffsetTime; // end of SubTitleLines if (lineType == Configuration.SrtSubTitleLineType.SubTitles && srtLine == string.Empty) { this.SubTitleEntries.Add(srtSubTitleFileEntry); lineType = Configuration.SrtSubTitleLineType.EmptyLine; } // SubTitleLines if (lineType == Configuration.SrtSubTitleLineType.SubTitles && srtLine != string.Empty) { srtSubTitleFileEntry.SubTitleLines.Add(srtLine); lineType = Configuration.SrtSubTitleLineType.SubTitles; } // second Line -> Times if (lineType == Configuration.SrtSubTitleLineType.Times) { string strStartTime = srtLine.Substring(0, 12).Replace(",", "."); string strEndTime = srtLine.Substring(17, 12).Replace(",", "."); string timeExtentions = string.Empty; if (srtLine.Length > 30) { timeExtentions = srtLine.Substring(30, srtLine.Length); } TimeSpan timStartTime; TimeSpan timEndTime; TimeSpan.TryParse(strStartTime, out timStartTime); TimeSpan.TryParse(strEndTime, out timEndTime); srtSubTitleFileEntry.StartTime = timStartTime; srtSubTitleFileEntry.EndTime = timEndTime; srtSubTitleFileEntry.TimeExtentions = timeExtentions; lineType = Configuration.SrtSubTitleLineType.SubTitles; } // first Line -> EntryNumber if (lineType == Configuration.SrtSubTitleLineType.EntryNumber) { strOffsetTime = srtLine.RightOf("(Offset ").LeftOf(")"); srtLine = srtLine.Replace("(Offset " + strOffsetTime + ")", string.Empty); if (strOffsetTime != string.Empty) { TimeSpan.TryParse(strOffsetTime, out timOffsetTime); this.OffsetTime = timOffsetTime; } srtSubTitleFileEntry.EntryNumber = int.Parse(srtLine); lineType = Configuration.SrtSubTitleLineType.Times; } if (lineType == Configuration.SrtSubTitleLineType.EmptyLine) { srtSubTitleFileEntry = new SrtSubTitleFileEntry(); lineType = Configuration.SrtSubTitleLineType.EntryNumber; } } } }
/// <summary> /// clones SrtSubTitleFileEntry object completely /// </summary> /// <returns>new instance of SrtSubTitleFileEntry</returns> public SrtSubTitleFileEntry Clone() { SrtSubTitleFileEntry srtSubTitleFileEntryClone = new SrtSubTitleFileEntry(); srtSubTitleFileEntryClone.EntryNumber = this.EntryNumber; srtSubTitleFileEntryClone.StartTime = this.StartTime; srtSubTitleFileEntryClone.EndTime = this.EndTime; srtSubTitleFileEntryClone.OffsetTime = this.OffsetTime; srtSubTitleFileEntryClone.TimeExtentions = this.TimeExtentions; srtSubTitleFileEntryClone.SubTitleLines.AddRange(this.SubTitleLines); return srtSubTitleFileEntryClone; }