#include <sys/sysctl.h>
#include <sys/param.h>
#include <sys/mount.h>
+#include <sys/reboot.h>
#include <fcntl.h>
#include <notify.h>
NSDictionary *package((NSDictionary *) value);
if (NSNumber *subscribed = [package objectForKey:@"IsSubscribed"])
- if ([subscribed boolValue])
+ if ([subscribed boolValue] && !metadata->subscribed_)
metadata->subscribed_ = true;
if (NSDate *date = [package objectForKey:@"FirstSeen"]) {
metadata->first_ = time;
}
- bool versioned(false);
+ NSDate *date([package objectForKey:@"LastSeen"]);
+ NSString *version([package objectForKey:@"LastVersion"]);
- if (NSDate *date = [package objectForKey:@"LastSeen"]) {
+ if (date != nil && version != nil) {
time_t time([date timeIntervalSince1970]);
- if (metadata->last_ < time || metadata->last_ == 0) {
- metadata->last_ = time;
- versioned = true;
- }
- } else if (metadata->last_ == 0) {
- metadata->last_ = metadata->first_;
- if (metadata->version_[0] == '\0')
- versioned = true;
- }
-
- if (versioned)
- if (NSString *version = [package objectForKey:@"LastVersion"])
+ if (metadata->last_ < time || metadata->last_ == 0)
if (CFStringGetCString((CFStringRef) version, buffer, sizeof(buffer), kCFStringEncodingUTF8)) {
size_t length(strlen(buffer));
uint16_t vhash(hashlittle(buffer, length));
strncpy(metadata->version_, latest, sizeof(metadata->version_));
metadata->vhash_ = vhash;
+
+ metadata->last_ = time;
}
+ }
}
// }}}
if (metadata->first_ == 0)
metadata->first_ = now_;
- if (metadata->last_ == 0)
- metadata->last_ = metadata->first_;
-
if (metadata->vhash_ != vhash || strncmp(metadata->version_, latest, sizeof(metadata->version_)) != 0) {
- if (metadata->version_[0] != '\0')
- metadata->last_ = now_;
strncpy(metadata->version_, latest, sizeof(metadata->version_));
metadata->vhash_ = vhash;
- }
+ metadata->last_ = now_;
+ } else if (metadata->last_ == 0)
+ metadata->last_ = metadata->first_;
_end
_profile(Package$initWithVersion$Section)
- (void) configure {
NSString *dpkg = [NSString stringWithFormat:@"dpkg --configure -a --status-fd %u", statusfd_];
+ _trace();
system([dpkg UTF8String]);
+ _trace();
}
- (bool) clean {
break;
case 2:
- system("launchctl stop com.apple.SpringBoard");
- break;
+ _trace();
+ goto reload;
case 3:
- system("launchctl unload "SpringBoard_"; launchctl load "SpringBoard_);
+ _trace();
+ goto reload;
+
+ reload:
+ system("/usr/bin/sbreload");
+ _trace();
break;
case 4:
+ _trace();
if (void (*SBReboot)(mach_port_t) = reinterpret_cast<void (*)(mach_port_t)>(dlsym(RTLD_DEFAULT, "SBReboot")))
SBReboot(SBSSpringBoardServerPort());
else
- system("reboot");
+ reboot2(RB_AUTOBOOT);
break;
}
}
case 4: [close_ setTitle:UCLocalize("REBOOT_DEVICE")]; break;
}
+ _trace();
system("su -c /usr/bin/uicache mobile");
+ _trace();
UpdateExternalStatus(Finish_ == 0 ? 2 : 0);
/* }}} */
/* Sections Controller {{{ */
-@interface SectionsController : CYViewController <
+@interface CYSectionsController : CYViewController <
UITableViewDataSource,
UITableViewDelegate
> {
@end
-@implementation SectionsController
+@implementation CYSectionsController
- (void) dealloc {
[list_ setDataSource:nil];
[super dealloc];
}
+- (void) setEditing:(BOOL)editing {
+ if ((editing_ = editing))
+ [list_ reloadData];
+ else
+ [delegate_ updateData];
+
+ [[self navigationItem] setTitle:editing_ ? UCLocalize("SECTION_VISIBILITY") : UCLocalize("SECTIONS")];
+ [[[self navigationItem] rightBarButtonItem] setTitle:[sections_ count] == 0 ? nil : editing_ ? UCLocalize("DONE") : UCLocalize("EDIT")];
+ [[[self navigationItem] rightBarButtonItem] setStyle:editing_ ? UIBarButtonItemStyleDone : UIBarButtonItemStylePlain];
+}
+
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[list_ deselectRowAtIndexPath:[list_ indexPathForSelectedRow] animated:animated];
}
+- (void) viewWillDisappear:(BOOL)animated {
+ [super viewWillDisappear:animated];
+ if (editing_) [self setEditing:NO];
+}
+
- (Section *) sectionAtIndexPath:(NSIndexPath *)indexPath {
Section *section = (editing_ ? [sections_ objectAtIndex:[indexPath row]] : ([indexPath row] == 0 ? nil : [filtered_ objectAtIndex:([indexPath row] - 1)]));
return section;
[self editButtonClicked];
}
-- (void) editButtonClicked {
- if ((editing_ = !editing_))
- [list_ reloadData];
- else
- [delegate_ updateData];
-
- [[self navigationItem] setTitle:editing_ ? UCLocalize("SECTION_VISIBILITY") : UCLocalize("SECTIONS")];
- [[[self navigationItem] rightBarButtonItem] setTitle:[sections_ count] == 0 ? nil : editing_ ? UCLocalize("DONE") : UCLocalize("EDIT")];
- [[[self navigationItem] rightBarButtonItem] setStyle:editing_ ? UIBarButtonItemStyleDone : UIBarButtonItemStylePlain];
+- (void)editButtonClicked {
+ [self setEditing:!editing_];
}
- (UIView *) accessoryView {
unsigned locked_;
unsigned activity_;
- SectionsController *sections_;
+ CYSectionsController *sections_;
ChangesController *changes_;
ManageController *manage_;
SearchController *search_;
- (void) _updateData {
[self _saveConfig];
- /* XXX: this is just stupid */
- if (tag_ != 1 && sections_ != nil)
- [sections_ reloadData];
- if (tag_ != 2 && changes_ != nil)
- [changes_ reloadData];
- if (tag_ != 4 && search_ != nil)
- [search_ reloadData];
+ NSMutableSet *tabs([[[NSMutableSet alloc] initWithCapacity:10] autorelease]);
+
+ [tabs addObject:[tabbar_ selectedViewController]];
+
+ if (sections_ != nil)
+ [tabs addObject:sections_];
+ if (changes_ != nil)
+ [tabs addObject:changes_];
+ if (manage_ != nil)
+ [tabs addObject:manage_];
+ if (search_ != nil)
+ [tabs addObject:search_];
+ if (sources_ != nil)
+ [tabs addObject:sources_];
+ if (installed_ != nil)
+ [tabs addObject:installed_];
- [(CYNavigationController *)[tabbar_ selectedViewController] reloadData];
+ for (CYNavigationController *tab in tabs)
+ [tab reloadData];
[queueDelegate_ queueStatusDidChange];
[[[self queueBadgeController] tabBarItem] setBadgeValue:(Queuing_ ? UCLocalize("Q_D") : nil)];
return browser;
}
-- (SectionsController *) sectionsController {
+- (CYSectionsController *) sectionsController {
if (sections_ == nil)
- sections_ = [[SectionsController alloc] initWithDatabase:database_];
+ sections_ = [[CYSectionsController alloc] initWithDatabase:database_];
return sections_;
}
}
- (void) system:(NSString *)command { _pooled
+ _trace();
system([command UTF8String]);
+ _trace();
}
- (void) applicationWillSuspend {