/**
 * 指定されたディレクトリの下に、指定された名前のディレクトリが存在するか確認して作成する
 */
void XrossBoardUtil::CreateSpecifyDirectory(wxDir& specifyDir, const wxString& dirName) 
{
     if (!specifyDir.HasSubDirs(dirName)) 
     {
	  ::wxMkdir(specifyDir.GetName() + wxFILE_SEP_PATH + dirName);
     }
}
Esempio n. 2
0
File: dir.cpp Progetto: beanhome/dev
wxArrayString DirTestCase::DirEnumHelper(wxDir& dir,
                                         int flags,
                                         const wxString& filespec)
{
    wxArrayString ret;
    CPPUNIT_ASSERT( dir.IsOpened() );

    wxString filename;
    bool cont = dir.GetFirst(&filename, filespec, flags);
    while ( cont )
    {
        ret.push_back(filename);
        cont = dir.GetNext(&filename);
    }

    return ret;
}
void ImportFilesDialogNew::DoBuildTree(const wxDataViewItem& parent, const wxDir& dir, bool initialState)
{
    wxString path;
    bool cont = dir.GetFirst(&path, "", wxDIR_DIRS);
    while (cont ) {

        wxVector<wxVariant> cols;
        cols.push_back( MakeIconText(path, PluginManager::Get()->GetStdIcons()->LoadBitmap("mime/16/folder") ) );
        cols.push_back(initialState);

        wxDir childDir( dir.GetNameWithSep() + path );
        wxDataViewItem child = m_dataviewModel->AppendItem(parent, cols, new ImportFilesDlgData( childDir.GetName(), initialState ));

        // Add dummy columns
        if ( childDir.IsOpened() && childDir.HasSubDirs() ) {
            wxVector<wxVariant> dummyCols;
            dummyCols.push_back( MakeIconText("dummy", PluginManager::Get()->GetStdIcons()->LoadBitmap("mime/16/folder") ) );
            dummyCols.push_back( false );
            m_dataviewModel->AppendItem( child, dummyCols, new ImportFilesDlgData("", false, true) );
        }
        cont = dir.GetNext(&path);
    }
}
/**
 * 指定された文字列でdatファイルへのファイルパスを組み立てる
 */
wxString XrossBoardUtil::AssembleFilePath(wxString& boardNameAscii,
					 wxString& origNumber,
					 const int kind) {

     wxString filePath = wxEmptyString;

     if (kind == KIND_THREAD_DAT) {
	  // スレッドのdatファイル
	  const wxDir dir(::wxGetHomeDir() + wxFILE_SEP_PATH + XROSSBOARD_DIR);
	  filePath = dir.GetName();

	  filePath += wxFILE_SEP_PATH;
	  filePath += wxT("dat");
	  filePath += wxFILE_SEP_PATH;
	  filePath += boardNameAscii;
	  filePath += wxFILE_SEP_PATH;
	  filePath += origNumber;
	  filePath += wxT(".dat");

     } else if (kind == KIND_BOARD__DAT) {
	  // 板一覧リストのdatファイル
	  const wxDir dir(::wxGetHomeDir() + wxFILE_SEP_PATH + XROSSBOARD_DIR);
	  filePath = dir.GetName();

	  filePath += wxFILE_SEP_PATH;
	  filePath += wxT("dat");
	  filePath += wxFILE_SEP_PATH;
	  filePath += boardNameAscii;
	  filePath += wxFILE_SEP_PATH;
	  filePath += boardNameAscii;
	  filePath += wxT(".dat");
     } else if (kind == KIND_DAT_PATH) {
	  // datファイルのあるパス
	  const wxDir dir(::wxGetHomeDir() + wxFILE_SEP_PATH + XROSSBOARD_DIR);
	  filePath = dir.GetName();

	  filePath += wxFILE_SEP_PATH;
	  filePath += wxT("dat");
     }

     return filePath;
}
/**
 * レスをIDで抽出してファイルから読み取ってDOM形式にして送り返す
 * @param  const wxString& boardNameAscii	  板名の英語名	
 * @param  const wxString& origNumber		  UNIXタイムベースのオリジナルな番号
 * @param  const wxString& extractId		  抽出対象のID
 * @return wxString	   取得したレスの内容
 */
wxString XrossBoardUtil::FindResponseById(const wxString& boardNameAscii, const wxString& origNumber, 
					 const wxString& extractId) {

     // ファイルパスの組み立てとファイルの有無確認
     const wxDir dir(::wxGetHomeDir() + wxFILE_SEP_PATH + XROSSBOARD_DIR);
     wxString filePath = dir.GetName();

     filePath += wxFILE_SEP_PATH;
     filePath += wxT("dat");
     filePath += wxFILE_SEP_PATH;
     filePath += boardNameAscii;
     filePath += wxFILE_SEP_PATH;
     filePath += origNumber;
     filePath += wxT(".dat");

     if (!wxFile::Exists(filePath)) {
	  // 無ければ空文字リターン
	  return wxEmptyString;
     }

     // HTMLのDOM形式にする
     wxString lumpOfHTML = HTML_HEADER_POPUP;

     wxString default_nanashi, mail, day_and_ID;

     /**
      * IDを抽出してポップアップさせる
      */
     wxTextFile datFile;
     datFile.Open(filePath, wxConvUTF8);

     for (int i = 0; i < datFile.GetLineCount(); i++) {

	  int curnumber = i + 1;
	  wxString str  = datFile[i];
	       
	  if (regexThread.IsValid() && curnumber > 1 && regexThread.Matches(str) && regexThread.GetMatch(str, 3).Contains(extractId) ) {
	       // >>1 以外の処理
	       // マッチさせたそれぞれの要素を取得する
	       default_nanashi = regexThread.GetMatch(str, 1);
	       mail = regexThread.GetMatch(str, 2);
	       day_and_ID = regexThread.GetMatch(str, 3);

	       lumpOfHTML += wxT("<dt>");
	       lumpOfHTML += wxString::Format(wxT("%d"), curnumber);

	       // レスの最初に<table>タグを入れる
	       wxString res;
	       res.Append(wxT("<table border=0 id=\"") + wxString::Format(wxT("%d"), curnumber) + wxT("\">"));
	       res.Append(regexThread.GetMatch(str, 4));
	       res.Append(wxT("</table>"));

	       // レス内部のURLに<a>タグをつける
	       res = ReplaceURLText(res);
	       // レスの最後に改行
	       res.Append(wxT(BR));

	       if (mail != wxEmptyString) {
		    // もしメ欄になにか入っているならば
		    lumpOfHTML += wxT(" 名前:<a href=\"mailto:");
		    lumpOfHTML += mail;
		    lumpOfHTML += wxT("\"><b>");
		    lumpOfHTML += default_nanashi;
		    lumpOfHTML += wxT("</b></a>");
		    lumpOfHTML += day_and_ID;
		    lumpOfHTML += wxT("<dd>");
		    lumpOfHTML += res;
	       } else {
		    // 空の場合
		    lumpOfHTML += wxT(" 名前:<font color=green><b>");
		    lumpOfHTML += default_nanashi;
		    lumpOfHTML += wxT("</b></font>");
		    lumpOfHTML += day_and_ID;
		    lumpOfHTML += wxT("<dd>");
		    lumpOfHTML += res;
	       }
	  } else if (regexThreadFst.IsValid() && curnumber == 1 && regexThreadFst.Matches(str) && regexThread.GetMatch(str, 3).Contains(extractId) ) {
	       // >>1 の場合の処理
	       // マッチさせたそれぞれの要素を取得する
	       default_nanashi = regexThreadFst.GetMatch(str, 1);
	       mail = regexThreadFst.GetMatch(str, 2);
	       day_and_ID = regexThreadFst.GetMatch(str, 3);

	       lumpOfHTML += wxT("<dt>");
	       lumpOfHTML += wxString::Format(wxT("%d"), curnumber);

	       // レスの最初に<table>タグを入れる
	       wxString res;
	       res.Append(wxT("<table border=0 id=\"") + wxString::Format(wxT("%d"), curnumber) + wxT("\">"));
	       res.Append(regexThreadFst.GetMatch(str, 4));
	       res.Append(wxT("</table>"));

	       // レス内部のURLに<a>タグをつける
	       res = ReplaceURLText(res);
	       // レスの最後に改行
	       res.Append(wxT(BR));

	       if (mail != wxEmptyString) {
		    // もしメ欄になにか入っているならば
		    lumpOfHTML += wxT(" 名前:<a href=\"mailto:");
		    lumpOfHTML += mail;
		    lumpOfHTML += wxT("\"><b>");
		    lumpOfHTML += default_nanashi;
		    lumpOfHTML += wxT("</b></a>");
		    lumpOfHTML += day_and_ID;
		    lumpOfHTML += wxT("<dd>");
		    lumpOfHTML += res;
	       } else {
		    // 空の場合
		    lumpOfHTML += wxT(" 名前:<font color=green><b>");
		    lumpOfHTML += default_nanashi;
		    lumpOfHTML += wxT("</b></font>");
		    lumpOfHTML += day_and_ID;
		    lumpOfHTML += wxT("<dd>");
		    lumpOfHTML += res;
	       }
	  }
     }

     datFile.Close();
     
     // HTMLソースを加える
     lumpOfHTML += HTML_FOOTER;

     return lumpOfHTML;

}
/**
 * アンカーで指定されたレスをファイルから読み取ってレスだけを返す
 *
 * @param  const wxString& boardNameAscii	  板名の英語名	
 * @param  const wxString& origNumber		  UNIXタイムベースのオリジナルな番号
 * @param  const long	   resNumber		  取得するレスの番号
 * @param  const bool	   useTriangularBrackets  true = 返り値に'>'がつく, false = '>'がつかない
 * @return wxString	   取得したレスの内容
 */
wxString XrossBoardUtil::FindAnchoredResponseText(const wxString& boardNameAscii, const wxString& origNumber, 
						 const long resNumber, const bool useTriangularBrackets) {

     // ファイルパスの組み立てとファイルの有無確認
     const wxDir dir(::wxGetHomeDir() + wxFILE_SEP_PATH + XROSSBOARD_DIR);
     wxString filePath = dir.GetName();

     filePath += wxFILE_SEP_PATH;
     filePath += wxT("dat");
     filePath += wxFILE_SEP_PATH;
     filePath += boardNameAscii;
     filePath += wxFILE_SEP_PATH;
     filePath += origNumber;
     filePath += wxT(".dat");

     if (!wxFile::Exists(filePath)) {
	  // 無ければ空文字リターン
	  return wxEmptyString;
     }
     // 取得するレス番
     int resNumInt = static_cast<int>(resNumber);

     // datファイルを読み込む
     wxTextFile datFile;
     datFile.Open(filePath, wxConvUTF8);
     wxString str;

     if (datFile.IsOpened() && 1 == resNumInt) {
	  str = datFile.GetFirstLine();
	  datFile.Close();

     } else if (datFile.IsOpened() && resNumInt > 1) {
	  datFile.GetFirstLine();

	  for (int i = 1; !datFile.Eof(); str = datFile.GetNextLine()) {
	       // 上から読み込んでレス番号にあたる行のレスを取得する
	       if (i == resNumInt) {
		    datFile.Close();
		    break;
	       }
	       ++i;
	  }
     }

     wxString res = wxEmptyString;
     
     if (useTriangularBrackets) {
	  res = wxT(">");
     }     

     // 正規表現でレスの内容を取り出してメモリに展開する

     /** ex) レスの形式
      *
      * [デフォルト名無し]<>[メ欄]<>[yyyy/mm/dd(D) HH:MM:SS:ss ID:aaaaaaaaa BE:xxxxxxxxx-2BE(n)]<>[書き込み]<>板名
      * [デフォルト名無し]<>[メ欄]<>[yyyy/mm/dd(D) HH:MM:SS:ss ID:aaaaaaaaa]<>[書き込み]<>
      */
     if (regexThread.IsValid() && resNumInt > 1) {
	  // >>1 以外の処理
	  if (regexThread.Matches(str)) {
	       res.Append(regexThread.GetMatch(str, 4));
	       // レスの最後に改行
	       res.Replace(wxT(BR), useTriangularBrackets ? wxT("\n>") : wxT("\n"), true);
	       res.Append(wxT("\n"));
	  }
     } else if (regexThreadFst.IsValid() && resNumInt == 1) {
	  // >>1 の場合の処理
	  if (regexThreadFst.Matches(str)) {
	       res.Append(regexThreadFst.GetMatch(str, 4));
	       // レスの最後に改行
	       res.Replace(wxT(BR), useTriangularBrackets ? wxT("\n>") : wxT("\n"), true);
	       res.Append(wxT("\n"));
	  }
     }

     // HTMLのタグを削除する
     if (regexHtmlTag.IsValid()) {
	  regexHtmlTag.ReplaceAll(&res, wxEmptyString);
     }

     // 実態参照文字を変換
     res = ConvCharacterReference(res);

     return res;
}
/**
 * アンカーで指定されたレスをファイルから読み取ってDOM形式にして送り返す
 * @param  const wxString& boardNameAscii	  板名の英語名	
 * @param  const wxString& origNumber		  UNIXタイムベースのオリジナルな番号
 * @param  const wxString& resNumberStart	  取得するレスの番号(開始点)
 * @param  const wxString& resNumberEnd		  取得するレスの番号(終了点)
 * @return wxString	   取得したレスの内容
 */
wxString XrossBoardUtil::FindAnchoredResponse(const wxString& boardNameAscii, const wxString& origNumber, 
					     const wxString& resNumberStart, const wxString& resNumberEnd) {

     // ファイルパスの組み立てとファイルの有無確認
     const wxDir dir(::wxGetHomeDir() + wxFILE_SEP_PATH + XROSSBOARD_DIR);
     wxString filePath = dir.GetName();

     // 複数レスをポップアップさせる
     bool popupMultiResponse = false;

     // 入力文字列の検証
     int start = wxAtoi(resNumberStart);
     if ( start < 0 || 1000 < start ) return wxEmptyString;
     
     int end   = 0;
     if (resNumberEnd != wxEmptyString) {
	  end = wxAtoi(resNumberEnd);
	  if ( end < 0 || 1000 < end ) {
	       return wxEmptyString;
	  }
	  // 複数レス用フラグを立てる
	  popupMultiResponse = true;
     }

     filePath += wxFILE_SEP_PATH;
     filePath += wxT("dat");
     filePath += wxFILE_SEP_PATH;
     filePath += boardNameAscii;
     filePath += wxFILE_SEP_PATH;
     filePath += origNumber;
     filePath += wxT(".dat");

     if (!wxFile::Exists(filePath)) {
	  // 無ければ空文字リターン
	  return wxEmptyString;
     }

     // HTMLのDOM形式にする
     wxString lumpOfHTML = HTML_HEADER_POPUP;

     wxString default_nanashi, mail, day_and_ID, res;

     if (popupMultiResponse) {
	  /**
	   * 複数レスをポップアップさせる
	   */
	  wxTextFile datFile;
	  datFile.Open(filePath, wxConvUTF8);
	  wxArrayString arraystr;

	  for (int i = start; i < end + 1; i++) {
	       arraystr.Add(datFile[i-1]);
	  }

	  datFile.Close();

	  for (int i = 0; i < arraystr.GetCount(); i++) {

	       int curnumber = i + start;
	       wxString str  = arraystr[i];
	       lumpOfHTML += wxT("<dt>");
	       lumpOfHTML += wxString::Format(wxT("%d"), curnumber);
	       
	       if (regexThread.IsValid() && curnumber > 1) {
		    // >>1 以外の処理
		    if (regexThread.Matches(str)) {
			 // マッチさせたそれぞれの要素を取得する
			 default_nanashi = regexThread.GetMatch(str, 1);
			 mail = regexThread.GetMatch(str, 2);
			 day_and_ID = regexThread.GetMatch(str, 3);

			 // レスの最初に<table>タグを入れる
			 res.Append(wxT("<table border=0 id=\"") + wxString::Format(wxT("%d"), curnumber) + wxT("\">"));
			 res.Append(regexThread.GetMatch(str, 4));
			 res.Append(wxT("</table>"));

			 // レス内部のURLに<a>タグをつける
			 res = ReplaceURLText(res);
			 // レスの最後に改行
			 res.Append(wxT(BR));
		    }
	       } else if (regexThreadFst.IsValid() && curnumber == 1) {
		    // >>1 の場合の処理
		    if (regexThreadFst.Matches(str)) {
			 // マッチさせたそれぞれの要素を取得する
			 default_nanashi = regexThreadFst.GetMatch(str, 1);
			 mail = regexThreadFst.GetMatch(str, 2);
			 day_and_ID = regexThreadFst.GetMatch(str, 3);

			 // レスの最初に<table>タグを入れる
			 res.Append(wxT("<table border=0 id=\"") + wxString::Format(wxT("%d"), curnumber) + wxT("\">"));
			 res.Append(regexThreadFst.GetMatch(str, 4));
			 res.Append(wxT("</table>"));

			 // レス内部のURLに<a>タグをつける
			 res = ReplaceURLText(res);
			 // レスの最後に改行
			 res.Append(wxT(BR));
		    }
	       }

	       if (mail != wxEmptyString) {
		    // もしメ欄になにか入っているならば
		    lumpOfHTML += wxT(" 名前:<a href=\"mailto:");
		    lumpOfHTML += mail;
		    lumpOfHTML += wxT("\"><b>");
		    lumpOfHTML += default_nanashi;
		    lumpOfHTML += wxT("</b></a>");
		    lumpOfHTML += day_and_ID;
		    lumpOfHTML += wxT("<dd>");
		    lumpOfHTML += res;
	       } else {
		    // 空の場合
		    lumpOfHTML += wxT(" 名前:<font color=green><b>");
		    lumpOfHTML += default_nanashi;
		    lumpOfHTML += wxT("</b></font>");
		    lumpOfHTML += day_and_ID;
		    lumpOfHTML += wxT("<dd>");
		    lumpOfHTML += res;
	       }
	  }

     } else {
	  /**
	   * 単独レスをポップアップさせる
	   */
	  
	  wxTextFile datFile;
	  datFile.Open(filePath, wxConvUTF8);
	  wxString str;

	  if (datFile.IsOpened() && 1 == start) {
	       str = datFile.GetFirstLine();
	       datFile.Close();

	  } else if (datFile.IsOpened() && start > 1) {
	       datFile.GetFirstLine();

	       for (int i = 1; !datFile.Eof(); str = datFile.GetNextLine()) {
		    // 上から読み込んでレス番号にあたる行のレスを取得する
		    if (i == start) {
			 datFile.Close();
			 break;
		    }
		    ++i;
	       }
	  }

	  // 正規表現でレスの内容を取り出してメモリに展開する
	  lumpOfHTML += wxT("<dt>");
	  lumpOfHTML += resNumberStart;

	  /** ex) レスの形式
	   *
	   * [デフォルト名無し]<>[メ欄]<>[yyyy/mm/dd(D) HH:MM:SS:ss ID:aaaaaaaaa BE:xxxxxxxxx-2BE(n)]<>[書き込み]<>板名
	   * [デフォルト名無し]<>[メ欄]<>[yyyy/mm/dd(D) HH:MM:SS:ss ID:aaaaaaaaa]<>[書き込み]<>
	   */
	  if (regexThread.IsValid() && start > 1) {
	       // >>1 以外の処理
	       if (regexThread.Matches(str)) {
		    // マッチさせたそれぞれの要素を取得する
		    default_nanashi = regexThread.GetMatch(str, 1);
		    mail = regexThread.GetMatch(str, 2);
		    day_and_ID = regexThread.GetMatch(str, 3);

		    // レスの最初に<table>タグを入れる
		    res.Append(wxT("<table border=0 id=\"") + resNumberStart + wxT("\">"));
		    res.Append(regexThread.GetMatch(str, 4));
		    res.Append(wxT("</table>"));

		    // レス内部のURLに<a>タグをつける
		    res = ReplaceURLText(res);
		    // レスの最後に改行
		    res.Append(wxT(BR));
	       }
	  } else if (regexThreadFst.IsValid() && start == 1) {
	       // >>1 の場合の処理
	       if (regexThreadFst.Matches(str)) {
		    // マッチさせたそれぞれの要素を取得する
		    default_nanashi = regexThreadFst.GetMatch(str, 1);
		    mail = regexThreadFst.GetMatch(str, 2);
		    day_and_ID = regexThreadFst.GetMatch(str, 3);

		    // レスの最初に<table>タグを入れる
		    res.Append(wxT("<table border=0 id=\"") + resNumberStart + wxT("\">"));
		    res.Append(regexThreadFst.GetMatch(str, 4));
		    res.Append(wxT("</table>"));

		    // レス内部のURLに<a>タグをつける
		    res = ReplaceURLText(res);
		    // レスの最後に改行
		    res.Append(wxT(BR));
	       }
	  }

	  if (mail != wxEmptyString) {
	       // もしメ欄になにか入っているならば
	       lumpOfHTML += wxT(" 名前:<a href=\"mailto:");
	       lumpOfHTML += mail;
	       lumpOfHTML += wxT("\"><b>");
	       lumpOfHTML += default_nanashi;
	       lumpOfHTML += wxT("</b></a>");
	       lumpOfHTML += day_and_ID;
	       lumpOfHTML += wxT("<dd>");
	       lumpOfHTML += res;
	  } else {
	       // 空の場合
	       lumpOfHTML += wxT(" 名前:<font color=green><b>");
	       lumpOfHTML += default_nanashi;
	       lumpOfHTML += wxT("</b></font>");
	       lumpOfHTML += day_and_ID;
	       lumpOfHTML += wxT("<dd>");
	       lumpOfHTML += res;
	  }
     }
     
     // HTMLソースを加える
     lumpOfHTML += HTML_FOOTER;

     return lumpOfHTML;
}
Esempio n. 8
0
    wxRCT3Filler(wxSQLite3Database* db, const wxDir& root): m_db(db),
//        m_pd(_("Scanning RCT3 Directory"), wxT("Scanning"), 1000, NULL, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_ELAPSED_TIME),
        m_pd(),
        m_root(root.GetName(), wxT("")) {};