summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Dashevskiy <watcherhd@gmail.com>2013-03-19 17:47:43 +0000
committerVadim Dashevskiy <watcherhd@gmail.com>2013-03-19 17:47:43 +0000
commit94a648222a4f16327fb763f6575622ad5c7b9ff6 (patch)
treef083af101bced3cd7faf5b6ae1b5145aec653189
parent41129d7c8f96a75b97748d11cd7586e0c7f128a4 (diff)
- reinstated
git-svn-id: http://svn.miranda-ng.org/main/trunk@4114 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r--plugins/!NotAdopted/rps/Docs/rps_changelog.txt22
-rw-r--r--plugins/!NotAdopted/rps/Docs/rps_readme.txt22
-rw-r--r--plugins/!NotAdopted/rps/Docs/rps_version.txt1
-rw-r--r--plugins/!NotAdopted/rps/RemovePersonalSettings.ini247
-rw-r--r--plugins/!NotAdopted/rps/ZIP/doit.bat58
-rw-r--r--plugins/!NotAdopted/rps/rps.c833
-rw-r--r--plugins/!NotAdopted/rps/rps.dsp127
-rw-r--r--plugins/!NotAdopted/rps/rps.dsw33
8 files changed, 1343 insertions, 0 deletions
diff --git a/plugins/!NotAdopted/rps/Docs/rps_changelog.txt b/plugins/!NotAdopted/rps/Docs/rps_changelog.txt
new file mode 100644
index 0000000000..1b1091452b
--- /dev/null
+++ b/plugins/!NotAdopted/rps/Docs/rps_changelog.txt
@@ -0,0 +1,22 @@
+Remove Personal Settings
+
+Changelog:
+
+. 0.1.0.4
+ + Added * to delete module names
+ + Added miranda 0.8 support
+ + Updated ini file
+
+. 0.1.0.3
+ + Added option to delete modules based on a sufix of the protocol name
+ + Added * to delete settings names
+ + Added config to delete alarms and sent files
+
+. 0.1.0.2
+ + Added SetProtocolsOffline
+ * Bugfixes
+
+. 0.1.0.1
+ + Added RemoveWholeProtocolModule
+ + Added DisabledProtocols to delete settings from these
+ + Added deletion of events from DB \ No newline at end of file
diff --git a/plugins/!NotAdopted/rps/Docs/rps_readme.txt b/plugins/!NotAdopted/rps/Docs/rps_readme.txt
new file mode 100644
index 0000000000..f6aed13a06
--- /dev/null
+++ b/plugins/!NotAdopted/rps/Docs/rps_readme.txt
@@ -0,0 +1,22 @@
+Remove Personal Settings plugin
+-------------------------------
+
+WARNING: THIS PLUGIN DELETE SETTINGS FROM MIRANDA DB AND FROM THE HD. THIS CAN'T BE UNDONE. IT CAN DELETE ALL FILES IN YOUR COMPUTER (ALTOUGHT IT NEVER HAPPENED TO ME :P ). USE IT AT YOUR OWN RISK.
+
+This is a plugin that removes personal settings from database.
+
+It can remove all users, remove some files and directories from miranda dir (but only if these aren't beeing used), call services and disable plugins. To do that it is based in a configuration .ini file. If you need some especial configuration (and probabily you will need, because I just put some settings there, but I bet I forgot some), just edit the file RemovePersonalSettings.ini
+
+The idea for using this plugin is to allow sending a copy of you miranda with your actual configuration, but without your personal settings. To use it, you should:
+1) Copy the hole miranda dir to other location
+2) Enable the plugin (if it isn't enabled)
+4) Set global status to offline
+3) Run the menu option "Remove personal settings..."
+4) Exit miranda
+4) Run DBTOOL.EXE to compact sweeped database file
+5) Pack and send to your friend
+
+I made this based on the discussion in the thread:
+http://forums.miranda-im.org/showthread.php?t=5224. I asked the source from nullbie and made my version of the plugin.
+
+To report bugs/make suggestions, go to the forum thread: http://forums.miranda-im.org/showthread.php?t=5451
diff --git a/plugins/!NotAdopted/rps/Docs/rps_version.txt b/plugins/!NotAdopted/rps/Docs/rps_version.txt
new file mode 100644
index 0000000000..affe4aa1c3
--- /dev/null
+++ b/plugins/!NotAdopted/rps/Docs/rps_version.txt
@@ -0,0 +1 @@
+Remove Personal Settings 0.1.0.4 \ No newline at end of file
diff --git a/plugins/!NotAdopted/rps/RemovePersonalSettings.ini b/plugins/!NotAdopted/rps/RemovePersonalSettings.ini
new file mode 100644
index 0000000000..789803de56
--- /dev/null
+++ b/plugins/!NotAdopted/rps/RemovePersonalSettings.ini
@@ -0,0 +1,247 @@
+[GlobalSettings]
+; Set protocol status to offline before any other action
+; true or false
+; default=true
+SetProtocolsOffline=true
+
+; Remove all folders that have protocol names inside miranda folder
+; true or false
+; default=true
+RemoveProtocolFolders=true
+
+; Remove all miranda users
+; true or false
+; default=true
+RemoveAllUsers=true
+
+; Remove some default settings for all enabled protocols
+; The name of the module has to be the same name as the name of the protocol
+; These are the ones under ProtocolSettings
+; true or false
+; default=true
+RemoveProtocolSettings=true
+
+; Remove all settings inside the protocol module
+; (and not only the ones at ProtocolSettings)
+; true or false
+; default=false
+RemoveWholeProtocolModule=false
+
+[DisabledProtocols]
+; Names of protocols that are disabled, but have to has its settings deleted
+; The case must be correct!
+YAHOO
+YAHOO1
+YAHOO2
+YAHOO3
+YAHOO4
+MSN
+MSN1
+MSN2
+MSN3
+MSN4
+ICQ
+ICQ1
+ICQ2
+ICQ3
+ICQ4
+GG
+GG1
+GG2
+GG3
+GG4
+JABBER
+JABBER1
+JABBER2
+JABBER3
+JABBER4
+JGMAIL
+JGMAIL1
+JGMAIL2
+JGMAIL3
+JGMAIL4
+MEEBO
+MEEBO1
+MEEBO2
+MEEBO3
+MEEBO4
+AIM
+AIM1
+AIM2
+AIM3
+AIM4
+SKYPE
+MYSPACE
+
+[ProtocolSettings]
+; Settings that will be erased for all enabled protocols if RemoveProtocolSettings == true
+; Names with spaces or strange chars must be surrounded by "
+Password
+"Nick"
+LoginName
+DisplayName
+PNick
+SN
+Name
+FirstName
+LastName
+Username
+UserName
+User
+UID
+Timezone
+e-mail
+Email
+email
+UIN
+IdleTS
+InfoTS
+LogonTS
+MemberTS
+LastSyncTime
+PictObject
+YourHost
+AvatarFile
+AvatarFilename
+AvatarHash
+AvatarSaved
+ImageURL
+BirthDay
+BirthMonth
+BirthYear
+MaritalStatus
+Gender
+Age
+CompanyOccupation
+Country
+OriginCountry
+Location
+InfoCP
+PublishPrimaryEmail
+SrvAvatarID
+SrvDefGroupId
+SrvLastUpdate
+SrvRecordCount
+SrvVisibility
+SrvVisibilityID
+XStatusMsg
+XStatusMessage
+AlernativeNick
+Status
+ServerComboSelection
+UserID
+Resource
+FirstRun
+WebAvare
+FullName
+LoginName
+"First Name"
+"Last Name"
+jid
+Profile
+NLProxyPort
+NLProxyServer
+City
+Language1
+Language2
+Language3
+Past0
+IP
+RealIP
+State
+QuitMessage
+UserInfo
+GenderString
+GoogleToken
+Override
+yahoo_id
+AvatarURL
+AvatarInv
+
+[ProtocolModuleSufixes]
+; Strings here will be appended to each protocol name and the module with this name
+; will be deleted (the whole module)
+; Names with spaces or strange chars must be surrounded by "
+Groups
+SrvGroups
+P2P
+:HotmailNotify
+
+[RemoveSettings]
+; Settings that should be removed
+; Only from hContact == NULL
+; To remove a module, use ModuleName
+; To remove a setting, use ModuleName/SettingName
+; To remove all settings that start with a name, use * as last char
+; Ex: Test/Test*
+; To remove all settings that end with a name, use * as first key char
+; Ex: Test/*Test
+; Settings are case sensitive
+; Names with spaces or strange chars must be surrounded by "
+"Gmail Notifier/name"
+"Gmail Notifier/pass"
+POP3
+pattern
+Options
+ContactPhoto/File
+MIMImport
+*/Password
+*/password
+FTPFile/password
+FTPFile/user
+FTPFile/url
+FTPFile/server
+SMSPlugin
+SRFile/MruDir*
+SRFile/RecvFilesDirAdv
+UserOnline
+WebSMS-Plugin/LastNumber*
+WebSMS-Plugin/LastPrefix*
+"WinPopup Protocol/Nick"
+"WinPopup Protocol/User"
+"WinPopup Protocol/Workgroup"
+NET_SEND/loging_name
+Alarm/ActionFlags*
+Alarm/Desc*
+Alarm/Hidden*
+Alarm/Occ*
+Alarm/NoStartup*
+Alarm/Snoozer*
+Alarm/SoundNum*
+Alarm/STDay*
+Alarm/STHour*
+Alarm/STMinute*
+Alarm/STMonth*
+Alarm/STSecond*
+Alarm/STYear*
+Alarm/Suspended*
+Alarm/Title*
+*/NLProxyPort
+*/NLProxyServer
+QuickContacts/LastSentTo
+VersionInfo/UploadPassword
+VersionInfo/UploadUser
+
+[ExecuteServices]
+; Always calls passing 0 as wParam and lParam
+; Names with spaces or strange chars must be surrounded by "
+DB3XS/RemovePassword
+
+[RemoveFilesOrFolders]
+; This should be names inside miranda folder
+; Names with spaces or strange chars must be surrounded by "
+; * and ? can be used
+Avatars
+"Avatars History"
+Logs
+"Received Files"
+tabSRMM
+Updates
+UpdateData
+UpdateBackups
+yamn-accounts.pop3.*.book
+
+[DisablePlugins]
+; Plugins dlls to be disabled
+; Names with spaces or strange chars must be surrounded by "
+RemovePersonalSettings.dll
diff --git a/plugins/!NotAdopted/rps/ZIP/doit.bat b/plugins/!NotAdopted/rps/ZIP/doit.bat
new file mode 100644
index 0000000000..47911225d3
--- /dev/null
+++ b/plugins/!NotAdopted/rps/ZIP/doit.bat
@@ -0,0 +1,58 @@
+@echo off
+
+rem Batch file to build and upload files
+rem
+rem TODO: Integration with FL
+
+set name=rps
+
+rem To upload, this var must be set here or in other batch
+rem set ftp=ftp://<user>:<password>@<ftp>/<path>
+
+echo Building %name% ...
+
+msdev ..\%name%.dsp /MAKE "%name% - Win32 Release" /REBUILD
+
+echo Generating files for %name% ...
+
+del *.zip
+del *.dll
+copy ..\Docs\%name%_changelog.txt
+copy ..\Docs\%name%_version.txt
+copy ..\Docs\%name%_readme.txt
+mkdir Docs
+cd Docs
+del /Q *.*
+copy ..\..\Docs\%name%_readme.txt
+cd ..
+mkdir Plugins
+cd Plugins
+del /Q *.*
+copy ..\..\..\..\bin\release\Plugins\RemovePersonalSettings.dll
+copy ..\..\RemovePersonalSettings.ini
+cd ..
+
+"C:\Program Files\Filzip\Filzip.exe" -a -rp %name%.zip Docs Plugins
+
+cd Docs
+del /Q *.*
+cd ..
+rmdir Docs
+cd Plugins
+del /Q *.*
+cd ..
+rmdir Plugins
+
+if "%ftp%"=="" GOTO END
+
+echo Going to upload files...
+pause
+
+"C:\Program Files\FileZilla\FileZilla.exe" -u .\%name%.zip %ftp% -overwrite -close
+"C:\Program Files\FileZilla\FileZilla.exe" -u .\%name%_changelog.txt %ftp% -overwrite -close
+"C:\Program Files\FileZilla\FileZilla.exe" -u .\%name%_version.txt %ftp% -overwrite -close
+"C:\Program Files\FileZilla\FileZilla.exe" -u .\%name%_readme.txt %ftp% -overwrite -close
+
+:END
+
+echo Done.
diff --git a/plugins/!NotAdopted/rps/rps.c b/plugins/!NotAdopted/rps/rps.c
new file mode 100644
index 0000000000..d358f12ae0
--- /dev/null
+++ b/plugins/!NotAdopted/rps/rps.c
@@ -0,0 +1,833 @@
+/*
+
+Miranda IM: the free IM client for Microsoft* Windows*
+
+Copyright 2000-2005 Miranda ICQ/IM project,
+all portions of this codebase are copyrighted to the people
+listed in contributors.txt.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+Created by Pescuma
+Based on work by nullbie
+
+*/
+#include <windows.h>
+#include <io.h>
+#include <stdio.h>
+#include <newpluginapi.h>
+#include <m_clist.h>
+#include <m_skin.h>
+#include <m_langpack.h>
+#include <m_protocols.h>
+#include <m_protosvc.h>
+#include <m_utils.h>
+#include <m_database.h>
+
+#define MIID_REMOVEPERSONALSETTINGS { 0x5eaec989, 0x8ff, 0x4820, { 0xb8, 0x6c, 0x2b, 0x6e, 0xf0, 0x8e, 0x33, 0x73 } }
+
+#define INI_FILE_NAME "RemovePersonalSettings.ini"
+
+#define PLUGINDISABLELIST "PluginDisable"
+
+#define METACONTACTS_PROTOCOL_NAME "MetaContacts"
+
+
+HINSTANCE hInst;
+PLUGINLINK *pluginLink;
+char gIniFile[MAX_PATH];
+char gMirandaDir[MAX_PATH];
+
+
+PLUGININFOEX pluginInfo={
+ sizeof(PLUGININFO),
+ "Remove Personal Settings",
+ PLUGIN_MAKE_VERSION(0,1,0,4),
+ "Remove personal settings to allow to send a profile to other user(s) without sending personal data.",
+ "Ricardo Pescuma Domenecci",
+ "",
+ "© 2007-2009 Ricardo Pescuma Domenecci",
+ "http://pescuma.org/miranda/rps",
+ 0, //not transient
+ 0, //doesn't replace anything built-in
+ { 0x60e94b84, 0xa799, 0x4021, { 0x94, 0x49, 0x5b, 0x83, 0x8f, 0xc0, 0x6a, 0x7c } } // {60E94B84-A799-4021-9449-5B838FC06A7C}
+};
+
+
+int RemoveAllService(WPARAM wParam,LPARAM lParam);
+void SetProtocolsOffline();
+void RemoveUsers();
+void RemoveSettings();
+void ExecuteServices();
+void RemoveDirectories();
+void DisablePlugins();
+
+// Ini access functions
+BOOL GetSettingBool(const char *section, const char *key, BOOL defaultValue);
+BOOL GetSettings(const char *section, char *buffer, size_t bufferSize);
+
+
+// Utils
+void DeleteFileOrFolder(const char *name);
+void DeleteSetting(const char *setting);
+void DeleteSettingEx(const char *szModule, const char *szSetting);
+BOOL isMetaContact(HANDLE hContact);
+
+
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
+{
+ hInst=hinstDLL;
+ return TRUE;
+}
+
+
+__declspec(dllexport) PLUGININFO* MirandaPluginInfo(DWORD mirandaVersion)
+{
+ // Are we running under Unicode Windows version ?
+ if ((GetVersion() & 0x80000000) == 0)
+ pluginInfo.flags = 1; // UNICODE_AWARE
+
+ pluginInfo.cbSize = sizeof(PLUGININFO);
+ return (PLUGININFO*) &pluginInfo;
+}
+
+
+__declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ // Are we running under Unicode Windows version ?
+ if ((GetVersion() & 0x80000000) == 0)
+ pluginInfo.flags = 1; // UNICODE_AWARE
+
+ pluginInfo.cbSize = sizeof(PLUGININFOEX);
+ return &pluginInfo;
+}
+
+
+static const MUUID interfaces[] = { MIID_REMOVEPERSONALSETTINGS, MIID_LAST };
+__declspec(dllexport) const MUUID* MirandaPluginInterfaces(void)
+{
+ return interfaces;
+}
+
+
+int __declspec(dllexport) Load(PLUGINLINK *link)
+{
+ CLISTMENUITEM mi;
+ char *strTmp;
+
+ pluginLink=link;
+ CreateServiceFunction("RemovePersonalSettings/RemoveAll",RemoveAllService);
+ ZeroMemory(&mi,sizeof(mi));
+ mi.cbSize=sizeof(mi);
+ mi.position=-0x7FFFFFFF;
+ mi.flags=0;
+ mi.hIcon=LoadSkinnedIcon(SKINICON_OTHER_MIRANDA);
+ mi.pszName="Remove Personal Settings...";
+ mi.pszService="RemovePersonalSettings/RemoveAll";
+ CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi);
+
+ // Get ini file name
+ gMirandaDir[0] = '\0';
+ GetModuleFileName(GetModuleHandle(NULL),gMirandaDir,sizeof(gMirandaDir));
+
+ // Remove last name
+ strTmp = strrchr(gMirandaDir,'\\');
+ if(strTmp != NULL)
+ *strTmp = '\0';
+
+ // Set vars
+ strcat(gMirandaDir, "\\");
+ strcpy(gIniFile, gMirandaDir);
+
+ // Store last pos
+ strTmp = &gIniFile[strlen(gIniFile)];
+
+ // Lets try fist name
+ strcpy(strTmp, INI_FILE_NAME);
+
+ if (_access(gIniFile, 4) != 0)
+ {
+ // Not found, lets try the other aproach
+ strcpy(strTmp, "plugins\\" INI_FILE_NAME);
+
+ if (_access(gIniFile, 4) != 0)
+ {
+ // Not found :(
+ gIniFile[0] = '\0';
+ }
+ }
+
+ return 0;
+}
+
+
+int __declspec(dllexport) Unload(void)
+{
+ return 0;
+}
+
+
+int RemoveAllService(WPARAM wParam,LPARAM lParam)
+{
+ if (gIniFile[0] == '\0')
+ {
+ MessageBox(NULL, Translate("Configuration file could not be found!"), Translate("Remove Personal Settings"), MB_OK | MB_ICONERROR);
+ return -1;
+ }
+
+ if (MessageBox(NULL,Translate("All your personal settings will be erased!\n"
+ "Make sure you are running this from a copy of your profile (and not over the original one).\n"
+ "Running this will erase files/folders under Miranda main folder.\n"
+ "\n"
+ "Are you sure you want to remove all your personal settings?\n"
+ "\n"
+ "(You cannot say that I don't told you about the risks :P )"), Translate("Remove Personal Settings"),MB_YESNO)
+ == IDYES)
+ {
+ SetProtocolsOffline();
+ RemoveUsers();
+ RemoveSettings();
+ ExecuteServices();
+ RemoveDirectories();
+ DisablePlugins();
+
+ MessageBox(NULL,Translate("Settings are deleted now."), Translate("Remove Personal Settings"),MB_OK | MB_ICONINFORMATION);
+ }
+
+ return 0;
+}
+
+void SetProtocolsOffline()
+{
+ if ( GetSettingBool("GlobalSettings", "SetProtocolsOffline", TRUE) )
+ {
+ PROTOCOLDESCRIPTOR **protos;
+ int i,count;
+
+ CallService(MS_PROTO_ENUMPROTOCOLS, (WPARAM)&count, (LPARAM)&protos);
+
+ for (i = 0; i < count; i++)
+ {
+ if (protos[i]->type != PROTOTYPE_PROTOCOL)
+ continue;
+
+ if (protos[i]->szName == NULL || protos[i]->szName[0] == '\0')
+ continue;
+
+ CallProtoService(protos[i]->szName, PS_SETSTATUS, ID_STATUS_OFFLINE, 0);
+ }
+
+ // Give some time to make it really offline
+ Sleep(2000);
+ }
+}
+
+void RemoveUsers()
+{
+ if ( GetSettingBool("GlobalSettings", "RemoveAllUsers", TRUE) )
+ {
+ HANDLE hContact;
+ HANDLE hDbEvent;
+ HANDLE hContactOld;
+
+ // To be faster, remove first all metacontacts (because it syncs histories)
+ hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+ while(hContact != NULL)
+ {
+ hContactOld = hContact;
+ hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0);
+
+ if ( isMetaContact(hContactOld) )
+ CallService(MS_DB_CONTACT_DELETE, (WPARAM) hContactOld, 0);
+ }
+
+ // Now delete all left-overs
+ hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+
+ while(hContact != NULL)
+ {
+ CallService(MS_DB_CONTACT_DELETE, (WPARAM) hContact, 0);
+
+ hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+ }
+
+ // Delete events for contacts not in list
+ hDbEvent = (HANDLE) CallService(MS_DB_EVENT_FINDFIRST, 0, 0);
+
+ while(hDbEvent != NULL)
+ {
+ int ret = CallService(MS_DB_EVENT_DELETE, 0, (WPARAM) hDbEvent);
+
+ hDbEvent = (HANDLE) CallService(MS_DB_EVENT_FINDFIRST, 0, 0);
+ }
+
+ // Now delete groups
+ DeleteSettingEx("CListGroups", NULL);
+ }
+}
+
+void RemoveProtocolSettings(const char * protocolName)
+{
+ char buffer[10000];
+
+ // Remove protocol module settings
+ if ( GetSettingBool("GlobalSettings", "RemoveWholeProtocolModule", FALSE) )
+ {
+ DeleteSettingEx(protocolName, NULL);
+ }
+ else if ( GetSettings("ProtocolSettings", buffer, sizeof(buffer)) )
+ {
+ char *name;
+ char *value;
+
+ name = buffer;
+ while(name[0] != '\0')
+ {
+ value = strchr(name, '=');
+ if (value == NULL)
+ value = &name[strlen(name)];
+
+ // Has " ?
+ if (*name == '"' && *(value-1) == '"')
+ {
+ name++;
+ *(value-1) = '\0';
+ }
+
+ // Disable it
+ if (name[0] != '\0')
+ DeleteSettingEx(protocolName, name);
+
+ // Get next one
+ name = value + strlen(value) + 1;
+ }
+ }
+
+ // Remove modules by protocol sufixes
+ if ( GetSettings("ProtocolModuleSufixes", buffer, sizeof(buffer)) )
+ {
+ char *name;
+ char *value;
+ char moduleName[256];
+
+ name = buffer;
+ while(name[0] != '\0')
+ {
+ value = strchr(name, '=');
+ if (value == NULL)
+ value = &name[strlen(name)];
+
+ // Has " ?
+ if (*name == '"' && *(value-1) == '"')
+ {
+ name++;
+ *(value-1) = '\0';
+ }
+
+ // Delete it
+ if (name[0] != '\0')
+ {
+ mir_snprintf(moduleName, sizeof(moduleName), "%s%s", protocolName, name);
+ DeleteSettingEx(moduleName, NULL);
+ }
+
+ // Get next one
+ name = value + strlen(value) + 1;
+ }
+ }
+}
+
+void RemoveSettings()
+{
+ char buffer[10000];
+
+ // Delete protocol settings
+ if ( GetSettingBool("GlobalSettings", "RemoveProtocolSettings", TRUE) )
+ {
+ PROTOCOLDESCRIPTOR **protos;
+ int i,count;
+
+ // TODO MS_PROTO_ENUMACCOUNTS
+ CallService(MS_PROTO_ENUMPROTOCOLS, (WPARAM)&count, (LPARAM)&protos);
+
+ for (i = 0; i < count; i++)
+ {
+ if (protos[i]->type != PROTOTYPE_PROTOCOL)
+ continue;
+
+ if (protos[i]->szName == NULL || protos[i]->szName[0] == '\0')
+ continue;
+
+ RemoveProtocolSettings(protos[i]->szName);
+ }
+
+ // Get disabled protocols
+ if ( GetSettings("DisabledProtocols", buffer, sizeof(buffer)) )
+ {
+ char *name;
+ char *value;
+
+ name = buffer;
+ while(name[0] != '\0')
+ {
+ value = strchr(name, '=');
+ if (value == NULL)
+ value = &name[strlen(name)];
+
+ // Has " ?
+ if (*name == '"' && *(value-1) == '"')
+ {
+ name++;
+ *(value-1) = '\0';
+ }
+
+ // Disable it
+ if (name[0] != '\0')
+ RemoveProtocolSettings(name);
+
+ // Get next one
+ name = value + strlen(value) + 1;
+ }
+ }
+ }
+
+
+ // Delete other settings
+ if ( GetSettings("RemoveSettings", buffer, sizeof(buffer)) )
+ {
+ char *name;
+ char *value;
+
+ name = buffer;
+ while(name[0] != '\0')
+ {
+ value = strchr(name, '=');
+ if (value == NULL)
+ value = &name[strlen(name)];
+
+ // Has " ?
+ if (*name == '"' && *(value-1) == '"')
+ {
+ name++;
+ *(value-1) = '\0';
+ }
+
+ // Delete it
+ if (name[0] != '\0')
+ DeleteSetting(name);
+
+ // Get next one
+ name = value + strlen(value) + 1;
+ }
+ }
+}
+
+void ExecuteServices()
+{
+ char buffer[10000];
+
+ if ( GetSettings("ExecuteServices", buffer, sizeof(buffer)) )
+ {
+ char *name;
+ char *value;
+
+ name = buffer;
+ while(name[0] != '\0')
+ {
+ value = strchr(name, '=');
+ if (value == NULL)
+ value = &name[strlen(name)];
+
+ // Has " ?
+ if (*name == '"' && *(value-1) == '"')
+ {
+ name++;
+ *(value-1) = '\0';
+ }
+
+ // Disable it
+ if (name[0] != '\0')
+ if (ServiceExists(name))
+ CallService(name,0,0);
+
+ // Get next one
+ name = value + strlen(value) + 1;
+ }
+ }
+}
+
+void RemoveDirectories()
+{
+ char buffer[10000];
+ char dir[MAX_PATH];
+
+ // Remove protocol folders
+ if (GetSettingBool("GlobalSettings", "RemoveProtocolFolders", TRUE))
+ {
+ PROTOCOLDESCRIPTOR **protos;
+ int i,count;
+
+ CallService(MS_PROTO_ENUMPROTOCOLS, (WPARAM)&count, (LPARAM)&protos);
+
+ for (i = 0; i < count; i++)
+ {
+ if (protos[i]->type != PROTOTYPE_PROTOCOL)
+ continue;
+
+ if (protos[i]->szName == NULL || protos[i]->szName[0] == '\0')
+ continue;
+
+ mir_snprintf(dir, sizeof(dir), "%s%s", gMirandaDir, protos[i]->szName);
+ DeleteFileOrFolder(dir);
+ }
+ }
+
+ // Remove other folders
+ if ( GetSettings("RemoveFilesOrFolders", buffer, sizeof(buffer)) )
+ {
+ char *name;
+ char *value;
+
+ name = buffer;
+ while(name[0] != '\0')
+ {
+ value = strchr(name, '=');
+ if (value == NULL)
+ value = &name[strlen(name)];
+
+ // Has " ?
+ if (*name == '"' && *(value-1) == '"')
+ {
+ name++;
+ *(value-1) = '\0';
+ }
+
+ // Delete it
+ if (name[0] != '\0')
+ {
+ mir_snprintf(dir, sizeof(dir), "%s%s", gMirandaDir, name);
+ DeleteFileOrFolder(dir);
+ }
+
+ // Get next one
+ name = value + strlen(value) + 1;
+ }
+ }
+}
+
+void DisablePlugins()
+{
+ char buffer[10000];
+
+ if ( GetSettings("DisablePlugins", buffer, sizeof(buffer)) )
+ {
+ char *name;
+ char *value;
+
+ name = buffer;
+ while(name[0] != '\0')
+ {
+ value = strchr(name, '=');
+ if (value == NULL)
+ value = &name[strlen(name)];
+
+ // Has " ?
+ if (*name == '"' && *(value-1) == '"')
+ {
+ name++;
+ *(value-1) = '\0';
+ }
+
+ // Disable it
+ if (name[0] != '\0')
+ {
+ CharLower(name);
+ if (DBGetContactSettingByte(NULL, PLUGINDISABLELIST, name, 0) != 1)
+ {
+ DBWriteContactSettingByte(NULL, PLUGINDISABLELIST, name, 1);
+ }
+ }
+
+ // Get next one
+ name = value + strlen(value) + 1;
+ }
+ }
+}
+
+
+
+// Ini access functions
+
+BOOL GetSettingBool(const char *section, const char *key, BOOL defaultValue)
+{
+ char tmp[16];
+
+ if ( GetPrivateProfileString(section, key, defaultValue ? "true" : "false", tmp, sizeof(tmp), gIniFile) == 0 )
+ {
+ return defaultValue;
+ }
+ else
+ {
+ return stricmp(tmp, "true") == 0;
+ }
+}
+
+
+BOOL GetSettings(const char *section, char *buffer, size_t bufferSize)
+{
+ buffer[0] = '\0\0';
+
+ return GetPrivateProfileSection(section, buffer, bufferSize, gIniFile) != 0;
+}
+
+
+
+// Utils
+
+void DeleteFileOrFolder(const char *name)
+{
+ int attibs = GetFileAttributes(name);
+
+ if (attibs == 0xFFFFFFFF) // Not exists
+ {
+ // Try to find it
+ WIN32_FIND_DATA findData;
+ HANDLE hwnd;
+ char tmp[MAX_PATH];
+ char *strTmp;
+
+ // Delete files
+ hwnd = FindFirstFile(name, &findData);
+ if (hwnd != INVALID_HANDLE_VALUE)
+ {
+ strcpy(tmp, name);
+ strTmp = strrchr(tmp,'\\');
+ if(strTmp != NULL)
+ {
+ strTmp++;
+ *strTmp = '\0';
+ }
+ else
+ {
+ strcat(tmp, "\\");
+ strTmp = &tmp[strlen(tmp)];
+ }
+
+ do
+ {
+ if (strcmp(findData.cFileName, ".") && strcmp(findData.cFileName, ".."))
+ {
+ strcpy(strTmp, findData.cFileName);
+ DeleteFileOrFolder(tmp);
+ }
+ }
+ while(FindNextFile(hwnd, &findData) != 0);
+
+ FindClose(hwnd);
+ }
+ }
+ else if (attibs & FILE_ATTRIBUTE_DIRECTORY) // Is a directory
+ {
+ // Get all files and delete then
+ WIN32_FIND_DATA findData;
+ HANDLE hwnd;
+ char tmp[MAX_PATH];
+
+ mir_snprintf(tmp, sizeof(tmp), "%s\\*.*", name);
+
+ // Delete files
+ hwnd = FindFirstFile(tmp, &findData);
+ if (hwnd != INVALID_HANDLE_VALUE)
+ {
+ do
+ {
+ if (strcmp(findData.cFileName, ".") && strcmp(findData.cFileName, ".."))
+ {
+ mir_snprintf(tmp, sizeof(tmp), "%s\\%s", name, findData.cFileName);
+ DeleteFileOrFolder(tmp);
+ }
+ }
+ while(FindNextFile(hwnd, &findData) != 0);
+
+ FindClose(hwnd);
+ }
+
+ // Delete directory
+ RemoveDirectory(name);
+ }
+ else // Is a File
+ {
+ SetFileAttributes(name, FILE_ATTRIBUTE_ARCHIVE);
+ DeleteFile(name);
+ }
+}
+
+
+BOOL isMetaContact(HANDLE hContact)
+{
+ DBVARIANT dbv;
+ DBCONTACTGETSETTING dbcgs;
+ char name[32];
+
+ dbv.type=DBVT_ASCIIZ;
+ dbv.pszVal=name;
+ dbv.cchVal=sizeof(name);
+ dbcgs.pValue=&dbv;
+ dbcgs.szModule="Protocol";
+ dbcgs.szSetting="p";
+
+ if(CallService(MS_DB_CONTACT_GETSETTINGSTATIC,(WPARAM)hContact,(LPARAM)&dbcgs))
+ return FALSE;
+
+ return strcmp(dbcgs.pValue->pszVal, METACONTACTS_PROTOCOL_NAME) == 0;
+}
+
+
+
+typedef struct {
+ char buffer[10000];
+ int pos;
+ const char *filter;
+ size_t lenFilterMinusOne;
+} DeleteModuleStruct;
+
+
+int EnumProc(const char *szName, LPARAM lParam)
+{
+ DeleteModuleStruct *dms = (DeleteModuleStruct *) lParam;
+ size_t len = strlen(szName);
+
+ if (dms->filter != NULL && dms->lenFilterMinusOne > 0)
+ {
+ if (len >= dms->lenFilterMinusOne)
+ {
+ if (dms->filter[0] == '*')
+ {
+ if (strcmp(&dms->filter[1], &szName[len - dms->lenFilterMinusOne]) != 0)
+ return 0;
+ }
+ else // if (dms->filter[dms->lenFilterMinusOne] == '*')
+ {
+ if (strncmp(dms->filter, szName, dms->lenFilterMinusOne) != 0)
+ return 0;
+ }
+ }
+ }
+
+ // Add to the struct
+ if (len > 0 && len < sizeof(dms->buffer) - dms->pos - 2)
+ {
+ strcpy(&dms->buffer[dms->pos], szName);
+ dms->pos += len + 1;
+ }
+
+ return 0;
+}
+
+int ModuleEnumProc(const char *szName, DWORD ofsModuleName, LPARAM lParam)
+{
+ return EnumProc(szName, lParam);
+}
+
+void DeleteSettingEx(const char *szModule, const char *szSetting)
+{
+ size_t lenModule;
+
+ if (szModule == NULL)
+ return;
+
+ lenModule = strlen(szModule);
+ if (szModule[0] == '*' || szModule[lenModule-1] == '*')
+ {
+ DeleteModuleStruct dms;
+ ZeroMemory(&dms, sizeof(dms));
+
+ dms.filter = szModule;
+ dms.lenFilterMinusOne = lenModule-1;
+
+ CallService(MS_DB_MODULES_ENUM, (WPARAM) &dms, (LPARAM) &ModuleEnumProc);
+
+ // Delete then
+ szModule = dms.buffer;
+ while(szModule[0] != '\0')
+ {
+ DeleteSettingEx(szModule, szSetting);
+
+ // Get next one
+ szModule += strlen(szModule) + 1;
+ }
+ }
+ else
+ {
+ size_t lenSetting = szSetting == NULL ? 0 : strlen(szSetting);
+ if (szSetting == NULL || szSetting[0] == '*' || szSetting[lenSetting-1] == '*')
+ {
+ DeleteModuleStruct dms;
+ DBCONTACTENUMSETTINGS dbces;
+
+ ZeroMemory(&dms, sizeof(dms));
+
+ dms.filter = szSetting;
+ dms.lenFilterMinusOne = lenSetting-1;
+
+ dbces.pfnEnumProc = EnumProc;
+ dbces.lParam = (LPARAM) &dms;
+ dbces.szModule = szModule;
+ dbces.ofsSettings = 0;
+
+ CallService(MS_DB_CONTACT_ENUMSETTINGS, 0, (LPARAM) &dbces);
+
+ // Delete then
+ szSetting = dms.buffer;
+ while(szSetting[0] != '\0')
+ {
+ DBDeleteContactSetting(NULL, szModule, szSetting);
+
+ // Get next one
+ szSetting += strlen(szSetting) + 1;
+ }
+ }
+ else
+ {
+ DBDeleteContactSetting(NULL, szModule, szSetting);
+ }
+ }
+}
+
+void DeleteSetting(const char *setting)
+{
+ char *szModule;
+ char *szSetting;
+
+ if (setting == NULL || setting[0] == '\0')
+ {
+ return;
+ }
+
+ // Split setting
+ szModule = strdup(setting);
+ szSetting = strrchr(szModule, '/');
+ if (szSetting != NULL)
+ {
+ *szSetting = '\0';
+ szSetting ++;
+ }
+
+ DeleteSettingEx(szModule, szSetting);
+
+ free(szModule);
+}
+
diff --git a/plugins/!NotAdopted/rps/rps.dsp b/plugins/!NotAdopted/rps/rps.dsp
new file mode 100644
index 0000000000..d529f541bc
--- /dev/null
+++ b/plugins/!NotAdopted/rps/rps.dsp
@@ -0,0 +1,127 @@
+# Microsoft Developer Studio Project File - Name="rps" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=rps - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "rps.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "rps.mak" CFG="rps - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "rps - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "rps - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName "rps"
+# PROP Scc_LocalPath "."
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "rps - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "RPS_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "RPS_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"../../bin/release/plugins/RemovePersonalSettings.dll"
+
+!ELSEIF "$(CFG)" == "rps - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "RPS_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "RPS_EXPORTS" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"../../bin/debug/plugins/RemovePersonalSettings.dll" /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "rps - Win32 Release"
+# Name "rps - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\rps.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Group "Docs"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\RemovePersonalSettings.ini
+# End Source File
+# Begin Source File
+
+SOURCE=.\Docs\rps_changelog.txt
+# End Source File
+# Begin Source File
+
+SOURCE=.\Docs\rps_readme.txt
+# End Source File
+# Begin Source File
+
+SOURCE=.\Docs\rps_version.txt
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/plugins/!NotAdopted/rps/rps.dsw b/plugins/!NotAdopted/rps/rps.dsw
new file mode 100644
index 0000000000..67773bd23d
--- /dev/null
+++ b/plugins/!NotAdopted/rps/rps.dsw
@@ -0,0 +1,33 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "rps"=".\rps.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+ begin source code control
+ rps
+ .
+ end source code control
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+