Files
Work/nntp/NEWSREG.CPP
2024-08-07 09:16:27 -04:00

75 lines
2.2 KiB
C++

#include <nntp/newsreg.hpp>
#include <common/string.hpp>
#include <common/regkey.hpp>
WORD NewsReg::queryGroups(Block<NewsGroup> &subscriberList,QueryType queryType)
{
RegKey regKey(RegKey::CurrentUser);
String groupName;
DWORD status;
DWORD groupIndex(0);
subscriberList.remove();
if(!regKey.openKey(mNewsGroupsKeyName))return FALSE;
while(regKey.enumValue(groupIndex++,groupName,status))
{
if(QueryActive==queryType&&!status)continue;
subscriberList.insert(&NewsGroup(groupName,status));
}
return (subscriberList.size()?TRUE:FALSE);
}
WORD NewsReg::addGroup(const String &groupName,DWORD active)
{
RegKey regKey(RegKey::CurrentUser);
Block<NewsGroup> subscriberList;
if(groupName.isNull())return FALSE;
if(!regKey.openKey(mNewsGroupsKeyName))
{
regKey.createKey(mNewsGroupsKeyName,"");
if(!regKey.openKey(mNewsGroupsKeyName))return FALSE;
}
queryGroups(subscriberList);
for(int itemIndex=0;itemIndex<subscriberList.size();itemIndex++)
if(groupName==subscriberList[itemIndex].newsGroup())return FALSE;
return regKey.setValue(groupName,active);
}
WORD NewsReg::setGroup(const String &newsGroup,DWORD active)
{
RegKey regKey(RegKey::CurrentUser);
if(!regKey.openKey(mNewsGroupsKeyName))
{
regKey.createKey(mNewsGroupsKeyName,"");
if(!regKey.openKey(mNewsGroupsKeyName))return FALSE;
}
return regKey.setValue(newsGroup,active);
}
WORD NewsReg::removeGroup(const String &groupName)
{
RegKey regKey;
Block<NewsGroup> subscriberList;
int prefixValue(0);
if(groupName.isNull())return FALSE;
if(!regKey.openKey(RegKey::CurrentUser,mNewsGroupsKeyName))return false;
queryGroups(subscriberList);
regKey.closeKey();
if(!regKey.openKey(RegKey::CurrentUser,mApplicationKeyName))return false;
regKey.deleteKey(mNewsGroupsShortName);
regKey.closeKey();
if(!regKey.createKey(RegKey::CurrentUser,mNewsGroupsKeyName))return false;
if(!regKey.openKey(RegKey::CurrentUser,mNewsGroupsKeyName))return false;
for(int itemIndex=0;itemIndex<subscriberList.size();itemIndex++)
{
if(!(groupName==subscriberList[itemIndex].newsGroup()))
regKey.setValue(subscriberList[itemIndex].newsGroup(),subscriberList[itemIndex].active());
}
return true;
}