/// <summary> /// スレッドを開く /// </summary> /// <param name="header"></param> public virtual void Open(ThreadHeader header) { if (header == null) { throw new ArgumentNullException("header"); } if (IsReading) { throw new InvalidOperationException("スレッドを読み込み中です"); } Close(); // 各フラグを設定 IsOpen = true; IsReading = true; modeOpen = true; headerInfo = header; // インデックス情報を読み込む if (ThreadIndexer.Exists(Cache, header)) { ThreadIndexer.Read(Cache, header); } string subj = (header.Subject != String.Empty) ? header.Subject : "[スレッド名不明]"; OnStatusTextChanged(subj + "を開いています"); ThreadRun(); }
private void ReadCache(ResSetCollection buff) { // 新規に開く場合のみキャッシュを読み込む if (modeOpen) { if (ThreadIndexer.Exists(Cache, headerInfo)) { ThreadIndexer.Read(Cache, headerInfo); try { storage = new LocalThreadStorage(Cache, headerInfo, StorageMode.Read); storage.BufferSize = bufferSize; // すべてのレスを読み込み表示 while (storage.Read(buff) != 0) { ; } } finally { if (storage != null) { storage.Close(); storage = null; } } buff.IsNew = false; } } }
/// <summary> /// インデックス一覧をファイルに保存 /// </summary> public void Save() { StreamWriter sw = null; try { sw = new StreamWriter(fileName, false, TwinDll.DefaultEncoding); foreach (ThreadHeader header in items) { if (ThreadIndexer.Exists(cache, header)) { // 相対パスに変換 string relative = Shlwapi.GetRelativePath( Application.StartupPath, cache.GetIndexPath(header)); sw.WriteLine(relative); } } } finally { if (sw != null) { sw.Close(); } } }
/// <summary> /// リーダーを開く /// </summary> private bool OpenReader() { aboneDetected = false; retried = false; // 未取得スレッドなら現在の設定を反映させる if (!ThreadIndexer.Exists(Cache, headerInfo)) { headerInfo.UseGzip = useGzip; } // 基本リーダーを作成 reader = CreateBaseReader(headerInfo.BoardInfo.Bbs); // リーダーを開く reader.BufferSize = bufferSize; reader.Open(headerInfo); return(reader.IsOpen); }