]> git.saurik.com Git - cydia.git/commitdiff
Add External Status API
authorRyan Petrich <rpetrich@gmail.com>
Sun, 26 Sep 2010 08:48:43 +0000 (02:48 -0600)
committerJay Freeman <saurik@Jay-Freemans-MacBook-Pro.local>
Mon, 4 Oct 2010 07:12:21 +0000 (00:12 -0700)
status stored in the com.saurik.Cydia.status register: 0 = clean, 1 = installing, 2 = installed and requires confirmation to respring/reboot/etc
com.saurik.Cydia.status is notify_post'ed when status changes

Cydia.mm

index 2a5b7158b4867b4eb830ea437988670d0ca24e15..4cb84eb02851cce6062d7711d28bc9e2cf03b504 100644 (file)
--- a/Cydia.mm
+++ b/Cydia.mm
@@ -116,6 +116,8 @@ extern "C" {
 
 #include <ext/hash_map>
 
+#include <notify.h>
+
 #import "UICaboodle/BrowserView.h"
 #import "UICaboodle/ResetView.h"
 
@@ -257,6 +259,15 @@ static _finline NSString *CydiaURL(NSString *path) {
     return [[NSString stringWithUTF8String:page] stringByAppendingString:path];
 }
 
+static _finline void UpdateExternalStatus(uint64_t newStatus) {
+    int notify_token;
+    if (notify_register_check("com.saurik.Cydia.status", &notify_token) == NOTIFY_STATUS_OK) {
+        notify_set_state(notify_token, newStatus);
+        notify_cancel(notify_token);
+    }
+    notify_post("com.saurik.Cydia.status");
+}
+
 /* [NSObject yieldToSelector:(withObject:)] {{{*/
 @interface NSObject (Cydia)
 - (id) yieldToSelector:(SEL)selector withObject:(id)object;
@@ -4377,6 +4388,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 - (void) closeButtonPushed {
     running_ = NO;
 
+    UpdateExternalStatus(0);
+
     switch (Finish_) {
         case 0:
             [self dismissModalViewControllerAnimated:YES];
@@ -4450,6 +4463,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 
     system("su -c /usr/bin/uicache mobile");
 
+    UpdateExternalStatus(Finish_ == 0 ? 2 : 0);
+
     [delegate_ setStatusBarShowsProgress:NO];
 }
 
@@ -4461,6 +4476,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 }
 
 - (void) detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)object title:(NSString *)title {
+    UpdateExternalStatus(1);
+
     if (title_ != nil)
         [title_ release];
     if (title == nil)