-
Notifications
You must be signed in to change notification settings - Fork 17
/
MVScreenshotsListener.m
executable file
·96 lines (82 loc) · 3.18 KB
/
MVScreenshotsListener.m
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
94
95
96
//
// MVDirectoryListener.m
// FileShuttle
//
// Created by Michaël on 26/04/11.
//
#import "MVScreenshotsListener.h"
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
@interface MVScreenshotsListener () <NSMetadataQueryDelegate>
@property (retain) NSDate *date;
@property (retain) NSMetadataQuery *query;
@end
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
@implementation MVScreenshotsListener
@synthesize listening,
query,
date,
delegate;
///////////////////////////////////////////////////////////////////////////////////////////////////
- (id)init
{
self = [super init];
if (self) {
date = [[NSDate alloc] init];
query = [[NSMetadataQuery alloc] init];
[query setDelegate:self];
[query setPredicate:[NSPredicate predicateWithFormat:@"kMDItemIsScreenCapture = 1"]];
[query startQuery];
}
return self;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)dealloc
{
[date release];
[query release];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)setListening:(BOOL)isListening {
if(listening == isListening)
return;
listening = isListening;
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
if(listening) {
self.date = [NSDate date];
[nc addObserver:self selector:@selector(queryUpdated:)
name:NSMetadataQueryDidStartGatheringNotification object:query];
[nc addObserver:self selector:@selector(queryUpdated:)
name:NSMetadataQueryDidUpdateNotification object:query];
[nc addObserver:self selector:@selector(queryUpdated:)
name:NSMetadataQueryDidFinishGatheringNotification object:query];
}
else {
[nc removeObserver:self];
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)queryUpdated:(NSNotification *)note {
NSDate *newDate = nil;
for (NSMetadataItem *result in self.query.results) {
NSURL *fileURL = [NSURL fileURLWithPath:[result valueForAttribute:NSMetadataItemPathKey]];
if(!fileURL)
continue;
NSDate *creationDate = [result valueForAttribute:NSMetadataItemFSCreationDateKey];
if(creationDate != nil && [self.date compare:creationDate] == NSOrderedAscending) {
if(newDate == nil || ([newDate compare:creationDate] == NSOrderedAscending)) {
newDate = creationDate;
}
if([delegate respondsToSelector:@selector(directoryListener:newFile:)])
[delegate directoryListener:self newFile:fileURL];
}
}
if(newDate)
self.date = newDate;
}
@end