-
Notifications
You must be signed in to change notification settings - Fork 0
/
Tweak.m
122 lines (95 loc) · 4.82 KB
/
Tweak.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <substrate.h>
#import <iMoMacros.h>
#include <substrate.h>
#import "TLLibrary.h"
#import "XMLReader.h"
static BOOL isTweakInstalled(NSString *tweakID) {
return [[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"/var/lib/dpkg/info/%@.list", tweakID]];
}
@interface NSString (private)
-(id)objectForKeyedSubscript:(id)arg1;
@end
@implementation NSString (private)
-(id)objectForKeyedSubscript:(id)arg1 {
return nil;
}
@end
@interface TLTweaksDatastore : NSObject <TLSearchDatastore> {
BOOL $usingInternet;
}
@end
@implementation TLTweaksDatastore
- (void)performQuery:(SDSearchQuery *)query withResultsPipe:(SDSearchQuery *)results {
NSString *searchString = [query searchString];
NSString *format = [NSString stringWithFormat:@"http://planet-iphones.com/cydia/feed/nameanddescription/%@", searchString];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:format]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:2];
TLRequireInternet(YES);
$usingInternet = YES;
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
if (data != nil) {
NSMutableArray *searchResults = [NSMutableArray array];
NSError *parseError = nil;
NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLData:data error:&parseError];
NSDictionary *mainRSSChannel = xmlDictionary[@"rss"][@"channel"];
id itemsObjects = mainRSSChannel[@"item"];
if ([itemsObjects isKindOfClass:[NSArray class]]) {
// int searchLimit = 0;
for (NSDictionary *package in (NSArray *)itemsObjects) {
NSDictionary *titleDict = package[@"title"];
NSString *titleString = [NSString stringWithFormat:@"%@",titleDict[@"text"]];
NSDictionary *descDict = package[@"description"];
NSString *descString = [NSString stringWithFormat:@"%@",descDict[@"text"]];
NSDictionary *linkDict = package[@"link"];
NSString *linkString = [NSString stringWithFormat:@"%@",linkDict[@"text"]];
NSString *packageID = [linkString lastPathComponent];
SPSearchResult *result = [[SPSearchResult alloc] init];
if (isTweakInstalled(packageID)) {
[result setSummary:@"Installed"];
}
[result setTitle:titleString];
[result setSubtitle:descString];
[result setUrl:linkString];
[searchResults addObject:result];
// searchLimit++;
}
} else if ([itemsObjects isKindOfClass:[NSDictionary class]]) {
NSDictionary *newDict = (NSDictionary *)itemsObjects;
NSDictionary *titleDict = newDict[@"title"];
NSString *titleString = [NSString stringWithFormat:@"%@",titleDict[@"text"]];
NSDictionary *descDict = newDict[@"description"];
NSString *descString = [NSString stringWithFormat:@"%@",descDict[@"text"]];
NSDictionary *linkDict = newDict[@"link"];
NSString *linkString = [NSString stringWithFormat:@"%@",linkDict[@"text"]];
NSString *packageID = [linkString lastPathComponent];
SPSearchResult *result = [[SPSearchResult alloc] init];
if (isTweakInstalled(packageID)) {
[result setSummary:@"Installed"];
}
[result setTitle:titleString];
[result setSubtitle:descString];
[result setUrl:linkString];
[searchResults addObject:result];
}
TLCommitResults(searchResults, TLDomain(@"com.saurik.Cydia", @"SpotTweaks"), results);
}
TLRequireInternet(NO);
$usingInternet = NO;
[results storeCompletedSearch:self];
TLFinishQuery(results);
}];
}
- (NSArray *)searchDomains {
return [NSArray arrayWithObject:[NSNumber numberWithInteger:TLDomain(@"com.saurik.Cydia", @"SpotTweaks")]];
}
- (NSString *)displayIdentifierForDomain:(NSInteger)domain {
return @"com.saurik.Cydia";
}
- (BOOL)blockDatastoreComplete {
return $usingInternet;
}
@end