75 lines
2.2 KiB
C++
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;
|
|
}
|
|
|
|
|