summaryrefslogtreecommitdiff
path: root/updater/updater.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'updater/updater.cpp')
-rw-r--r--updater/updater.cpp250
1 files changed, 250 insertions, 0 deletions
diff --git a/updater/updater.cpp b/updater/updater.cpp
new file mode 100644
index 0000000..aebe70d
--- /dev/null
+++ b/updater/updater.cpp
@@ -0,0 +1,250 @@
+#include "common.h"
+#include "updater.h"
+
+HINSTANCE hInst;
+PLUGINLINK *pluginLink;
+
+HANDLE hNetlibUser = 0;
+
+DWORD mainThreadId;
+HANDLE mainThread;
+
+bool is_idle = false;
+
+//#define TESTING // defined here to reduce build time blowout caused by changing common.h
+
+PLUGININFO pluginInfo={
+ sizeof(PLUGININFO),
+ __PLUGIN_NAME,
+#ifdef TESTING
+ 0x00000001,
+#else
+ PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
+#endif
+ __DESC,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
+ 0, //not transient
+ 0 //doesn't replace anything built-in
+};
+
+extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
+{
+ hInst=hinstDLL;
+ return TRUE;
+}
+
+extern "C" __declspec(dllexport) PLUGININFO* MirandaPluginInfo(DWORD mirandaVersion)
+{
+ return &pluginInfo;
+}
+
+int IdleChanged(WPARAM wParam, LPARAM lParam) {
+
+ is_idle = (lParam & IDF_ISIDLE);
+
+ return 0;
+}
+
+void InitNetlib() {
+ NETLIBUSER nl_user = {0};
+ nl_user.cbSize = sizeof(nl_user);
+ nl_user.szSettingsModule = MODULE;
+ nl_user.flags = NUF_OUTGOING | NUF_HTTPCONNS;
+ nl_user.szDescriptiveName = "Updater";
+
+ hNetlibUser = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nl_user);
+}
+
+void DeinitNetlib() {
+ if(hNetlibUser)
+ CallService(MS_NETLIB_CLOSEHANDLE, (WPARAM)hNetlibUser, 0);
+}
+
+HANDLE hEventIdleChanged;
+int ModulesLoaded(WPARAM wParam, LPARAM lParam) {
+ LoadOptions();
+
+ if(!options.check_on_startup) {
+ RestoreStatus();
+ }
+
+ /*{
+ char buff[265];
+ sprintf(buff, "sizeof(Update) == %d", sizeof(Update));
+ PUShowMessage(buff, SM_NOTIFY);
+ }*/
+
+ InitIcons();
+
+ InitOptionsMenuItems();
+
+ InitNetlib();
+ InitPopups();
+
+#ifdef USE_MY_SERVER
+ Update update = {0};
+ char szVersion[16];
+ update.cbSize = sizeof(Update);
+
+ update.szComponentName = pluginInfo.shortName;
+ update.pbVersion = (BYTE *)CreateVersionString(&pluginInfo, szVersion);
+ update.cpbVersion = strlen((char *)update.pbVersion);
+
+#ifdef _UNICODE
+ update.szUpdateURL = BETA_HOST_URL_PREFIX "/ver_updater_unicode.zip";
+ update.szVersionURL = BETA_HOST_URL_PREFIX "/updater_unicode.html";
+ update.pbVersionPrefix = (BYTE *)"Updater (Unicode) version ";
+ update.cpbVersionPrefix = strlen((char *)update.pbVersionPrefix);
+#else //!_UNICODE
+ update.szUpdateURL = BETA_HOST_URL_PREFIX "/updater.zip";
+ update.szVersionURL = BETA_HOST_URL_PREFIX "/ver_updater.html";
+ update.pbVersionPrefix = (BYTE *)"Updater version ";
+ update.cpbVersionPrefix = strlen((char *)update.pbVersionPrefix);
+#endif //_UNICODE
+
+
+ CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update);
+
+#else //!USE_MY_SERVER
+
+#ifdef REGISTER_BETA
+
+ Update update = {0};
+ char szVersion[16];
+ update.cbSize = sizeof(Update);
+
+ update.szComponentName = pluginInfo.shortName;
+ update.pbVersion = (BYTE *)CreateVersionStringPlugin(&pluginInfo, szVersion);
+ update.cpbVersion = strlen((char *)update.pbVersion);
+
+
+#ifdef _UNICODE
+
+#ifdef REGISTER_AUTO
+ update.szUpdateURL = UPDATER_AUTOREGISTER;
+#else //!REGISTER_AUTO
+ update.szUpdateURL = MIM_DOWNLOAD_URL_PREFIX "2596";
+ update.szVersionURL = MIM_VIEW_URL_PREFIX "2596";
+ update.pbVersionPrefix = (BYTE *)"<span class=\"fileNameHeader\">Updater (Unicode) ";
+ update.cpbVersionPrefix = strlen((char *)update.pbVersionPrefix);
+#endif //REGISTER_AUTO
+
+ update.szBetaUpdateURL = BETA_HOST_URL_PREFIX "/updater_unicode.zip";
+ update.szBetaVersionURL = BETA_HOST_URL_PREFIX "/ver_updater_unicode.html";
+ update.pbBetaVersionPrefix = (BYTE *)"Updater (Unicode) version ";
+ update.cpbBetaVersionPrefix = strlen((char *)update.pbBetaVersionPrefix);
+#else //!_UNICODE
+
+#ifdef REGISTER_AUTO
+ update.szUpdateURL = UPDATER_AUTOREGISTER;
+#else //!REGISTER_AUTO
+ update.szUpdateURL = MIM_DOWNLOAD_URL_PREFIX "2254";
+ update.szVersionURL = MIM_VIEW_URL_PREFIX "2254";
+ update.pbVersionPrefix = (BYTE *)"<span class=\"fileNameHeader\">Updater ";
+ update.cpbVersionPrefix = strlen((char *)update.pbVersionPrefix);
+#endif //REGISTER_AUTO
+
+ update.szBetaUpdateURL = BETA_HOST_URL_PREFIX "/updater.zip";
+ update.szBetaVersionURL = BETA_HOST_URL_PREFIX "/ver_updater.html";
+ update.pbBetaVersionPrefix = (BYTE *)"Updater version ";
+ update.cpbBetaVersionPrefix = strlen((char *)update.pbBetaVersionPrefix);
+#endif //_UNICODE
+
+
+ CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update);
+#else // !REGISTER_BETA
+
+#ifdef _UNICODE
+ CallService(MS_UPDATE_REGISTERFL, (WPARAM)2596, (LPARAM)&pluginInfo);
+#else //!_UNICODE
+ CallService(MS_UPDATE_REGISTERFL, (WPARAM)2254, (LPARAM)&pluginInfo);
+#endif //_UNICODE
+
+#endif // REGISTER_BETA
+
+#endif // USE_MY_SERVER
+
+
+
+ hEventIdleChanged = HookEvent(ME_IDLE_CHANGED, IdleChanged);
+
+ if(ServiceExists(MS_TRIGGER_REGISTERACTION)) {
+ // create update action for triggerplugin
+ ACTIONREGISTER ar = {0};
+ ar.cbSize = sizeof(ACTIONREGISTER);
+ ar.pszName = Translate("Check for Updates");
+ ar.pszService = MS_UPDATE_CHECKFORUPDATESTRGR;
+
+ CallService(MS_TRIGGER_REGISTERACTION, 0, (LPARAM)&ar);
+ }
+
+ return 0;
+}
+
+int Shutdown(WPARAM wParam, LPARAM lParam) {
+ if(hNetlibUser) {
+ SOCKET s = CallService( MS_NETLIB_GETSOCKET, (WPARAM)hNetlibUser, 0 );
+ if ( s != INVALID_SOCKET ) shutdown( s, 2 );
+ }
+ return 0;
+}
+
+HANDLE hEventOptInit, hEventPreShutdown, hEventModulesLoaded;
+
+extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
+{
+ pluginLink = link;
+
+ mainThreadId = GetCurrentThreadId();
+ DuplicateHandle( GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &mainThread, THREAD_SET_CONTEXT, FALSE, 0 );
+
+ // save global status from clist - will be restored after update check if that option is enabled, or in modules loaded if not
+ options.start_offline = (DBGetContactSettingByte(0, MODULE, "StartOffline", 1) == 1); // load option here - rest loading in modulesloaded
+ if(options.start_offline) {
+ WORD saved_status = DBGetContactSettingWord(0, "CList", "Status", ID_STATUS_OFFLINE);
+ if(saved_status != ID_STATUS_OFFLINE) {
+ DBWriteContactSettingWord(0, MODULE, "SavedGlobalStatus", saved_status);
+ DBWriteContactSettingWord(0, "CList", "Status", ID_STATUS_OFFLINE);
+ }
+ }
+
+ INITCOMMONCONTROLSEX icex;
+
+ // Ensure that the common control DLL is loaded (for listview)
+ icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
+ icex.dwICC = ICC_LISTVIEW_CLASSES;
+ InitCommonControlsEx(&icex);
+
+ OleInitialize(0);
+
+ HookEvent(ME_OPT_INITIALISE, OptInit);
+
+ HookEvent(ME_SYSTEM_PRESHUTDOWN, Shutdown);
+
+ // do this before init services, so that InitPopups is called before startup update
+ HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded);
+
+ InitServices();
+
+ return 0;
+}
+
+extern "C" int __declspec(dllexport) Unload(void)
+{
+ UnhookEvent(hEventIdleChanged);
+ UnhookEvent(hEventOptInit);
+ UnhookEvent(hEventPreShutdown);
+ UnhookEvent(hEventModulesLoaded);
+
+ DeinitServices();
+ DeinitPopups();
+
+ DeinitNetlib();
+ DeinitIcons();
+
+ OleUninitialize();
+ return 0;
+}