summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--3rdParty/Snarl/SConscript18
-rw-r--r--3rdParty/Snarl/SnarlInterface.cpp517
-rw-r--r--3rdParty/Snarl/SnarlInterface.h276
-rw-r--r--BuildTools/SCons/SConstruct4
-rw-r--r--SwifTools/Notifier/SConscript6
-rw-r--r--SwifTools/Notifier/SnarlNotifier.cpp73
-rw-r--r--SwifTools/Notifier/SnarlNotifier.h40
-rw-r--r--Swift/QtUI/SConscript3
-rw-r--r--Swift/QtUI/WindowsNotifier.cpp6
-rw-r--r--Swift/QtUI/WindowsNotifier.h4
10 files changed, 2 insertions, 945 deletions
diff --git a/3rdParty/Snarl/SConscript b/3rdParty/Snarl/SConscript
deleted file mode 100644
index a93282c..0000000
--- a/3rdParty/Snarl/SConscript
+++ /dev/null
@@ -1,18 +0,0 @@
-Import("env")
-
-################################################################################
-# Flags
-################################################################################
-
-if env.get("HAVE_SNARL", False) :
- if env["SCONS_STAGE"] == "flags" :
- env["SNARL_FLAGS"] = {
- "CPPPATH": [Dir(".")],
- "LIBPATH": [Dir(".")],
- "LIBS": ["Snarl"],
- }
-
- elif env["SCONS_STAGE"] == "build" :
- myenv = env.Clone()
- myenv.Replace(CCFLAGS = [flag for flag in env["CCFLAGS"] if flag not in ["-W", "-Wall"]])
- myenv.StaticLibrary("Snarl", ["SnarlInterface.cpp"], CPPPATH = ["."])
diff --git a/3rdParty/Snarl/SnarlInterface.cpp b/3rdParty/Snarl/SnarlInterface.cpp
deleted file mode 100644
index 0ae0b37..0000000
--- a/3rdParty/Snarl/SnarlInterface.cpp
+++ /dev/null
@@ -1,517 +0,0 @@
-/// <summary>
-/// Snarl C++ interface implementation
-///
-/// Written and maintained by Toke Noer Nøttrup (toke@noer.it)
-///
-/// Please note the following changes compared to the VB6 (official API) dokumentation:
-/// - Function names doesn't have the prefix "sn". Naming of constants and variables are
-/// generally changed to follow Microsoft C# standard. This naming convention is kept for
-/// the C++ version, to keep them alike.
-/// - Grouped variables like SNARL_LAUNCHED, SNARL_QUIT is enums in SnarlEnums namespace.
-/// - Message events like SNARL_NOTIFICATION_CLICKED, is found in SnarlEnums::MessageEvent.
-/// - Please note that string functions return NULL when they fail and not an empty string.
-/// - Some functions in the VB API takes an appToken as first parameter. This token is a
-/// member variable in C++ version, so it is omitted from the functions.
-/// (Always call RegisterApp as first function!)
-/// - Functions manipulating messages (Update, Hide etc.) still takes a message token as
-/// parameter, but you can get the last message token calling GetLastMsgToken();
-/// Example: snarl.Hide(snarl.GetLastMsgToken());
-///
-/// The functions in SnarlInterface both have ANSI(UTF8) and UNICODE versions.
-/// If the LPCWSTR (unicode) version of the functions are called, the strings
-/// are converted to UTF8 by SnarlInterface before sent to Snarl. So using the
-/// ANSI/UTF8/LPCSTR versions of the functions are faster!
-///
-/// Funtions special to C++ V41 API compared to VB version:
-/// GetLastMsgToken()
-/// GetAppPath()
-/// GetIconsPath()
-/// </summary>
-///----------------------------------------------------------------------------
-/// <example>
-/// SnarlInterface snarl;
-/// snarl.RegisterApp(_T("CppTest"), _T("C++ test app"), NULL);
-/// snarl.AddClass(_T("Class1"), _T("Class 1"));
-/// snarl.EZNotify(_T("Class1"), _T("C++ example 1"), _T("Some text"), 10);
-/// snarl.UnregisterApp();
-///
-/// Please see the SimpleTest.cpp and SnarlV41Test.cpp for more example code.
-/// </example>
-///----------------------------------------------------------------------------
-/// <VersionHistory>
-/// 2010-08-13 : First release of V41 Snarl API implementation
-/// </VersionHistory>
-
-#define _CRT_SECURE_NO_WARNINGS
-
-#include "SnarlInterface.h"
-
-
-namespace Snarl {
-namespace V41 {
-
-//-----------------------------------------------------------------------------
-// Constructor/Destructor
-//-----------------------------------------------------------------------------
-SnarlInterface::SnarlInterface()
- : appToken(0), lastMsgToken(0), localError(SnarlEnums::Success)
-{
-}
-
-SnarlInterface::~SnarlInterface()
-{
-}
-
-// ----------------------------------------------------------------------------
-
-LONG32 SnarlInterface::RegisterApp(LPCSTR signature, LPCSTR title, LPCSTR icon, HWND hWndReply /* = NULL */, LONG32 msgReply /* = 0 */, SnarlEnums::AppFlags flags /* = SnarlEnums::AppDefault */)
-{
- SnarlMessage msg;
- msg.Command = SnarlEnums::RegisterApp;
- msg.Token = 0;
- PackData(msg.PacketData,
- "id::%s#?title::%s#?icon::%s#?hwnd::%d#?umsg::%d#?flags::%d",
- signature, title, icon, hWndReply, msgReply, flags);
-
- appToken = Send(msg);
- lastMsgToken = 0;
-
- return appToken;
-}
-
-LONG32 SnarlInterface::RegisterApp(LPCWSTR signature, LPCWSTR title, LPCWSTR icon, HWND hWndReply /* = NULL */, LONG32 msgReply /* = 0 */, SnarlEnums::AppFlags flags /* = SnarlEnums::AppDefault */)
-{
- LPCSTR szParam1 = WideToUTF8(signature);
- LPCSTR szParam2 = WideToUTF8(title);
- LPCSTR szParam3 = WideToUTF8(icon);
-
- LONG32 result = RegisterApp(szParam1, szParam2, szParam3, hWndReply, msgReply, flags);
-
- delete [] szParam1;
- delete [] szParam2;
- delete [] szParam3;
-
- return result;
-}
-
-LONG32 SnarlInterface::UnregisterApp()
-{
- SnarlMessage msg;
- msg.Command = SnarlEnums::UnregisterApp;
- msg.Token = appToken;
- PackData(msg.PacketData, NULL);
-
- appToken = 0;
- lastMsgToken = 0;
-
- return Send(msg);
-}
-
-LONG32 SnarlInterface::UpdateApp(LPCSTR title /* = NULL */, LPCSTR icon /* = NULL */)
-{
- if (title == NULL && icon == NULL)
- return 0;
-
- SnarlMessage msg;
- msg.Command = SnarlEnums::UpdateApp;
- msg.Token = appToken;
-
- // TODO: Uckly code ahead
- if (title != NULL && title[0] != 0 && icon != NULL && icon[0] != 0)
- PackData(msg.PacketData, "title::%s#?icon::%s", title, icon);
- else if (title != NULL && title[0] != 0)
- PackData(msg.PacketData, "title::%s", title);
- else if (icon != NULL && icon[0] != 0)
- PackData(msg.PacketData, "icon::%s", icon);
-
- return Send(msg);
-}
-
-LONG32 SnarlInterface::UpdateApp(LPCWSTR title /* = NULL */, LPCWSTR icon /* = NULL */)
-{
- LPCSTR szParam1 = WideToUTF8(title);
- LPCSTR szParam2 = WideToUTF8(icon);
-
- LONG32 result = UpdateApp(szParam1, szParam2);
-
- delete [] szParam1;
- delete [] szParam2;
-
- return result;
-}
-
-LONG32 SnarlInterface::AddClass(LPCSTR className, LPCSTR description, bool enabled /* = true */)
-{
- SnarlMessage msg;
- msg.Command = SnarlEnums::AddClass;
- msg.Token = appToken;
- PackData(msg.PacketData, "id::%s#?name::%s#?enabled::%d", className, description, (enabled ? 1 : 0));
-
- return Send(msg);
-}
-
-LONG32 SnarlInterface::AddClass(LPCWSTR className, LPCWSTR description, bool enabled /* = true */)
-{
- LPCSTR szParam1 = WideToUTF8(className);
- LPCSTR szParam2 = WideToUTF8(description);
-
- LONG32 result = AddClass(szParam1, szParam2, enabled);
-
- delete [] szParam1;
- delete [] szParam2;
-
- return result;
-}
-
-LONG32 SnarlInterface::RemoveClass(LPCSTR className, bool forgetSettings /* = false */)
-{
- SnarlMessage msg;
- msg.Command = SnarlEnums::RemoveClass;
- msg.Token = appToken;
- PackData(msg.PacketData, "id::%s#?forget::%d", className, (forgetSettings ? 1 : 0));
-
- return Send(msg);
-}
-
-LONG32 SnarlInterface::RemoveClass(LPCWSTR className, bool forgetSettings /* = false */)
-{
- LPCSTR szParam1 = WideToUTF8(className);
-
- LONG32 result = RemoveClass(szParam1, forgetSettings);
-
- delete [] szParam1;
-
- return result;
-}
-
-LONG32 SnarlInterface::RemoveAllClasses(bool forgetSettings /* = false */)
-{
- SnarlMessage msg;
- msg.Command = SnarlEnums::RemoveClass;
- msg.Token = appToken;
- PackData(msg.PacketData, "all::1#?forget::%d", (forgetSettings ? 1 : 0));
-
- return Send(msg);
-}
-
-LONG32 SnarlInterface::EZNotify(LPCSTR className, LPCSTR title, LPCSTR text, LONG32 timeout /* = -1 */, LPCSTR icon /* = NULL */, LONG32 priority /* = 0 */, LPCSTR acknowledge /* = NULL */, LPCSTR value /* = NULL */)
-{
- SnarlMessage msg;
- msg.Command = SnarlEnums::Notify;
- msg.Token = appToken;
- PackData(msg.PacketData,
- "id::%s#?title::%s#?text::%s#?timeout::%d#?icon::%s#?priority::%d#?ack::%s#?value::%s",
- className, title, text, timeout, (icon ? icon : ""), priority, (acknowledge ? acknowledge : ""), (value ? value : ""));
-
- lastMsgToken = Send(msg);
- return lastMsgToken;
-}
-
-LONG32 SnarlInterface::EZNotify(LPCWSTR className, LPCWSTR title, LPCWSTR text, LONG32 timeout /* = -1 */, LPCWSTR icon /* = NULL */, LONG32 priority /* = 0 */, LPCWSTR acknowledge /* = NULL */, LPCWSTR value /* = NULL */)
-{
- LPCSTR szParam1 = WideToUTF8(className);
- LPCSTR szParam2 = WideToUTF8(title);
- LPCSTR szParam3 = WideToUTF8(text);
- LPCSTR szParam4 = WideToUTF8(icon);
- LPCSTR szParam5 = WideToUTF8(acknowledge);
- LPCSTR szParam6 = WideToUTF8(value);
-
- LONG32 result = EZNotify(szParam1, szParam2, szParam3, timeout, szParam4, priority, szParam5, szParam6);
-
- delete [] szParam1; delete [] szParam2; delete [] szParam3;
- delete [] szParam4; delete [] szParam5; delete [] szParam6;
-
- return result;
-}
-
-LONG32 SnarlInterface::Notify(LPCSTR className, LPCSTR packetData)
-{
- SnarlMessage msg;
- msg.Command = SnarlEnums::Notify;
- msg.Token = appToken;
- PackData(msg.PacketData, "id::%s#?%s", className, packetData);
-
- lastMsgToken = Send(msg);
- return lastMsgToken;
-}
-
-LONG32 SnarlInterface::Notify(LPCWSTR className, LPCWSTR packetData)
-{
- LPCSTR szParam1 = WideToUTF8(className);
- LPCSTR szParam2 = WideToUTF8(packetData);
-
- LONG32 result = Notify(szParam1, szParam2);
-
- delete [] szParam1; delete [] szParam2;
-
- return result;
-}
-
-LONG32 SnarlInterface::EZUpdate(LONG32 msgToken, LPCSTR title /* = NULL */, LPCSTR text /* = NULL */, LONG32 timeout /* = -1 */, LPCSTR icon /* = NULL */)
-{
- SnarlMessage msg;
- msg.Command = SnarlEnums::UpdateNotification;
- msg.Token = msgToken;
-
- // Create packed data
- errno_t err = 0;
- ZeroMemory(msg.PacketData, sizeof(msg.PacketData));
- char* pData = reinterpret_cast<char*>(msg.PacketData);
-
- if (title != NULL) {
- err |= strncat_s(pData, SnarlPacketDataSize, (pData[0] != NULL) ? "#?title::" : "title::", _TRUNCATE); //StringCbCat(tmp, SnarlPacketDataSize, "title::%s");
- err |= strncat_s(pData, SnarlPacketDataSize, title, _TRUNCATE);
- }
- if (text != NULL) {
- err |= strncat_s(pData, SnarlPacketDataSize, (pData[0] != NULL) ? "#?text::" : "text::", _TRUNCATE);
- err |= strncat_s(pData, SnarlPacketDataSize, text, _TRUNCATE);
- }
- if (icon != NULL) {
- err |= strncat_s(pData, SnarlPacketDataSize, (pData[0] != NULL) ? "#?icon::" : "icon::", _TRUNCATE);
- err |= strncat_s(pData, SnarlPacketDataSize, icon, _TRUNCATE);
- }
- if (timeout != -1) {
- char tmp[32];
- _itoa_s(timeout, tmp, 10);
-
- err |= strncat_s(pData, SnarlPacketDataSize, (pData[0] != NULL) ? "#?timeout::" : "timeout::", _TRUNCATE);
- err |= strncat_s(pData, SnarlPacketDataSize, tmp, _TRUNCATE);
- }
-
- // Check for strcat errors and exit on error
- if (err != 0) {
- localError = SnarlEnums::ErrorFailed;
- return 0;
- }
-
- return Send(msg);
-}
-
-LONG32 SnarlInterface::EZUpdate(LONG32 msgToken, LPCWSTR title /* = NULL */, LPCWSTR text /* = NULL */, LONG32 timeout /* = -1 */, LPCWSTR icon /* = NULL */)
-{
- LPCSTR szParam1 = WideToUTF8(title);
- LPCSTR szParam2 = WideToUTF8(text);
- LPCSTR szParam3 = WideToUTF8(icon);
-
- LONG32 result = EZUpdate(msgToken, szParam1, szParam2, timeout, szParam3);
-
- delete [] szParam1; delete [] szParam2; delete [] szParam3;
-
- return result;
-}
-
-LONG32 SnarlInterface::Update(LONG32 msgToken, LPCSTR packetData)
-{
- SnarlMessage msg;
- msg.Command = SnarlEnums::UpdateNotification;
- msg.Token = msgToken;
- PackData(msg.PacketData, packetData);
-
- return Send(msg);
-}
-
-LONG32 SnarlInterface::Update(LONG32 msgToken, LPCWSTR packetData)
-{
- LPCSTR szParam1 = WideToUTF8(packetData);
-
- LONG32 result = Update(msgToken, szParam1);
-
- delete [] szParam1;
-
- return result;
-}
-
-LONG32 SnarlInterface::Hide(LONG32 msgToken)
-{
- SnarlMessage msg;
- msg.Command = SnarlEnums::HideNotification;
- msg.Token = msgToken;
- PackData(msg.PacketData, NULL);
-
- return Send(msg);
-}
-
-LONG32 SnarlInterface::IsVisible(LONG32 msgToken)
-{
- SnarlMessage msg;
- msg.Command = SnarlEnums::IsNotificationVisible;
- msg.Token = msgToken;
- PackData(msg.PacketData, NULL);
-
- return Send(msg);
-}
-
-SnarlEnums::SnarlStatus SnarlInterface::GetLastError()
-{
- return localError;
-}
-
-// static
-BOOL SnarlInterface::IsSnarlRunning()
-{
- return IsWindow(GetSnarlWindow());
-}
-
-LONG32 SnarlInterface::GetVersion()
-{
- localError = SnarlEnums::Success;
-
- HWND hWnd = GetSnarlWindow();
- if (!IsWindow(hWnd))
- {
- localError = SnarlEnums::ErrorNotRunning;
- return 0;
- }
-
- HANDLE hProp = GetProp(hWnd, _T("_version"));
- return reinterpret_cast<int>(hProp);
-}
-
-// static
-UINT SnarlInterface::Broadcast()
-{
- return RegisterWindowMessage(SnarlGlobalMsg);
-}
-
-// static
-UINT SnarlInterface::AppMsg()
-{
- return RegisterWindowMessage(SnarlAppMsg);
-}
-
-// static
-HWND SnarlInterface::GetSnarlWindow()
-{
- return FindWindow(SnarlWindowClass, SnarlWindowTitle);;
-}
-
-LPCTSTR SnarlInterface::GetAppPath()
-{
- HWND hWnd = GetSnarlWindow();
- if (hWnd)
- {
- HWND hWndPath = FindWindowEx(hWnd, NULL, _T("static"), NULL);
- if (hWndPath)
- {
- TCHAR strTmp[MAX_PATH] = {0};
- int nReturn = GetWindowText(hWndPath, strTmp, MAX_PATH-1);
- if (nReturn > 0) {
- TCHAR* strReturn = AllocateString(nReturn + 1);
- _tcsncpy(strReturn, strTmp, nReturn + 1);
- strReturn[nReturn] = 0;
- return strReturn;
- }
- }
- }
-
- return NULL;
-}
-
-LPCTSTR SnarlInterface::GetIconsPath()
-{
- TCHAR* szIconPath = NULL;
- LPCTSTR szPath = GetAppPath();
- if (!szPath)
- return NULL;
-
- size_t nLen = 0;
- // TODO: _tcsnlen MAX_PATH
- if (nLen = _tcsnlen(szPath, MAX_PATH))
- {
- nLen += 10 + 1; // etc\\icons\\ + NULL
- szIconPath = AllocateString(nLen);
-
- _tcsncpy(szIconPath, szPath, nLen);
- _tcsncat(szIconPath, _T("etc\\icons\\"), nLen);
- }
-
- FreeString(szPath);
-
- return szIconPath;
-}
-
-LONG32 SnarlInterface::GetLastMsgToken() const
-{
- return lastMsgToken;
-}
-
-
-//-----------------------------------------------------------------------------
-// Private functions
-//-----------------------------------------------------------------------------
-
-LONG32 SnarlInterface::Send(SnarlMessage msg)
-{
- DWORD_PTR nReturn = 0; // Failure
-
- HWND hWnd = GetSnarlWindow();
- if (!IsWindow(hWnd))
- {
- localError = SnarlEnums::ErrorNotRunning;
- return 0;
- }
-
- COPYDATASTRUCT cds;
- cds.dwData = 0x534E4C02; // "SNL",2;
- cds.cbData = sizeof(SnarlMessage);
- cds.lpData = &msg;
-
- if (SendMessageTimeout(hWnd, WM_COPYDATA, (WPARAM)GetCurrentProcessId(), (LPARAM)&cds, SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 500, &nReturn) == 0)
- {
- // return zero on failure
- if (GetLastError() == ERROR_TIMEOUT)
- localError = SnarlEnums::ErrorTimedOut;
- else
- localError = SnarlEnums::ErrorFailed;
-
- return 0;
- }
-
- // return result and cache LastError
- HANDLE hProp = GetProp(hWnd, _T("last_error"));
- localError = static_cast<SnarlEnums::SnarlStatus>(reinterpret_cast<int>(hProp));
-
- return nReturn;
-}
-
-//-----------------------------------------------------------------------------
-
-// Remember to delete [] returned string
-inline
-LPSTR SnarlInterface::WideToUTF8(LPCWSTR szWideStr)
-{
- if (szWideStr == NULL)
- return NULL;
-
- int nSize = WideCharToMultiByte(CP_UTF8, 0, szWideStr, -1, NULL, 0, NULL, NULL);
- LPSTR szUTF8 = new char[nSize];
- WideCharToMultiByte(CP_UTF8, 0, szWideStr, -1, szUTF8, nSize, NULL, NULL);
-
- return szUTF8;
-}
-
-void SnarlInterface::PackData(BYTE* data, LPCSTR format, ...)
-{
- // Always zero array - Used to clear the array in member functions
- ZeroMemory(data, SnarlPacketDataSize);
-
- // Return if format string is empty
- if (format == NULL || format[0] == 0)
- return;
-
- int cchStrTextLen = 0;
- va_list args;
- va_start(args, format);
-
- // Get size of buffer
- cchStrTextLen = _vscprintf(format, args) + 1; // + NULL
- if (cchStrTextLen <= 1)
- return;
-
- // Create formated string - _TRUNCATE will ensure zero terminated
- _vsnprintf_s((char*)data, SnarlPacketDataSize, _TRUNCATE, format, args);
-
- va_end(args);
-}
-
-}} // namespace Snarl::V41
diff --git a/3rdParty/Snarl/SnarlInterface.h b/3rdParty/Snarl/SnarlInterface.h
deleted file mode 100644
index 9440451..0000000
--- a/3rdParty/Snarl/SnarlInterface.h
+++ /dev/null
@@ -1,276 +0,0 @@
-#ifndef SNARL_INTERFACE_V41
-#define SNARL_INTERFACE_V41
-
-#include <tchar.h>
-#include <windows.h>
-#include <cstdio>
-
-#ifndef SMTO_NOTIMEOUTIFNOTHUNG
- #define SMTO_NOTIMEOUTIFNOTHUNG 8
-#endif
-
-
-namespace Snarl {
- namespace V41 {
-
- static const LPCTSTR SnarlWindowClass = _T("w>Snarl");
- static const LPCTSTR SnarlWindowTitle = _T("Snarl");
-
- static const LPCTSTR SnarlGlobalMsg = _T("SnarlGlobalEvent");
- static const LPCTSTR SnarlAppMsg = _T("SnarlAppMessage");
-
- static const int SnarlPacketDataSize = 4096;
-
- // Enums put in own namespace, because ANSI C++ doesn't decorate enums with tagname :(
- namespace SnarlEnums {
-
- /// <summary>
- /// Global event identifiers.
- /// Identifiers marked with a '*' are sent by Snarl in two ways:
- /// 1. As a broadcast message (uMsg = 'SNARL_GLOBAL_MSG')
- /// 2. To the window registered in snRegisterConfig() or snRegisterConfig2()
- /// (uMsg = reply message specified at the time of registering)
- /// In both cases these values appear in wParam.
- ///
- /// Identifiers not marked are not broadcast; they are simply sent to the application's registered window.
- /// </summary>
- enum GlobalEvent
- {
- SnarlLaunched = 1, // Snarl has just started running*
- SnarlQuit = 2, // Snarl is about to stop running*
- SnarlAskAppletVer = 3, // (R1.5) Reserved for future use
- SnarlShowAppUi = 4 // (R1.6) Application should show its UI
- };
-
- /// <summary>
- /// Message event identifiers.
- /// These are sent by Snarl to the window specified in RegisterApp() when the
- /// Snarl Notification raised times out or the user clicks on it.
- /// </summary>
- enum MessageEvent
- {
- NotificationClicked = 32, // Notification was right-clicked by user
- NotificationCancelled = 32, // Added in V37 (R1.6) -- same value, just improved the meaning of it
- NotificationTimedOut = 33, //
- NotificationAck = 34, // Notification was left-clicked by user
- NotificationMenu = 35, // Menu item selected (V39)
- NotificationMiddleButton = 36, // Notification middle-clicked by user (V39)
- NotificationClosed = 37 // User clicked the close gadget (V39)
- };
-
- /// <summary>
- /// Error values returned by calls to GetLastError().
- /// </summary>
- enum SnarlStatus
- {
- Success = 0,
-
- ErrorFailed = 101, // miscellaneous failure
- ErrorUnknownCommand, // specified command not recognised
- ErrorTimedOut, // Snarl took too long to respond
-
- ErrorArgMissing = 109, // required argument missing
- ErrorSystem, // internal system error
-
- ErrorNotRunning = 201, // Snarl handling window not found
- ErrorNotRegistered, //
- ErrorAlreadyRegistered, // not used yet; RegisterApp() returns existing token
- ErrorClassAlreadyExists, // not used yet; AddClass() returns existing token
- ErrorClassBlocked,
- ErrorClassNotFound,
- ErrorNotificationNotFound
- };
-
- /// <summary>
- /// Application flags - features this app supports.
- /// </summary>
- enum AppFlags
- {
- AppDefault = 0,
- AppHasPrefs = 1,
- AppHasAbout = 2,
- AppIsWindowless = 0x8000
- };
-
- enum SnarlCommand
- {
- RegisterApp = 1,
- UnregisterApp,
- UpdateApp,
- SetCallback,
- AddClass,
- RemoveClass,
- Notify,
- UpdateNotification,
- HideNotification,
- IsNotificationVisible,
- LastError // deprecated but retained for backwards compatability
- };
- }
-
- struct SnarlMessage
- {
- SnarlEnums::SnarlCommand Command;
- LONG32 Token;
- BYTE PacketData[SnarlPacketDataSize];
- };
-
- static const DWORD WM_SNARLTEST = WM_USER + 237;
-
-
- // ------------------------------------------------------------------------
- /// SnarlInterface class definition
- // ------------------------------------------------------------------------
- class SnarlInterface {
- public:
- SnarlInterface();
- ~SnarlInterface();
-
- LPTSTR AllocateString(size_t n) { return new TCHAR[n]; }
- void FreeString(LPTSTR str) { delete [] str; str = NULL; }
- void FreeString(LPCTSTR str) { delete [] str; }
-
- /// <summary>Register application with Snarl.</summary>
- /// <returns>The application token or 0 on failure.</returns>
- /// <remarks>The application token is saved in SnarlInterface member variable, so just use return value to check for error.</remarks>
- LONG32 RegisterApp(LPCSTR signature, LPCSTR title, LPCSTR icon, HWND hWndReply = NULL, LONG32 msgReply = 0, SnarlEnums::AppFlags flags = SnarlEnums::AppDefault);
- LONG32 RegisterApp(LPCWSTR signature, LPCWSTR title, LPCWSTR icon, HWND hWndReply = NULL, LONG32 msgReply = 0, SnarlEnums::AppFlags flags = SnarlEnums::AppDefault);
-
- /// <summary>Unregister application with Snarl when application is closing.</summary>
- /// <returns>0 on failure.</returns>
- LONG32 UnregisterApp();
-
- /// <summary>Update information provided when calling RegisterApp.</summary>
- /// <returns>0 on failure.</returns>
- LONG32 UpdateApp(LPCSTR title = NULL, LPCSTR icon = NULL);
- LONG32 UpdateApp(LPCWSTR title = NULL, LPCWSTR icon = NULL);
-
- /// <summary>Add a notification class to Snarl.</summary>
- /// <returns>0 on failure.</returns>
- LONG32 AddClass(LPCSTR className, LPCSTR description, bool enabled = true);
- LONG32 AddClass(LPCWSTR className, LPCWSTR description, bool enabled = true);
-
- /// <summary>Remove a notification class added with AddClass().</summary>
- /// <returns>0 on failure.</returns>
- LONG32 RemoveClass(LPCSTR className, bool forgetSettings = false);
- LONG32 RemoveClass(LPCWSTR className, bool forgetSettings = false);
-
- /// <summary>Remove all notification classes in one call.</summary>
- /// <returns>0 on failure.</returns>
- LONG32 RemoveAllClasses(bool forgetSettings = false);
-
- /// <summary>Show a Snarl notification.</summary>
- /// <returns>Returns the notification token or 0 on failure.</returns>
- /// <remarks>You can use <see cref="GetLastMsgToken()" /> to get the last token.</remarks>
- LONG32 EZNotify(LPCSTR className, LPCSTR title, LPCSTR text, LONG32 timeout = -1, LPCSTR icon = NULL, LONG32 priority = 0, LPCSTR acknowledge = NULL, LPCSTR value = NULL);
- LONG32 EZNotify(LPCWSTR className, LPCWSTR title, LPCWSTR text, LONG32 timeout = -1, LPCWSTR icon = NULL, LONG32 priority = 0, LPCWSTR acknowledge = NULL, LPCWSTR value = NULL);
-
- /// <summary>
- /// Show a Snarl notification.
- /// This function requires that you write your own packet data.
- /// </summary>
- /// <returns>Returns the notification token or 0 on failure.</returns>
- /// <remarks>You can use <see cref="GetLastMsgToken()" /> to get the last token.</remarks>
- LONG32 Notify(LPCSTR className, LPCSTR packetData);
- LONG32 Notify(LPCWSTR className, LPCWSTR packetData);
-
- /// <summary>Update the text or other parameters of a visible Snarl notification.</summary>
- /// <returns>0 on failure.</returns>
- LONG32 EZUpdate(LONG32 msgToken, LPCSTR title = NULL, LPCSTR text = NULL, LONG32 timeout = -1, LPCSTR icon = NULL);
- LONG32 EZUpdate(LONG32 msgToken, LPCWSTR title = NULL, LPCWSTR text = NULL, LONG32 timeout = -1, LPCWSTR icon = NULL);
-
- /// <summary>
- /// Update the text or other parameters of a visible Snarl notification.
- /// This function requires that you write your own packet data.
- /// </summary>
- /// <returns>0 on failure.</returns>
- LONG32 Update(LONG32 msgToken, LPCSTR packetData);
- LONG32 Update(LONG32 msgToken, LPCWSTR packetData);
-
- /// <summary>Hide a Snarl notification.</summary>
- /// <returns>0 on failure.</returns>
- LONG32 Hide(LONG32 msgToken);
-
- /// <summary>Test if a Snarl notification is visible.</summary>
- /// <returns>Returns -1 if message is visible. 0 if not visible or if an error occured.</returns>
- LONG32 IsVisible(LONG32 msgToken);
-
- /// <summary>Get the last error from Snarl. Call after other functions return 0 to know why it failed.</summary>
- /// <returns>Returns one of the SnarlEnums::SnarlStatus values.</returns>
- SnarlEnums::SnarlStatus GetLastError();
-
- /// <summary>Get Snarl version, if it is running.</summary>
- /// <returns>Returns a number indicating Snarl version.</returns>
- LONG32 GetVersion();
-
- /// <summary>
- /// Get the path to where Snarl is installed.
- /// ** Remember to call <see cref="FreeString(LPCTSTR)" /> on the returned string !!!
- /// </summary>
- /// <returns>Returns the path to where Snarl is installed.</returns>
- /// <remarks>This is a V39 API method.</remarks>
- LPCTSTR GetAppPath();
-
- /// <summary>
- /// Get the path to where the default Snarl icons are located.
- /// <para>** Remember to call <see cref="FreeString(LPCTSTR)" /> on the returned string !!!</para>
- /// </summary>
- /// <returns>Returns the path to where the default Snarl icons are located.</returns>
- /// <remarks>This is a V39 API method.</remarks>
- LPCTSTR GetIconsPath();
-
- /// <summary>GetLastMsgToken() returns token of the last message sent to Snarl.</summary>
- /// <returns>Returns message token of last message.</returns>
- /// <remarks>This function is not in the official API!</remarks>
- LONG32 GetLastMsgToken() const;
-
- /// <summary>Check whether Snarl is running</summary>
- /// <returns>Returns true if Snarl system was found running.</returns>
- static BOOL IsSnarlRunning();
-
- /// <summary>
- /// Returns the value of Snarl's global registered message.
- /// Notes:
- /// Snarl registers SNARL_GLOBAL_MSG during startup which it then uses to communicate
- /// with all running applications through a Windows broadcast message. This function can
- /// only fail if for some reason the Windows RegisterWindowMessage() function fails
- /// - given this, this function *cannnot* be used to test for the presence of Snarl.
- /// </summary>
- /// <returns>A 16-bit value (translated to 32-bit) which is the registered Windows message for Snarl.</returns>
- static UINT Broadcast();
-
- /// <summary>Returns the global Snarl Application message (V39)</summary>
- /// <returns>Returns Snarl application registered message.</returns>
- static UINT AppMsg();
-
- /// <summary>Returns a handle to the Snarl Dispatcher window (V37)</summary>
- /// <returns>Returns handle to Snarl Dispatcher window, or zero if it's not found.</returns>
- /// <remarks>This is now the preferred way to test if Snarl is actually running.</remarks>
- static HWND GetSnarlWindow();
-
- private:
- /// <summary>Send message to Snarl.</summary>
- /// <returns>Return zero on failure.</returns>
- LONG32 Send(SnarlMessage msg);
-
- /// <summary>Convert a unicode string to UTF8</summary>
- /// <returns>Returns pointer to the new string - Remember to delete [] returned string !</returns>
- /// <remarks>Remember to delete [] returned string !!!</remarks>
- LPSTR WideToUTF8(LPCWSTR szWideStr);
-
- /// <summary>Pack data into the PackedData member field.</summary>
- /// <param name="data">Should always be a pointer to the PackedData field</param>
- /// <param name="format">The format string. Can be NULL or "" to just zero PackedData!</param>
- /// <param name="...">Variable number of objects to convert</param>
- void PackData(BYTE* data, LPCSTR format, ...);
-
- LONG32 appToken;
- LONG32 lastMsgToken;
- SnarlEnums::SnarlStatus localError;
-
- }; // class
-
- } // namespace V41
-} // namespace Snarl
-
-#endif // SNARL_INTERFACE_V41
diff --git a/BuildTools/SCons/SConstruct b/BuildTools/SCons/SConstruct
index 70cd9d8..6dd1115 100644
--- a/BuildTools/SCons/SConstruct
+++ b/BuildTools/SCons/SConstruct
@@ -317,10 +317,6 @@ if env["PLATFORM"] == "darwin" :
env["GROWL_FRAMEWORK"] = "/Library/Frameworks/Growl.framework"
conf.Finish()
-# Snarl
-if env["PLATFORM"] == "win32" :
- env["HAVE_SNARL"] = True
-
# LibXML
conf = Configure(conf_env, custom_tests = {"CheckVersion": CheckVersion})
if env.get("try_libxml", True) and conf.CheckCHeader("libxml/parser.h") and conf.CheckLib("xml2") :
diff --git a/SwifTools/Notifier/SConscript b/SwifTools/Notifier/SConscript
index a8e8590..e87312c 100644
--- a/SwifTools/Notifier/SConscript
+++ b/SwifTools/Notifier/SConscript
@@ -17,11 +17,5 @@ elif myenv["PLATFORM"] == "darwin" :
"NotificationCenterNotifierDelegate.mm",
]
-if swiftools_env.get("HAVE_SNARL", False) :
- myenv.MergeFlags(myenv["SNARL_FLAGS"])
- sources += [
- "SnarlNotifier.cpp",
- ]
-
objects = myenv.StaticObject(sources)
swiftools_env.Append(SWIFTOOLS_OBJECTS = objects)
diff --git a/SwifTools/Notifier/SnarlNotifier.cpp b/SwifTools/Notifier/SnarlNotifier.cpp
deleted file mode 100644
index e3977a7..0000000
--- a/SwifTools/Notifier/SnarlNotifier.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2010 Isode Limited.
- * All rights reserved.
- * See the COPYING file for more information.
- */
-
-#include <SwifTools/Notifier/SnarlNotifier.h>
-
-#include <cassert>
-#include <iostream>
-#include <boost/bind.hpp>
-
-#include <Swiften/Base/foreach.h>
-#include <SwifTools/Notifier/Win32NotifierWindow.h>
-
-#define SWIFT_SNARLNOTIFIER_MESSAGE_ID 0x4567 // Sounds sick to pick a number, but this is windows
-
-namespace Swift {
-
-SnarlNotifier::SnarlNotifier(const std::string& name, Win32NotifierWindow* window, const boost::filesystem::path& icon) : window(window), available(false) {
- window->onMessageReceived.connect(boost::bind(&SnarlNotifier::handleMessageReceived, this, _1));
- available = snarl.RegisterApp(name.c_str(), name.c_str(), icon.string().c_str(), window->getID(), SWIFT_SNARLNOTIFIER_MESSAGE_ID);
- foreach(Notifier::Type type, getAllTypes()) {
- snarl.AddClass(typeToString(type).c_str(), typeToString(type).c_str());
- }
-}
-
-SnarlNotifier::~SnarlNotifier() {
- snarl.UnregisterApp();
- window->onMessageReceived.disconnect(boost::bind(&SnarlNotifier::handleMessageReceived, this, _1));
- if (!notifications.empty()) {
- std::cerr << "Warning: " << notifications.size() << " Snarl notifications pending" << std::endl;
- }
-}
-
-bool SnarlNotifier::isAvailable() const {
- return available;
-}
-
-
-void SnarlNotifier::showMessage(Type type, const std::string& subject, const std::string& description, const boost::filesystem::path& picture, boost::function<void()> callback) {
- int timeout = (type == IncomingMessage || type == SystemMessage) ? DEFAULT_MESSAGE_NOTIFICATION_TIMEOUT_SECONDS : DEFAULT_STATUS_NOTIFICATION_TIMEOUT_SECONDS;
- int notificationID = snarl.EZNotify(
- typeToString(type).c_str(),
- subject.c_str(),
- description.c_str(),
- timeout,
- picture.string().c_str());
- if (notificationID > 0) {
- notifications.insert(std::make_pair(notificationID, callback));
- }
-}
-
-void SnarlNotifier::handleMessageReceived(MSG* message) {
- if (message->message == SWIFT_SNARLNOTIFIER_MESSAGE_ID) {
- int action = message->wParam;
- if (action == Snarl::V41::SnarlEnums::NotificationTimedOut || action == Snarl::V41::SnarlEnums::NotificationAck || action == Snarl::V41::SnarlEnums::NotificationClosed) {
- int notificationID = message->lParam;
- NotificationsMap::iterator i = notifications.find(notificationID);
- if (i != notifications.end()) {
- if (action == Snarl::V41::SnarlEnums::NotificationAck && !i->second.empty()) {
- i->second();
- }
- notifications.erase(i);
- }
- else {
- std::cerr << "Warning: Orphaned Snarl notification received";
- }
- }
- }
-}
-
-}
diff --git a/SwifTools/Notifier/SnarlNotifier.h b/SwifTools/Notifier/SnarlNotifier.h
deleted file mode 100644
index 5006185..0000000
--- a/SwifTools/Notifier/SnarlNotifier.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2010-2016 Isode Limited.
- * All rights reserved.
- * See the COPYING file for more information.
- */
-
-#pragma once
-
-#include <map>
-
-#include <SnarlInterface.h>
-
-#include <SwifTools/Notifier/Notifier.h>
-
-namespace Swift {
- class Win32NotifierWindow;
-
- class SnarlNotifier : public Notifier {
- public:
- SnarlNotifier(const std::string& name, Win32NotifierWindow* window, const boost::filesystem::path& icon);
- ~SnarlNotifier();
-
- virtual void showMessage(Type type, const std::string& subject, const std::string& description, const boost::filesystem::path& picture, boost::function<void()> callback);
- virtual bool isAvailable() const;
-
- virtual void purgeCallbacks() {
- notifications.clear();
- }
-
- private:
- void handleMessageReceived(MSG* message);
-
- private:
- Snarl::V41::SnarlInterface snarl;
- Win32NotifierWindow* window;
- bool available;
- typedef std::map<int, boost::function<void()> > NotificationsMap;
- NotificationsMap notifications;
- };
-}
diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript
index 4b3d716..7e2aafe 100644
--- a/Swift/QtUI/SConscript
+++ b/Swift/QtUI/SConscript
@@ -43,9 +43,6 @@ if myenv.get("HAVE_GROWL", False) :
myenv.Append(CPPDEFINES = ["HAVE_GROWL"])
if myenv["swift_mobile"] :
myenv.Append(CPPDEFINES = ["SWIFT_MOBILE"])
-if myenv.get("HAVE_SNARL", False) :
- myenv.UseFlags(myenv["SNARL_FLAGS"])
- myenv.Append(CPPDEFINES = ["HAVE_SNARL"])
if myenv.get("HAVE_HUNSPELL", True):
myenv.Append(CPPDEFINES = ["HAVE_HUNSPELL"])
myenv.UseFlags(myenv["HUNSPELL_FLAGS"])
diff --git a/Swift/QtUI/WindowsNotifier.cpp b/Swift/QtUI/WindowsNotifier.cpp
index c954fab..d6e8ba9 100644
--- a/Swift/QtUI/WindowsNotifier.cpp
+++ b/Swift/QtUI/WindowsNotifier.cpp
@@ -20,20 +20,14 @@ namespace Swift {
WindowsNotifier::WindowsNotifier(const std::string& name, const boost::filesystem::path& icon, QSystemTrayIcon* tray) : tray(tray) {
notifierWindow = new QtWin32NotifierWindow();
- snarlNotifier = new SnarlNotifier(name, notifierWindow, icon);
connect(tray, SIGNAL(messageClicked()), SLOT(handleMessageClicked()));
}
WindowsNotifier::~WindowsNotifier() {
- delete snarlNotifier;
delete notifierWindow;
}
void WindowsNotifier::showMessage(Type type, const std::string& subject, const std::string& description, const boost::filesystem::path& picture, boost::function<void()> callback) {
- if (snarlNotifier->isAvailable()) {
- snarlNotifier->showMessage(type, subject, description, picture, callback);
- return;
- }
std::vector<Notifier::Type> defaultTypes = getDefaultTypes();
if (std::find(defaultTypes.begin(), defaultTypes.end(), type) == defaultTypes.end()) {
return;
diff --git a/Swift/QtUI/WindowsNotifier.h b/Swift/QtUI/WindowsNotifier.h
index fae0795..945ef6b 100644
--- a/Swift/QtUI/WindowsNotifier.h
+++ b/Swift/QtUI/WindowsNotifier.h
@@ -11,11 +11,12 @@
#include <QObject>
#include <SwifTools/Notifier/Notifier.h>
-#include <SwifTools/Notifier/SnarlNotifier.h>
class QSystemTrayIcon;
namespace Swift {
+ class Win32NotifierWindow;
+
class WindowsNotifier : public QObject, public Notifier {
Q_OBJECT
@@ -32,7 +33,6 @@ namespace Swift {
private:
QSystemTrayIcon* tray;
Win32NotifierWindow* notifierWindow;
- SnarlNotifier* snarlNotifier;
boost::function<void()> lastCallback;
};
}