private string GetArchive() { string result = null; if (CurrentDirectory > -1 && CurrentDirectory < Directories.Count && CurrentMonth > -1 && Months != null && CurrentMonth < Months.Count) { string dir = Path.GetFileName(Directories[CurrentDirectory]); string fileName = Path.GetFileName(Months[CurrentMonth]); if (dir != null && fileName != null) { string monthString = dir + "-" + fileName.Substring(5, 2); if (DateTime.TryParseExact(monthString, "yyyy-MM", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out DateTime parsed) && CurrentChatFilter.DuringMonth(parsed)) { var archive = ChatManager.OpenArchive(Months[CurrentMonth], ZipArchiveMode.Read); if (archive != null) { Entries = archive.Entries.Where(entry => { bool found = false; if (entry.Name != ChatManager.INDEX) { string dayString = monthString + "-" + entry.Name; if (DateTime.TryParseExact(dayString, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out DateTime day) && CurrentChatFilter.DuringDay(day)) { found = true; } } return(found); }).OrderByDescending(entry => entry.Name).Select(entry => entry.Name).ToList(); CurrentEntry = -1; result = Months[CurrentMonth]; archive.Dispose(); } } } if (result == null) { CurrentMonth++; return(GetArchive()); } } return(result); }
private StringReader GetNextReader() { StringReader result = null; CurrentEntry++; if (CurrentEntry < Entries.Count) { var archive = ChatManager.OpenArchive(Months[CurrentMonth], ZipArchiveMode.Read); if (archive != null) { var reader = new StreamReader(archive.GetEntry(Entries[CurrentEntry]).Open()); result = new StringReader(reader.ReadToEnd()); reader.Close(); archive.Dispose(); } } return(result); }