-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathQSUnreadMailSource.m
More file actions
93 lines (84 loc) · 2.74 KB
/
QSUnreadMailSource.m
File metadata and controls
93 lines (84 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//
// QSUnreadMailSource.m
// AppleMailElement
//
// Created by Rob McBroom on 2012/05/17.
//
#import "QSUnreadMailSource.h"
#import "Mail.h"
@implementation QSUnreadMailSource
- (id)init
{
self = [super init];
if (self) {
Mail = [SBApplication applicationWithBundleIdentifier:@"com.apple.mail"];
}
return self;
}
- (BOOL)indexIsValidFromDate:(NSDate *)indexDate forEntry:(NSDictionary *)theEntry
{
// rescan only if the indexDate is prior to the last launch
NSDate *launched = [[NSRunningApplication currentApplication] launchDate];
if (launched) {
return ([launched compare:indexDate] == NSOrderedAscending);
} else {
// Quicksilver wasn't launched by LaunchServices - date unknown - rescan to be safe
return NO;
}
}
- (NSArray *)objectsForEntry:(NSDictionary *)theEntry
{
if ([Mail isRunning]) {
QSObject *unreadMailParent = [QSObject objectWithName:@"Unread Messages"];
[unreadMailParent setIdentifier:@"QSUnreadMailParent"];
[unreadMailParent setPrimaryType:@"QSUnreadMailParent"];
return [NSArray arrayWithObject:unreadMailParent];
}
return nil;
}
- (BOOL)objectHasChildren:(QSObject *)object
{
if ([Mail isRunning]) {
return ([[Mail inbox] unreadCount] > 0);
}
return NO;
}
- (BOOL)loadChildrenForObject:(QSObject *)object
{
MailMailbox *inbox = [Mail inbox];
if ([inbox unreadCount] == 0) {
return NO;
}
QSObject *child;
NSMutableArray *qsmessages = [NSMutableArray arrayWithCapacity:[inbox unreadCount]];
NSPredicate *unread = [NSPredicate predicateWithFormat:@"readStatus == 0"];
NSArray *messages = [[[inbox messages] get] filteredArrayUsingPredicate:unread];
NSString *accountPath, *searchFilter;
NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
NSArray *messagePaths;
for (MailMessage *msg in messages) {
child = [QSObject objectWithName:[msg subject]];
[child setIdentifier:[msg messageId]];
[child setDetails:[msg sender]];
[child setParentID:[object identifier]];
[child setObject:msg forType:@"qs.mail.message"];
[child setPrimaryType:@"qs.mail.message"];
[child setObject:[[msg mailbox] name] forMeta:@"mailboxName"];
accountPath = [[[[msg mailbox] account] accountDirectory] path];
searchFilter = [NSString stringWithFormat:@"kMDItemSubject == '%@'", [msg subject]];
messagePaths = [query resultsForSearchString:searchFilter inFolders:[NSSet setWithObject:accountPath]];
if ([messagePaths count]) {
[child setObject:[[messagePaths objectAtIndex:0] valueForAttribute:@"kMDItemPath"] forType:QSFilePathType];
}
[qsmessages addObject:child];
}
[object setChildren:qsmessages];
return YES;
}
- (void)setQuickIconForObject:(QSObject *)object
{
if ([[object primaryType] isEqualToString:@"QSUnreadMailParent"]) {
[object setIcon:[QSResourceManager imageNamed:@"com.apple.mail"]];
}
}
@end