Windows 8/8.1/10 toast notifications support added
This commit is contained in:
		
							parent
							
								
									1b16064db6
								
							
						
					
					
						commit
						cf9737e762
					
				
					 14 changed files with 889 additions and 100 deletions
				
			
		|  | @ -185,6 +185,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org | ||||||
| "lng_settings_desktop_notify" = "Desktop notifications"; | "lng_settings_desktop_notify" = "Desktop notifications"; | ||||||
| "lng_settings_show_name" = "Show sender's name"; | "lng_settings_show_name" = "Show sender's name"; | ||||||
| "lng_settings_show_preview" = "Show message preview"; | "lng_settings_show_preview" = "Show message preview"; | ||||||
|  | "lng_settings_use_windows" = "Use Windows notifications"; | ||||||
| "lng_settings_sound_notify" = "Play sound"; | "lng_settings_sound_notify" = "Play sound"; | ||||||
| 
 | 
 | ||||||
| "lng_notification_preview" = "You have a new message"; | "lng_notification_preview" = "You have a new message"; | ||||||
|  |  | ||||||
|  | @ -321,6 +321,7 @@ enum { | ||||||
| 	MemoryForImageCache = 64 * 1024 * 1024, // after 64mb of unpacked images we try to clear some memory
 | 	MemoryForImageCache = 64 * 1024 * 1024, // after 64mb of unpacked images we try to clear some memory
 | ||||||
| 	NotifyWindowsCount = 3, // 3 desktop notifies at the same time
 | 	NotifyWindowsCount = 3, // 3 desktop notifies at the same time
 | ||||||
| 	NotifySettingSaveTimeout = 1000, // wait 1 second before saving notify setting to server
 | 	NotifySettingSaveTimeout = 1000, // wait 1 second before saving notify setting to server
 | ||||||
|  | 	NotifyDeletePhotoAfter = 60000, // delete notify photo after 1 minute
 | ||||||
| 	UpdateChunk = 100 * 1024, // 100kb parts when downloading the update
 | 	UpdateChunk = 100 * 1024, // 100kb parts when downloading the update
 | ||||||
| 	IdleMsecs = 60 * 1000, // after 60secs without user input we think we are idle
 | 	IdleMsecs = 60 * 1000, // after 60secs without user input we think we are idle
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -154,6 +154,10 @@ inline StorageKey storageKey(int32 dc, const uint64 &volume, int32 local) { | ||||||
| inline StorageKey storageKey(const MTPDfileLocation &location) { | inline StorageKey storageKey(const MTPDfileLocation &location) { | ||||||
| 	return storageKey(location.vdc_id.v, location.vvolume_id.v, location.vlocal_id.v); | 	return storageKey(location.vdc_id.v, location.vvolume_id.v, location.vlocal_id.v); | ||||||
| } | } | ||||||
|  | inline StorageKey storageKey(const StorageImageLocation &location) { | ||||||
|  | 	return storageKey(location.dc, location.volume, location.local); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| enum StorageFileType { | enum StorageFileType { | ||||||
| 	StorageFileUnknown = 0xaa963b05, // mtpc_storage_fileUnknown
 | 	StorageFileUnknown = 0xaa963b05, // mtpc_storage_fileUnknown
 | ||||||
| 	StorageFileJpeg    = 0x7efe0e,   // mtpc_storage_fileJpeg
 | 	StorageFileJpeg    = 0x7efe0e,   // mtpc_storage_fileJpeg
 | ||||||
|  |  | ||||||
|  | @ -19,6 +19,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org | ||||||
| #include "localstorage.h" | #include "localstorage.h" | ||||||
| 
 | 
 | ||||||
| #include "mainwidget.h" | #include "mainwidget.h" | ||||||
|  | #include "window.h" | ||||||
| #include "lang.h" | #include "lang.h" | ||||||
| 
 | 
 | ||||||
| namespace { | namespace { | ||||||
|  | @ -737,6 +738,15 @@ namespace { | ||||||
| 			cSetDesktopNotify(v == 1); | 			cSetDesktopNotify(v == 1); | ||||||
| 		} break; | 		} break; | ||||||
| 
 | 
 | ||||||
|  | 		case dbiWindowsNotifications: { | ||||||
|  | 			qint32 v; | ||||||
|  | 			stream >> v; | ||||||
|  | 			if (!_checkStreamStatus(stream)) return false; | ||||||
|  | 
 | ||||||
|  | 			cSetWindowsNotifications(v == 1); | ||||||
|  | 			cSetCustomNotifies((App::wnd() ? App::wnd()->psHasNativeNotifications() : true) && !cWindowsNotifications()); | ||||||
|  | 		} break; | ||||||
|  | 
 | ||||||
| 		case dbiWorkMode: { | 		case dbiWorkMode: { | ||||||
| 			qint32 v; | 			qint32 v; | ||||||
| 			stream >> v; | 			stream >> v; | ||||||
|  | @ -1269,7 +1279,7 @@ namespace { | ||||||
| 			_writeMap(WriteMapFast); | 			_writeMap(WriteMapFast); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		uint32 size = 12 * (sizeof(quint32) + sizeof(qint32)); | 		uint32 size = 13 * (sizeof(quint32) + sizeof(qint32)); | ||||||
| 		size += sizeof(quint32) + _stringSize(cAskDownloadPath() ? QString() : cDownloadPath()); | 		size += sizeof(quint32) + _stringSize(cAskDownloadPath() ? QString() : cDownloadPath()); | ||||||
| 		size += sizeof(quint32) + sizeof(qint32) + (cRecentEmojisPreload().isEmpty() ? cGetRecentEmojis().size() : cRecentEmojisPreload().size()) * (sizeof(uint64) + sizeof(ushort)); | 		size += sizeof(quint32) + sizeof(qint32) + (cRecentEmojisPreload().isEmpty() ? cGetRecentEmojis().size() : cRecentEmojisPreload().size()) * (sizeof(uint64) + sizeof(ushort)); | ||||||
| 		size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64)); | 		size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64)); | ||||||
|  | @ -1285,6 +1295,7 @@ namespace { | ||||||
| 		data.stream << quint32(dbiSoundNotify) << qint32(cSoundNotify()); | 		data.stream << quint32(dbiSoundNotify) << qint32(cSoundNotify()); | ||||||
| 		data.stream << quint32(dbiDesktopNotify) << qint32(cDesktopNotify()); | 		data.stream << quint32(dbiDesktopNotify) << qint32(cDesktopNotify()); | ||||||
| 		data.stream << quint32(dbiNotifyView) << qint32(cNotifyView()); | 		data.stream << quint32(dbiNotifyView) << qint32(cNotifyView()); | ||||||
|  | 		data.stream << quint32(dbiWindowsNotifications) << qint32(cWindowsNotifications()); | ||||||
| 		data.stream << quint32(dbiAskDownloadPath) << qint32(cAskDownloadPath()); | 		data.stream << quint32(dbiAskDownloadPath) << qint32(cAskDownloadPath()); | ||||||
| 		data.stream << quint32(dbiDownloadPath) << (cAskDownloadPath() ? QString() : cDownloadPath()); | 		data.stream << quint32(dbiDownloadPath) << (cAskDownloadPath() ? QString() : cDownloadPath()); | ||||||
| 		data.stream << quint32(dbiCompressPastedImage) << qint32(cCompressPastedImage()); | 		data.stream << quint32(dbiCompressPastedImage) << qint32(cCompressPastedImage()); | ||||||
|  |  | ||||||
|  | @ -68,6 +68,10 @@ public: | ||||||
| 
 | 
 | ||||||
| 	void psUpdateCounter(); | 	void psUpdateCounter(); | ||||||
| 
 | 
 | ||||||
|  | 	bool psHasNativeNotifications() { | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; | 	virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; | ||||||
| 
 | 
 | ||||||
| 	~PsMainWindow(); | 	~PsMainWindow(); | ||||||
|  |  | ||||||
|  | @ -83,6 +83,10 @@ public: | ||||||
| 
 | 
 | ||||||
| 	void psUpdateCounter(); | 	void psUpdateCounter(); | ||||||
| 
 | 
 | ||||||
|  | 	bool psHasNativeNotifications() { | ||||||
|  | 		return !(QSysInfo::macVersion() < QSysInfo::MV_10_8); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; | 	virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; | ||||||
| 
 | 
 | ||||||
| 	~PsMainWindow(); | 	~PsMainWindow(); | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -67,6 +67,9 @@ public: | ||||||
| 
 | 
 | ||||||
| 	void psUpdateCounter(); | 	void psUpdateCounter(); | ||||||
| 
 | 
 | ||||||
|  | 	bool psHasNativeNotifications(); | ||||||
|  | 	void psCleanNotifyPhotosIn(int32 dt); | ||||||
|  | 
 | ||||||
| 	virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; | 	virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; | ||||||
| 
 | 
 | ||||||
| 	~PsMainWindow(); | 	~PsMainWindow(); | ||||||
|  | @ -77,6 +80,8 @@ public slots: | ||||||
| 	void psSavePosition(Qt::WindowState state = Qt::WindowActive); | 	void psSavePosition(Qt::WindowState state = Qt::WindowActive); | ||||||
|     void psShowTrayMenu(); |     void psShowTrayMenu(); | ||||||
| 
 | 
 | ||||||
|  | 	void psCleanNotifyPhotos(); | ||||||
|  | 
 | ||||||
| protected: | protected: | ||||||
| 
 | 
 | ||||||
|     bool psHasTrayIcon() const { |     bool psHasTrayIcon() const { | ||||||
|  | @ -100,6 +105,8 @@ private: | ||||||
| 	HMENU ps_menu; | 	HMENU ps_menu; | ||||||
| 	HICON ps_iconBig, ps_iconSmall, ps_iconOverlay; | 	HICON ps_iconBig, ps_iconSmall, ps_iconOverlay; | ||||||
| 
 | 
 | ||||||
|  | 	SingleTimer ps_cleanNotifyPhotosTimer; | ||||||
|  | 
 | ||||||
| 	void psDestroyIcons(); | 	void psDestroyIcons(); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -42,6 +42,7 @@ QString gDialogLastPath, gDialogHelperPath; // optimize QFileDialog | ||||||
| bool gSoundNotify = true; | bool gSoundNotify = true; | ||||||
| bool gDesktopNotify = true; | bool gDesktopNotify = true; | ||||||
| DBINotifyView gNotifyView = dbinvShowPreview; | DBINotifyView gNotifyView = dbinvShowPreview; | ||||||
|  | bool gWindowsNotifications = true; | ||||||
| bool gStartMinimized = false; | bool gStartMinimized = false; | ||||||
| bool gStartInTray = false; | bool gStartInTray = false; | ||||||
| bool gAutoStart = false; | bool gAutoStart = false; | ||||||
|  | @ -119,11 +120,7 @@ QString gLangFile; | ||||||
| bool gRetina = false; | bool gRetina = false; | ||||||
| float64 gRetinaFactor = 1.; | float64 gRetinaFactor = 1.; | ||||||
| int32 gIntRetinaFactor = 1; | int32 gIntRetinaFactor = 1; | ||||||
| #ifdef Q_OS_MAC |  | ||||||
| bool gCustomNotifies = false; |  | ||||||
| #else |  | ||||||
| bool gCustomNotifies = true; | bool gCustomNotifies = true; | ||||||
| #endif |  | ||||||
| uint64 gInstance = 0.; | uint64 gInstance = 0.; | ||||||
| 
 | 
 | ||||||
| #ifdef Q_OS_WIN | #ifdef Q_OS_WIN | ||||||
|  | @ -163,7 +160,6 @@ SavedPeers gSavedPeers; | ||||||
| SavedPeersByTime gSavedPeersByTime; | SavedPeersByTime gSavedPeersByTime; | ||||||
| 
 | 
 | ||||||
| void settingsParseArgs(int argc, char *argv[]) { | void settingsParseArgs(int argc, char *argv[]) { | ||||||
| 	gCustomNotifies = true; |  | ||||||
| #ifdef Q_OS_MAC | #ifdef Q_OS_MAC | ||||||
| 	if (QSysInfo::macVersion() < QSysInfo::MV_10_8) { | 	if (QSysInfo::macVersion() < QSysInfo::MV_10_8) { | ||||||
| 		gUpdateURL = QUrl(qsl("http://tdesktop.com/mac32/tupdates/current")); | 		gUpdateURL = QUrl(qsl("http://tdesktop.com/mac32/tupdates/current")); | ||||||
|  |  | ||||||
|  | @ -101,6 +101,8 @@ DeclareSetting(bool, DesktopNotify); | ||||||
| DeclareSetting(DBINotifyView, NotifyView); | DeclareSetting(DBINotifyView, NotifyView); | ||||||
| DeclareSetting(bool, AutoUpdate); | DeclareSetting(bool, AutoUpdate); | ||||||
| 
 | 
 | ||||||
|  | DeclareSetting(bool, WindowsNotifications); | ||||||
|  | 
 | ||||||
| struct TWindowPos { | struct TWindowPos { | ||||||
| 	TWindowPos() : moncrc(0), maximized(0), x(0), y(0), w(0), h(0) { | 	TWindowPos() : moncrc(0), maximized(0), x(0), y(0), w(0), h(0) { | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -122,6 +122,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), | ||||||
| 	_desktopNotify(this, lang(lng_settings_desktop_notify), cDesktopNotify()), | 	_desktopNotify(this, lang(lng_settings_desktop_notify), cDesktopNotify()), | ||||||
| 	_senderName(this, lang(lng_settings_show_name), cNotifyView() <= dbinvShowName), | 	_senderName(this, lang(lng_settings_show_name), cNotifyView() <= dbinvShowName), | ||||||
| 	_messagePreview(this, lang(lng_settings_show_preview), cNotifyView() <= dbinvShowPreview), | 	_messagePreview(this, lang(lng_settings_show_preview), cNotifyView() <= dbinvShowPreview), | ||||||
|  | 	_windowsNotifications(this, lang(lng_settings_use_windows), cWindowsNotifications()), | ||||||
| 	_soundNotify(this, lang(lng_settings_sound_notify), cSoundNotify()), | 	_soundNotify(this, lang(lng_settings_sound_notify), cSoundNotify()), | ||||||
| 
 | 
 | ||||||
| 	// general
 | 	// general
 | ||||||
|  | @ -217,6 +218,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), | ||||||
| 	connect(&_desktopNotify, SIGNAL(changed()), this, SLOT(onDesktopNotify())); | 	connect(&_desktopNotify, SIGNAL(changed()), this, SLOT(onDesktopNotify())); | ||||||
| 	connect(&_senderName, SIGNAL(changed()), this, SLOT(onSenderName())); | 	connect(&_senderName, SIGNAL(changed()), this, SLOT(onSenderName())); | ||||||
| 	connect(&_messagePreview, SIGNAL(changed()), this, SLOT(onMessagePreview())); | 	connect(&_messagePreview, SIGNAL(changed()), this, SLOT(onMessagePreview())); | ||||||
|  | 	connect(&_windowsNotifications, SIGNAL(changed()), this, SLOT(onWindowsNotifications())); | ||||||
| 	connect(&_soundNotify, SIGNAL(changed()), this, SLOT(onSoundNotify())); | 	connect(&_soundNotify, SIGNAL(changed()), this, SLOT(onSoundNotify())); | ||||||
| 
 | 
 | ||||||
| 	// general
 | 	// general
 | ||||||
|  | @ -411,6 +413,9 @@ void SettingsInner::paintEvent(QPaintEvent *e) { | ||||||
| 		top += _desktopNotify.height() + st::setLittleSkip; | 		top += _desktopNotify.height() + st::setLittleSkip; | ||||||
| 		top += _senderName.height() + st::setLittleSkip; | 		top += _senderName.height() + st::setLittleSkip; | ||||||
| 		top += _messagePreview.height() + st::setSectionSkip; | 		top += _messagePreview.height() + st::setSectionSkip; | ||||||
|  | 		if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { | ||||||
|  | 			top += _windowsNotifications.height() + st::setSectionSkip; | ||||||
|  | 		} | ||||||
| 		top += _soundNotify.height(); | 		top += _soundNotify.height(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -637,6 +642,9 @@ void SettingsInner::resizeEvent(QResizeEvent *e) { | ||||||
| 		_desktopNotify.move(_left, top); top += _desktopNotify.height() + st::setLittleSkip; | 		_desktopNotify.move(_left, top); top += _desktopNotify.height() + st::setLittleSkip; | ||||||
| 		_senderName.move(_left, top); top += _senderName.height() + st::setLittleSkip; | 		_senderName.move(_left, top); top += _senderName.height() + st::setLittleSkip; | ||||||
| 		_messagePreview.move(_left, top); top += _messagePreview.height() + st::setSectionSkip; | 		_messagePreview.move(_left, top); top += _messagePreview.height() + st::setSectionSkip; | ||||||
|  | 		if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { | ||||||
|  | 			_windowsNotifications.move(_left, top); top += _windowsNotifications.height() + st::setSectionSkip; | ||||||
|  | 		} | ||||||
| 		_soundNotify.move(_left, top); top += _soundNotify.height(); | 		_soundNotify.move(_left, top); top += _soundNotify.height(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -936,11 +944,17 @@ void SettingsInner::showAll() { | ||||||
| 		_desktopNotify.show(); | 		_desktopNotify.show(); | ||||||
| 		_senderName.show(); | 		_senderName.show(); | ||||||
| 		_messagePreview.show(); | 		_messagePreview.show(); | ||||||
|  | 		if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { | ||||||
|  | 			_windowsNotifications.show(); | ||||||
|  | 		} else { | ||||||
|  | 			_windowsNotifications.hide(); | ||||||
|  | 		} | ||||||
| 		_soundNotify.show(); | 		_soundNotify.show(); | ||||||
| 	} else { | 	} else { | ||||||
| 		_desktopNotify.hide(); | 		_desktopNotify.hide(); | ||||||
| 		_senderName.hide(); | 		_senderName.hide(); | ||||||
| 		_messagePreview.hide(); | 		_messagePreview.hide(); | ||||||
|  | 		_windowsNotifications.hide(); | ||||||
| 		_soundNotify.hide(); | 		_soundNotify.hide(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -1349,6 +1363,13 @@ void SettingsInner::onSoundNotify() { | ||||||
| 	Local::writeUserSettings(); | 	Local::writeUserSettings(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void SettingsInner::onWindowsNotifications() { | ||||||
|  | 	cSetWindowsNotifications(!cWindowsNotifications()); | ||||||
|  | 	App::wnd()->notifyClearFast(); | ||||||
|  | 	cSetCustomNotifies(!cWindowsNotifications()); | ||||||
|  | 	Local::writeUserSettings(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void SettingsInner::onDesktopNotify() { | void SettingsInner::onDesktopNotify() { | ||||||
| 	cSetDesktopNotify(_desktopNotify.checked()); | 	cSetDesktopNotify(_desktopNotify.checked()); | ||||||
| 	if (!_desktopNotify.checked()) { | 	if (!_desktopNotify.checked()) { | ||||||
|  |  | ||||||
|  | @ -125,6 +125,8 @@ public slots: | ||||||
| 	void onSenderName(); | 	void onSenderName(); | ||||||
| 	void onMessagePreview(); | 	void onMessagePreview(); | ||||||
| 
 | 
 | ||||||
|  | 	void onWindowsNotifications(); | ||||||
|  | 
 | ||||||
| 	void onReplaceEmojis(); | 	void onReplaceEmojis(); | ||||||
| 	void onViewEmojis(); | 	void onViewEmojis(); | ||||||
| 
 | 
 | ||||||
|  | @ -192,7 +194,7 @@ private: | ||||||
| 	LinkButton _chooseUsername; | 	LinkButton _chooseUsername; | ||||||
| 
 | 
 | ||||||
| 	// notifications
 | 	// notifications
 | ||||||
| 	FlatCheckbox _desktopNotify, _senderName, _messagePreview, _soundNotify; | 	FlatCheckbox _desktopNotify, _senderName, _messagePreview, _windowsNotifications, _soundNotify; | ||||||
| 
 | 
 | ||||||
| 	// general
 | 	// general
 | ||||||
| 	LinkButton _changeLanguage; | 	LinkButton _changeLanguage; | ||||||
|  |  | ||||||
|  | @ -232,55 +232,56 @@ QString translitRusEng(const QString &rus); | ||||||
| QString rusKeyboardLayoutSwitch(const QString &from); | QString rusKeyboardLayoutSwitch(const QString &from); | ||||||
| 
 | 
 | ||||||
| enum DataBlockId { | enum DataBlockId { | ||||||
| 	dbiKey                 = 0x00, | 	dbiKey                  = 0x00, | ||||||
| 	dbiUser                = 0x01, | 	dbiUser                 = 0x01, | ||||||
| 	dbiDcOptionOld         = 0x02, | 	dbiDcOptionOld          = 0x02, | ||||||
| 	dbiMaxGroupCount       = 0x03, | 	dbiMaxGroupCount        = 0x03, | ||||||
| 	dbiMutePeer            = 0x04, | 	dbiMutePeer             = 0x04, | ||||||
| 	dbiSendKey             = 0x05, | 	dbiSendKey              = 0x05, | ||||||
| 	dbiAutoStart           = 0x06, | 	dbiAutoStart            = 0x06, | ||||||
| 	dbiStartMinimized      = 0x07, | 	dbiStartMinimized       = 0x07, | ||||||
| 	dbiSoundNotify         = 0x08, | 	dbiSoundNotify          = 0x08, | ||||||
| 	dbiWorkMode            = 0x09, | 	dbiWorkMode             = 0x09, | ||||||
| 	dbiSeenTrayTooltip     = 0x0a, | 	dbiSeenTrayTooltip      = 0x0a, | ||||||
| 	dbiDesktopNotify       = 0x0b, | 	dbiDesktopNotify        = 0x0b, | ||||||
| 	dbiAutoUpdate          = 0x0c, | 	dbiAutoUpdate           = 0x0c, | ||||||
| 	dbiLastUpdateCheck     = 0x0d, | 	dbiLastUpdateCheck      = 0x0d, | ||||||
| 	dbiWindowPosition      = 0x0e, | 	dbiWindowPosition       = 0x0e, | ||||||
| 	dbiConnectionType      = 0x0f, | 	dbiConnectionType       = 0x0f, | ||||||
| // 0x10 reserved
 | // 0x10 reserved
 | ||||||
| 	dbiDefaultAttach       = 0x11, | 	dbiDefaultAttach        = 0x11, | ||||||
| 	dbiCatsAndDogs         = 0x12, | 	dbiCatsAndDogs          = 0x12, | ||||||
| 	dbiReplaceEmojis       = 0x13, | 	dbiReplaceEmojis        = 0x13, | ||||||
| 	dbiAskDownloadPath     = 0x14, | 	dbiAskDownloadPath      = 0x14, | ||||||
| 	dbiDownloadPath        = 0x15, | 	dbiDownloadPath         = 0x15, | ||||||
| 	dbiScale               = 0x16, | 	dbiScale                = 0x16, | ||||||
| 	dbiEmojiTab            = 0x17, | 	dbiEmojiTab             = 0x17, | ||||||
| 	dbiRecentEmojisOld     = 0x18, | 	dbiRecentEmojisOld      = 0x18, | ||||||
| 	dbiLoggedPhoneNumber   = 0x19, | 	dbiLoggedPhoneNumber    = 0x19, | ||||||
| 	dbiMutedPeers          = 0x1a, | 	dbiMutedPeers           = 0x1a, | ||||||
| // 0x1b reserved
 | // 0x1b reserved
 | ||||||
| 	dbiNotifyView          = 0x1c, | 	dbiNotifyView           = 0x1c, | ||||||
| 	dbiSendToMenu          = 0x1d, | 	dbiSendToMenu           = 0x1d, | ||||||
| 	dbiCompressPastedImage = 0x1e, | 	dbiCompressPastedImage  = 0x1e, | ||||||
| 	dbiLang                = 0x1f, | 	dbiLang                 = 0x1f, | ||||||
| 	dbiLangFile            = 0x20, | 	dbiLangFile             = 0x20, | ||||||
| 	dbiTileBackground      = 0x21, | 	dbiTileBackground       = 0x21, | ||||||
| 	dbiAutoLock            = 0x22, | 	dbiAutoLock             = 0x22, | ||||||
| 	dbiDialogLastPath      = 0x23, | 	dbiDialogLastPath       = 0x23, | ||||||
| 	dbiRecentEmojis        = 0x24, | 	dbiRecentEmojis         = 0x24, | ||||||
| 	dbiEmojiVariants       = 0x25, | 	dbiEmojiVariants        = 0x25, | ||||||
| 	dbiRecentStickers      = 0x26, | 	dbiRecentStickers       = 0x26, | ||||||
| 	dbiDcOption            = 0x27, | 	dbiDcOption             = 0x27, | ||||||
| 	dbiTryIPv6             = 0x28, | 	dbiTryIPv6              = 0x28, | ||||||
| 	dbiSongVolume          = 0x29, | 	dbiSongVolume           = 0x29, | ||||||
|  | 	dbiWindowsNotifications = 0x30, | ||||||
| 
 | 
 | ||||||
| 	dbiEncryptedWithSalt   = 333, | 	dbiEncryptedWithSalt    = 333, | ||||||
| 	dbiEncrypted           = 444, | 	dbiEncrypted            = 444, | ||||||
| 
 | 
 | ||||||
| 	// 500-600 reserved
 | 	// 500-600 reserved
 | ||||||
| 
 | 
 | ||||||
| 	dbiVersion             = 666, | 	dbiVersion              = 666, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| enum DBISendKey { | enum DBISendKey { | ||||||
|  |  | ||||||
|  | @ -54,14 +54,17 @@ | ||||||
|     <IntDir>$(SolutionDir)$(Platform)\$(Configuration)Intermediate\</IntDir> |     <IntDir>$(SolutionDir)$(Platform)\$(Configuration)Intermediate\</IntDir> | ||||||
|     <CustomBuildBeforeTargets> |     <CustomBuildBeforeTargets> | ||||||
|     </CustomBuildBeforeTargets> |     </CustomBuildBeforeTargets> | ||||||
|  |     <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|     <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> |     <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> | ||||||
|     <IntDir>$(SolutionDir)$(Platform)\$(Configuration)Intermediate\</IntDir> |     <IntDir>$(SolutionDir)$(Platform)\$(Configuration)Intermediate\</IntDir> | ||||||
|  |     <IncludePath>$(VC_IncludePath);$(WindowsSdk_71A_IncludePath);$(WindowsSDK_IncludePath);</IncludePath> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'"> |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'"> | ||||||
|     <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> |     <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> | ||||||
|     <IntDir>$(SolutionDir)$(Platform)\$(Configuration)Intermediate\</IntDir> |     <IntDir>$(SolutionDir)$(Platform)\$(Configuration)Intermediate\</IntDir> | ||||||
|  |     <IncludePath>$(VC_IncludePath);$(WindowsSdk_71A_IncludePath);$(WindowsSDK_IncludePath);</IncludePath> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|     <ClCompile> |     <ClCompile> | ||||||
|  | @ -80,7 +83,7 @@ | ||||||
|       <SubSystem>Windows</SubSystem> |       <SubSystem>Windows</SubSystem> | ||||||
|       <OutputFile>$(OutDir)$(ProjectName).exe</OutputFile> |       <OutputFile>$(OutDir)$(ProjectName).exe</OutputFile> | ||||||
|       <AdditionalLibraryDirectories>.\..\..\Libraries\lzma\C\Util\LzmaLib\Debug;.\..\..\Libraries\libexif-0.6.20\win32\Debug;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\opus\win32\VS2010\Win32\Debug;.\..\..\Libraries\openal-soft\build\Debug;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatDebug;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> |       <AdditionalLibraryDirectories>.\..\..\Libraries\lzma\C\Util\LzmaLib\Debug;.\..\..\Libraries\libexif-0.6.20\win32\Debug;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\opus\win32\VS2010\Win32\Debug;.\..\..\Libraries\openal-soft\build\Debug;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatDebug;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||||
|       <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;imageformats\qwebpd.lib;libeay32MTd.lib;ssleay32MTd.lib;Crypt32.lib;zlibstat.lib;LzmaLib.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies)</AdditionalDependencies> |       <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;Shlwapi.lib;Gdiplus.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;imageformats\qwebpd.lib;libeay32MTd.lib;ssleay32MTd.lib;Crypt32.lib;zlibstat.lib;LzmaLib.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> |       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||||
|       <ImageHasSafeExceptionHandlers /> |       <ImageHasSafeExceptionHandlers /> | ||||||
|       <IgnoreSpecificDefaultLibraries>LIBCMT</IgnoreSpecificDefaultLibraries> |       <IgnoreSpecificDefaultLibraries>LIBCMT</IgnoreSpecificDefaultLibraries> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 John Preston
						John Preston