// Them tat ca cac o dia hien co vao nut ROOT cua TreeView
BOOL TV_ThemODia()
{
	TCHAR szChuoiODia[101]; // Luu cac o dia hien co trong My Computer

	DWErr = GetLogicalDriveStrings(101, szChuoiODia); // Lay cac o dia co trong My Computer
	// Loi chua xac dinh
	if (DWErr == 0)
		ErrorExit(_T("ThemODia() \"GetLogicalDriveStrings\""));

	TCHAR szThongTin[PATHFILE_MAX_LEN];
	TCHAR *temp = szChuoiODia;
	TCHAR *szLParam; // szLParam[5] cho biet o dia da duoc expand lan nao chua
	TCHAR t[6];

	HTREEITEM hParent = TreeView_GetRoot(hwndTreeView);
	HTREEITEM hPrev = NULL;

	for (int i = 0; temp[i]; i += 4)
	{		
		szLParam = new TCHAR[5];
		wsprintf(szLParam, _T("%s"), temp + i);
		szLParam[4] = 0;

		// Lay thong tin ve o dia (Ten o dia)
		LayThongTinODia(temp + i, szThongTin);
		wsprintf(t, _T("%s*"), temp + i);	

		hPrev = addItemToTree(szThongTin, szLParam, hParent, hPrev, CoChuaThuMucCon(t));
	}

	return TRUE;
}
//  ---------------------------------------------------------------------
//    initTreeViewItems Function
//		Ham khoi tao va Add cac item vao TreeView
//		Cac item duoc lay tu My Computer
//  ---------------------------------------------------------------------
BOOL initTreeViewItems() 
{ 	
	HTREEITEM hParent = TVI_ROOT;
	HTREEITEM hPrev = NULL;
	// Them My Computer vao TreeView
	addItemToTree(_T("My Computer"), NULL, hParent, hPrev, TRUE);
	// Them cac o dia vao TreeView	
	TV_ThemODia();
	
	return TRUE;
} 
bool AntiSpamFrame::addToList(AntiSpamObjectState state, QString nick) {
    if (nick == "")
        return false;

    if (!AntiSpam::getInstance())
        return false;

    if (AntiSpam::getInstance()->isInAny(nick)) {//nick already in lists
        AntiSpamObjectState e;

        if (AntiSpam::getInstance()->isInBlack(nick))
            e = eIN_BLACK;
        else if (AntiSpam::getInstance()->isInGray(nick))
            e = eIN_GRAY;
        else
            e = eIN_WHITE;

        if (e == state)//in some list
            return false;

        AntiSpam::getInstance()->move(nick, state);

        QTreeWidget *tree = NULL;

        switch (e) {
            case eIN_BLACK:
                tree = treeWidget_BLACK;
                break;
            case eIN_GRAY:
                tree = treeWidget_GRAY;
                break;
            case eIN_WHITE:
                tree = treeWidget_WHITE;
                break;
        }
        remItemFromTree(tree, nick);

        tree = NULL;
        switch (state) {
            case eIN_BLACK:
                tree = treeWidget_BLACK;
                break;
            case eIN_GRAY:
                tree = treeWidget_GRAY;
                break;
            case eIN_WHITE:
                tree = treeWidget_WHITE;
                break;
        }
        addItemToTree(tree, nick);

        return true;
    }

    QTreeWidget *tree = NULL;

    (*AntiSpam::getInstance()) << state << nick;

    switch (state) {
        case eIN_BLACK:
            tree = treeWidget_BLACK;
            break;
        case eIN_GRAY:
            tree = treeWidget_GRAY;
            break;
        case eIN_WHITE:
            tree = treeWidget_WHITE;
    }

    addItemToTree(tree, nick);

    return true;
}
// Them tat ca cac thu muc con vao TreeView tai nut dang duoc chon
BOOL TV_ThemThuMucCon(TCHAR* szDuongDan, const HTREEITEM& T)
{
	WIN32_FIND_DATA FindFileData;
	HANDLE hFind;
	HTREEITEM hParent = T;
	HTREEITEM hPrev = NULL;
	TCHAR temp[265];
	
	wsprintf(temp, _T("%s*"), szDuongDan);
	hFind = FindFirstFile(temp, &FindFileData);
	if (hFind == INVALID_HANDLE_VALUE) 
	{
		int t = GetLastError();
		if (t == 21 // O CD, Floppy disk chua co dia
		  || t == 2) // Khong tim thay file nao, tuc o dia rong
		  return FALSE;
		// Loi chua xac dinh
		ErrorExit(_T("\"ThemThuMucCon() FindFirstFile\""));
	}

	// La thu muc
	if (wcscmp(FindFileData.cFileName, _T(".")) == 0)
	{
		// Bo qua thu muc ..
		FindNextFile(hFind, &FindFileData);
		FindNextFile(hFind, &FindFileData);
	}
	else; // La o dia

	bool flag = false;
	size_t len = wcslen(szDuongDan);

	wcscpy_s(temp, szDuongDan);
	
	// Tim tat ca cac thu muc con 
	size_t len1;
	do
	{
		// Thu muc
		if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			// Them vao cuoi chuoi duong dan cu ten thu muc vua tim duoc 
			// va chuoi "\*" de kiem tra thu muc nay co chua thu muc con hay khong
			temp[len] = 0;
			wcscat_s(temp, FindFileData.cFileName);
			len1 = wcslen(temp);
			temp[len1] = '\\';
			temp[len1 + 1] = '\0';
//			temp[len1 + 2] = '\0';

			// Tham so szLParam trong ham addItemToTree
			TCHAR *szLParam = new TCHAR[len1 + 3];
			wcscpy_s(szLParam, len1 + 3, temp);
			szLParam[len1 + 2] = 0; // Thong bao thu muc nay chua duoc expand lan nao

			temp[len1 + 1] = '*';
			temp[len1 + 2] = '\0';
			
			// Them thu muc con vao nut cha
			flag = true;
						
			hPrev = addItemToTree(FindFileData.cFileName, szLParam, hParent, hPrev, CoChuaThuMucCon(temp));
		}			  
	} while (FindNextFile(hFind, &FindFileData));
	FindClose(hFind);
	return flag;
}