#ifndef _COMMON_INC #define _COMMON_INC #define _CRT_SECURE_NO_DEPRECATE #define _WIN32_WINNT 0x0400 #define WINVER 0x0400 #define _WIN32_IE 0x0400 #ifdef _UNICODE //#define _GLIBCXX_USE_WCHAR_T 1 //#define _GLIBCXX_USE_WSTRING 1 #endif // uses mim 0.6 options pages if available #define MIRANDA_VER 0x0600 #include #include #include "tinyxml.h" #ifdef _MSC_VER #pragma warning( disable : 4786 ) #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include "../mwclist/m_clist.h" //#include #include #include #include //#define TESTING // causes version to be 0.0.0.1 //#define USE_MY_SERVER // uses URLS for scottellis.com.au test site for non-beta //#define PLUGDIR // expect the zip archive to contain plugins/updater.dll rather than just updater.dll #define REGISTER_BETA // register beta urls for beta site //#define DEBUG_POPUPS // define to show some popups (restoring status, etc) //#define _UD_LOGGING // define to log some stuff, from inside the external process, overwriting the data file //#define DEBUG_HTTP_POPUPS // define to show popups re http #define REGISTER_AUTO // get updater to automatically collect file listing URL's from backend xml data #define BETA_HOST_URL_PREFIX "http://www.scottellis.com.au/miranda_plugins" //(thanks Omniwolf for old twosx webspace, thx Koobs for hosting my domain) typedef enum Category {MC_PLUGINS, MC_LOCALIZATION, MC_UNKNOWN, NUM_CATEGORIES}; typedef struct UpdateOptions_tag { bool enabled; // user has enabled updates for this plugin bool use_beta; // use the beta update data bool fixed; // use_beta flag is fixed - cannot be changed by user (e.g. szUpdateURL is null, szBetaUpdateURL is not) } UpdateOptions; typedef struct UpdateInternal_tag { Update update; UpdateOptions update_options; int file_id; // miranda file listing id bool auto_register; char *newVersion; Category cat; char *shortName; } UpdateInternal; class UpdateList { public: UpdateList(); virtual ~UpdateList(); UpdateList(UpdateList &source); int size(); void push_back(UpdateInternal &update); UpdateInternal &back(); void clear(); void reset(); void next(); UpdateInternal *current(); void erase(); protected: class Node { public: Node(): next(0), prev(0) {} UpdateInternal ui; Node *next, *prev; }; int count; Node *head, *tail, *it_current; }; class StringList { public: StringList(): head(0), count(0) {} virtual ~StringList() {clear();} int size() {return count;} void push_back(TCHAR *str) { Node *n = new Node; n->next = head; head = n; n->val = _tcsdup(str); } void clear() { Node *current; while(head) { current = head; head = head->next; free(current->val); delete current; } count = 0; reset(); } void reset() {it_current = head;} void next() {if(it_current) it_current = it_current->next;} TCHAR *current() {return (it_current ? it_current->val : 0);} protected: class Node { public: Node(): next(0) {} TCHAR *val; Node *next; }; Node *head, *it_current; int count; }; #include #include #include #ifdef _UNICODE typedef std::wstring STDString; #else typedef std::string STDString; #endif typedef std::list< STDString > STDStringList; typedef std::map FilenameMap; #include "resource.h" #define MODULE "Updater" extern HINSTANCE hInst; extern PLUGINLINK *pluginLink; extern PLUGININFO pluginInfo; extern bool is_idle; extern HANDLE hNetlibUser; extern HANDLE mainThread; extern DWORD mainThreadId; static int __inline NLog(char *msg) { return CallService(MS_NETLIB_LOG, (WPARAM)hNetlibUser, (LPARAM)msg); } // clist 'exit' menu item command id #define ID_ICQ_EXIT 40001 // maximum number of redirects when getting xml data or download files via HTTP #define MAX_REDIRECT_RECURSE 4 #endif