]> git.saurik.com Git - cydia.git/commitdiff
Backup reachability events.
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 23 Mar 2011 01:50:50 +0000 (18:50 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Wed, 23 Mar 2011 01:50:50 +0000 (18:50 -0700)
MobileCydia.mm

index 1fd292d36e539370a87b0a78dadc56abcba01b6d..e2c4b255d7e5bb6cc41ee3bb8ed07c729d32015d 100644 (file)
@@ -6557,19 +6557,41 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 
 /* Home Controller {{{ */
 @interface HomeController : CydiaWebViewController {
+    CFRunLoopRef runloop_;
+    SCNetworkReachabilityRef reachability_;
 }
 
 @end
 
 @implementation HomeController
 
+static void HomeControllerReachabilityCallback(SCNetworkReachabilityRef reachability, SCNetworkReachabilityFlags flags, void *info) {
+    [(HomeController *) info dispatchEvent:@"CydiaReachabilityCallback"];
+}
+
 - (id) init {
     if ((self = [super init]) != nil) {
         [self setURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/#!/home/", UI_]]];
         [self reloadData];
+
+        reachability_ = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, "cydia.saurik.com");
+        if (reachability_ != NULL) {
+            SCNetworkReachabilityContext context = {0, self, NULL, NULL, NULL};
+            SCNetworkReachabilitySetCallback(reachability_, HomeControllerReachabilityCallback, &context);
+
+            CFRunLoopRef runloop(CFRunLoopGetCurrent());
+            if (SCNetworkReachabilityScheduleWithRunLoop(reachability_, runloop, kCFRunLoopDefaultMode))
+                runloop_ = runloop;
+        }
     } return self;
 }
 
+- (void) dealloc {
+    if (reachability_ != NULL && runloop_ != NULL)
+        SCNetworkReachabilityUnscheduleFromRunLoop(reachability_, runloop_, kCFRunLoopDefaultMode);
+    [super dealloc];
+}
+
 - (NSURL *) navigationURL {
     return [NSURL URLWithString:@"cydia://home"];
 }