git / moonbite-core / src/qt/macnotificationhandler.mm · raw

// Copyright (c) 2011-2020 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#include "macnotificationhandler.h"#undef slots#import <objc/runtime.h>#include <Cocoa/Cocoa.h>// Add an obj-c category (extension) to return the expected bundle identifier@implementation NSBundle(returnCorrectIdentifier)- (NSString *)__bundleIdentifier{    if (self == [NSBundle mainBundle]) {        return @"org.litecoin.Litecoin-Qt";    } else {        return [self __bundleIdentifier];    }}@endvoid MacNotificationHandler::showNotification(const QString &title, const QString &text){    // check if users OS has support for NSUserNotification    if(this->hasUserNotificationCenterSupport()) {        NSUserNotification* userNotification = [[NSUserNotification alloc] init];        userNotification.title = title.toNSString();        userNotification.informativeText = text.toNSString();        [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification: userNotification];        [userNotification release];    }}bool MacNotificationHandler::hasUserNotificationCenterSupport(void){    Class possibleClass = NSClassFromString(@"NSUserNotificationCenter");    // check if users OS has support for NSUserNotification    if(possibleClass!=nil) {        return true;    }    return false;}MacNotificationHandler *MacNotificationHandler::instance(){    static MacNotificationHandler *s_instance = nullptr;    if (!s_instance) {        s_instance = new MacNotificationHandler();        Class aPossibleClass = objc_getClass("NSBundle");        if (aPossibleClass) {            // change NSBundle -bundleIdentifier method to return a correct bundle identifier            // a bundle identifier is required to use OSXs User Notification Center            method_exchangeImplementations(class_getInstanceMethod(aPossibleClass, @selector(bundleIdentifier)),                                           class_getInstanceMethod(aPossibleClass, @selector(__bundleIdentifier)));        }    }    return s_instance;}