Ejemplo n.º 1
0
BOOL vmsDownloadsGroupsMgr::LoadFromDisk()
{
    fsString strFile = fsGetDataFilePath ("groups.sav");

    if (GetFileAttributes (strFile) == DWORD (-1))
    {
        fsDownloads_GroupsMgr grps;
        if (FALSE == grps.LoadGroups () || grps.GetCount () == 0)
        {
            CreateDefaultGroups ();
            return TRUE;
        }

        for (int i = 0; i < grps.GetCount (); i++)
        {
            fsDownloadGroup grp;
            grps.GetGroup (&grp, i);

            vmsDownloadsGroupSmartPtr grpNew;
            grpNew.CreateInstance ();
            grpNew->strName = grp.szName;
            grpNew->strOutFolder = grp.szOutFolder;
            grpNew->strExts = grp.szExts;
            grpNew->nId = grp.bOther ? GRP_OTHER_ID : m_nGrpNextId++;
            Add (grpNew, NULL, TRUE);
        }

        return TRUE;
    }



    HANDLE hFile = CreateFile (strFile, GENERIC_READ, FILE_SHARE_READ, NULL,
                               OPEN_EXISTING, 0, NULL);

    if (hFile != INVALID_HANDLE_VALUE)
    {
        vmsDownloadsGroupsFileHdr hdr;
        DWORD dw;
        if (ReadFile (hFile, &hdr, sizeof (hdr), &dw, NULL))
        {
            if (hdr.wVer == DLDSGRPSFILE_CURRENT_VERSION &&
                    lstrcmp (hdr.szSig,	DLDSGRPSFILE_SIG) == 0)
            {
                if (FALSE == ReadFile (hFile, &m_nGrpNextId, sizeof (UINT), &dw, NULL))
                    return FALSE;

                LoadGroupsTreeFromFile (hFile, m_tGroups);
            }
        }
        CloseHandle (hFile);
    }

    if (m_tGroups->GetLeafCount () == 0)
        CreateDefaultGroups ();

    return TRUE;
}
BOOL vmsDownloadsGroupsMgr::LoadGroupsTreeFromFile(HANDLE hFile, PDLDS_GROUPS_TREE pRoot)
{
	int cGroups = 0;
	DWORD dw;
	if (FALSE == ReadFile (hFile, &cGroups, sizeof (int), &dw, NULL))
		return FALSE;

	while (cGroups-- > 0)
	{
		vmsDownloadsGroupSmartPtr pGroup;
		pGroup.CreateInstance ();
		if (FALSE == LoadGroupFromFile (hFile, pGroup))
			return FALSE;
		PDLDS_GROUPS_TREE pGroupRoot = Add (pGroup, pRoot, TRUE, true);
		if (FALSE == LoadGroupsTreeFromFile (hFile, pGroupRoot))
			return FALSE;
	}

	return TRUE;
}