Ignore:
Timestamp:
Jul 25, 2012, 12:49:11 PM (9 years ago)
Author:
livings124
Message:

#4963 Support Notification Center on 10.8

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/macosx/Controller.m

    r13377 r13414  
    485485    fBadger = [[Badger alloc] initWithLib: fLib];
    486486   
     487    if ([NSApp isOnMountainLionOrBetter])
     488        [[NSUserNotificationCenterMtLion defaultUserNotificationCenter] setDelegate: self];
     489   
    487490    //observe notifications
    488491    NSNotificationCenter * nc = [NSNotificationCenter defaultCenter];
     
    555558    [[NSAppleEventManager sharedAppleEventManager] setEventHandler: self andSelector: @selector(handleOpenContentsEvent:replyEvent:)
    556559        forEventClass: kCoreEventClass andEventID: kAEOpenContents];
     560   
     561    //if we were opened from a user notification, do the corresponding action
     562    if ([NSApp isOnMountainLionOrBetter])
     563    {
     564        NSUserNotification * launchNotification = [[notification userInfo] objectForKey: NSApplicationLaunchUserNotificationKey];
     565        if (launchNotification)
     566            [self userNotificationCenter: nil didActivateNotification: launchNotification];
     567    }
    557568   
    558569    //auto importing
     
    18371848}
    18381849
     1850- (BOOL) userNotificationCenter: (NSUserNotificationCenter *) center shouldPresentNotification:(NSUserNotification *) notification
     1851{
     1852    return YES;
     1853}
     1854
     1855- (void) userNotificationCenter: (NSUserNotificationCenter *) center didActivateNotification: (NSUserNotification *) notification
     1856{
     1857    if (![notification userInfo])
     1858        return;
     1859   
     1860    if ([notification activationType] == NSUserNotificationActivationTypeActionButtonClicked) //reveal
     1861    {
     1862        Torrent * torrent = [self torrentForHash: [[notification userInfo] objectForKey: @"Hash"]];
     1863        NSString * location = [torrent dataLocation];
     1864        if (!location)
     1865            location = [[notification userInfo] objectForKey: @"Location"];
     1866        if (location)
     1867            [[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs: @[[NSURL fileURLWithPath: location]]];
     1868    }
     1869    else if ([notification activationType] == NSUserNotificationActivationTypeContentsClicked)
     1870    {
     1871        Torrent * torrent = [self torrentForHash: [[notification userInfo] objectForKey: @"Hash"]];
     1872        if (torrent)
     1873        {
     1874            //select in the table - first see if it's already shown
     1875            NSInteger row = [fTableView rowForItem: torrent];
     1876            if (row == -1)
     1877            {
     1878                //if it's not shown, see if it's in a collapsed row
     1879                if ([fDefaults boolForKey: @"SortByGroup"])
     1880                {
     1881                    __block TorrentGroup * parent = nil;
     1882                    [fDisplayedTorrents enumerateObjectsWithOptions: NSEnumerationConcurrent usingBlock: ^(TorrentGroup * group, NSUInteger idx, BOOL *stop) {
     1883                        if ([[group torrents] containsObject: torrent])
     1884                        {
     1885                            parent = group;
     1886                            *stop = YES;
     1887                        }
     1888                    }];
     1889                    if (parent)
     1890                    {
     1891                        [[fTableView animator] expandItem: parent];
     1892                        row = [fTableView rowForItem: torrent];
     1893                    }
     1894                }
     1895               
     1896                if (row == -1)
     1897                {
     1898                    //not found - must be filtering
     1899                    NSAssert([fDefaults boolForKey: @"FilterBar"], @"expected the filter to be enabled");
     1900                    [fFilterBar reset: YES];
     1901                   
     1902                    row = [fTableView rowForItem: torrent];
     1903                   
     1904                    //if it's not shown, it has to be in a collapsed row...again
     1905                    if ([fDefaults boolForKey: @"SortByGroup"])
     1906                    {
     1907                        __block TorrentGroup * parent = nil;
     1908                        [fDisplayedTorrents enumerateObjectsWithOptions: NSEnumerationConcurrent usingBlock: ^(TorrentGroup * group, NSUInteger idx, BOOL *stop) {
     1909                            if ([[group torrents] containsObject: torrent])
     1910                            {
     1911                                parent = group;
     1912                                *stop = YES;
     1913                            }
     1914                        }];
     1915                        if (parent)
     1916                        {
     1917                            [[fTableView animator] expandItem: parent];
     1918                            row = [fTableView rowForItem: torrent];
     1919                        }
     1920                    }
     1921                }
     1922            }
     1923           
     1924            NSAssert1(row != -1, @"expected a row to be found for torrent %@", torrent);
     1925            [fTableView selectRowIndexes: [NSIndexSet indexSetWithIndex: row] byExtendingSelection:NO];
     1926        }
     1927    }
     1928}
     1929
     1930- (Torrent *) torrentForHash: (NSString *) hash
     1931{
     1932    NSParameterAssert(hash != nil);
     1933   
     1934    __block Torrent * torrent = nil;
     1935    [fTorrents enumerateObjectsWithOptions: NSEnumerationConcurrent usingBlock: ^(id obj, NSUInteger idx, BOOL * stop) {
     1936        if ([[(Torrent *)obj hashString] isEqualToString: hash])
     1937        {
     1938            torrent = obj;
     1939            *stop = YES;
     1940        }
     1941    }];
     1942    return torrent;
     1943}
     1944
    18391945- (void) torrentFinishedDownloading: (NSNotification *) notification
    18401946{
     
    18541960        }
    18551961       
     1962        NSString * location = [torrent dataLocation];
     1963       
     1964        if ([NSApp isOnMountainLionOrBetter])
     1965        {
     1966            NSUserNotification * notification = [[NSUserNotificationMtLion alloc] init];
     1967            [notification setTitle: NSLocalizedString(@"Download Complete", "notification title")];
     1968            [notification setSubtitle: [torrent name]];
     1969           
     1970            [notification setHasActionButton: YES];
     1971            [notification setActionButtonTitle: NSLocalizedString(@"Reveal", "notification button")];
     1972           
     1973            NSMutableDictionary * userInfo = [NSMutableDictionary dictionaryWithObject: [torrent hashString] forKey: @"Hash"];
     1974            if (location)
     1975                [userInfo setObject: location forKey: @"Location"];
     1976            [notification setUserInfo: userInfo];
     1977           
     1978            [[NSUserNotificationCenterMtLion defaultUserNotificationCenter] deliverNotification: notification];
     1979            [notification release];
     1980        }
     1981       
    18561982        NSMutableDictionary * clickContext = [NSMutableDictionary dictionaryWithObject: GROWL_DOWNLOAD_COMPLETE forKey: @"Type"];
    18571983       
    1858         NSString * location = [torrent dataLocation];
    18591984        if (location)
    18601985            [clickContext setObject: location forKey: @"Location"];
     
    18952020    }
    18962021   
     2022    NSString * location = [torrent dataLocation];
     2023   
     2024    if ([NSApp isOnMountainLionOrBetter])
     2025    {
     2026        NSUserNotification * notification = [[NSUserNotificationMtLion alloc] init];
     2027        [notification setTitle: NSLocalizedString(@"Seeding Complete", "notification title")];
     2028        [notification setSubtitle: [torrent name]];
     2029       
     2030        [notification setHasActionButton: YES];
     2031        [notification setActionButtonTitle: NSLocalizedString(@"Reveal", "notification button")];
     2032       
     2033        NSMutableDictionary * userInfo = [NSMutableDictionary dictionaryWithObject: [torrent hashString] forKey: @"Hash"];
     2034        if (location)
     2035            [userInfo setObject: location forKey: @"Location"];
     2036        [notification setUserInfo: userInfo];
     2037       
     2038        [[NSUserNotificationCenterMtLion defaultUserNotificationCenter] deliverNotification: notification];
     2039        [notification release];
     2040    }
     2041   
    18972042    NSMutableDictionary * clickContext = [NSMutableDictionary dictionaryWithObject: GROWL_SEEDING_COMPLETE forKey: @"Type"];
    18982043   
    1899     NSString * location = [torrent dataLocation];
    19002044    if (location)
    19012045        [clickContext setObject: location forKey: @"Location"];
     
    28162960                [self openFiles: [NSArray arrayWithObject: fullFile] addType: ADD_AUTO forcePath: nil];
    28172961               
     2962                if ([NSApp isOnMountainLionOrBetter])
     2963                {
     2964                    NSUserNotification* notification = [[NSUserNotificationMtLion alloc] init];
     2965                    [notification setTitle: NSLocalizedString(@"Torrent File Auto Added", "notification title")];
     2966                    [notification setSubtitle: file];
     2967                   
     2968                    [notification setHasActionButton: NO];
     2969                   
     2970                    [[NSUserNotificationCenterMtLion defaultUserNotificationCenter] deliverNotification: notification];
     2971                    [notification release];
     2972                }
     2973               
    28182974                [GrowlApplicationBridge notifyWithTitle: NSLocalizedString(@"Torrent File Auto Added", "Growl notification title")
    28192975                    description: file notificationName: GROWL_AUTO_ADD iconData: nil priority: 0 isSticky: NO
     
    34033559    //disable filtering when hiding
    34043560    if (!show)
    3405     {
    3406         [[NSUserDefaults standardUserDefaults] setObject: FILTER_NONE forKey: @"Filter"];
    3407         [[NSUserDefaults standardUserDefaults] setInteger: GROUP_FILTER_ALL_TAG forKey: @"FilterGroup"];
    3408         [[NSUserDefaults standardUserDefaults] removeObjectForKey: @"FilterSearchString"];
    3409     }
     3561        [fFilterBar reset: NO];
    34103562   
    34113563    [self applyFilter]; //do even if showing to ensure tooltips are updated
     
    44954647- (void) growlNotificationWasClicked: (id) clickContext
    44964648{
    4497     if (!clickContext || ![clickContext isKindOfClass: [NSDictionary class]])
     4649    if (![clickContext isKindOfClass: [NSDictionary class]])
    44984650        return;
    44994651   
Note: See TracChangeset for help on using the changeset viewer.