Mirror von
https://github.com/Gh0stByte/Movie-Box-Updater
synchronisiert 2025-07-05 22:06:47 +00:00
130 Zeilen
4.4 KiB
Plaintext
130 Zeilen
4.4 KiB
Plaintext
/* Imports */
|
|
#import <CoreData/CoreData.h>
|
|
#import <UIKit/UIKit.h>
|
|
#include <substrate.h>
|
|
|
|
|
|
/* Definitions (Macros) */
|
|
#define Bundle_Path @"/Library/MobileSubstrate/DynamicLibraries/MovieBoxBundle.bundle"
|
|
#define Queued_Update @"Update has been queued and will commence soon."
|
|
#define AlertTitle @"Movie Box Updater"
|
|
#define AlertDownload @"Download Working"
|
|
#define AlertDismiss @"Dismiss"
|
|
#define AlertOK @"OK"
|
|
|
|
#define UpdateCheck_URL @"http://gh0stbyte.ga/iOS/moviebox.json"
|
|
#define UpdateCheck_Local @"3.6.4"
|
|
#define UpdateCheck_Alert @"There is an update available for this tweak."
|
|
|
|
|
|
/* Fake interface to allow calling of the update function, along with new sharedInstance */
|
|
@interface UpdatesManager : NSObject
|
|
/* Fool the compiler into thinking that we have the method */
|
|
- (void)requestUpdatedDataBaseWithFileURL:(NSString*)url;
|
|
/* Create sharedInstance method */
|
|
+ (id)sharedInstance;
|
|
@end
|
|
|
|
/* Variables */
|
|
static UIView *header;
|
|
static UpdatesManager *sharedInstance = nil;
|
|
NSString *updateURL;
|
|
|
|
|
|
%hook MenuViewController
|
|
|
|
/* When it sets up the headerView */
|
|
-(UIView*)headerView {
|
|
/* set the headerview to itself */
|
|
header = %orig;
|
|
/* Give it a second to create the header before adding to it */
|
|
[NSTimer scheduledTimerWithTimeInterval:1.0
|
|
target:self
|
|
selector:@selector(setupButton)
|
|
userInfo:nil
|
|
repeats:NO];
|
|
/* return the header variable which is itself */
|
|
return header;
|
|
}
|
|
|
|
%new
|
|
/* New function called 1 second after headerView called allowing time for it to be created */
|
|
-(void)setupButton {
|
|
|
|
// Update Available Check
|
|
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:UpdateCheck_URL]];
|
|
[NSURLConnection sendAsynchronousRequest:request
|
|
queue:[NSOperationQueue mainQueue]
|
|
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
|
|
NSDictionary *myjson = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
|
|
updateURL = @"http://sbfunapi.cc/data/data_en.zip";
|
|
NSString *current_version = [myjson objectForKey:@"current_version"];
|
|
|
|
if(![current_version isEqualToString:UpdateCheck_Local]) {
|
|
UIAlertView *a = [[UIAlertView alloc] initWithTitle:AlertTitle message:UpdateCheck_Alert delegate:self cancelButtonTitle:AlertOK otherButtonTitles:@"Update", nil];
|
|
[a show];
|
|
[a release];
|
|
}
|
|
|
|
}];
|
|
|
|
|
|
CGFloat height = CGRectGetHeight(header.bounds);
|
|
CGFloat width = CGRectGetWidth(header.bounds);
|
|
|
|
// Create a new button that will trigger database updates.
|
|
UIButton *updateButton = [[UIButton alloc] initWithFrame:CGRectMake((width - 63), ((height/2) +3.333333), 20.0, 20.0)];
|
|
// When button pressed, updateDB function will be called
|
|
[updateButton addTarget:self
|
|
action:@selector(updateDB)
|
|
forControlEvents:UIControlEventTouchUpInside];
|
|
// Set the image of the button
|
|
[updateButton setImage:[UIImage imageWithContentsOfFile:[[[NSBundle alloc] initWithPath:Bundle_Path] pathForResource:@"refresh" ofType:@"png"]] forState:UIControlStateNormal];
|
|
// Add button to the header UIView (header)
|
|
[header addSubview:updateButton];
|
|
}
|
|
|
|
%new
|
|
/* Function to update the Database */
|
|
-(void)updateDB {
|
|
/* Let the user know that the update has been queued. Good for older phones that take a while to actually show the update process, and prevent the user
|
|
from spamming the update button. */
|
|
UIAlertView *a = [[UIAlertView alloc] initWithTitle:AlertTitle message:Queued_Update delegate:nil cancelButtonTitle:AlertOK otherButtonTitles:nil];
|
|
[a show];
|
|
[a release];
|
|
/* Use the sharedInstance function (returns the current instance) to call the requestUpdateBlah function with our updateURL grabbed from the server */
|
|
[[%c(UpdatesManager) sharedInstance] requestUpdatedDataBaseWithFileURL:updateURL];
|
|
}
|
|
|
|
%new
|
|
// When the user presses a button
|
|
- (void)alertView :(UIAlertView*)alertView clickedButtonAtIndex: (NSInteger)buttonIndex {
|
|
|
|
if([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString: @"Update"]) {
|
|
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://cydia.dtathemes.com/"]];
|
|
}
|
|
|
|
}
|
|
|
|
%end
|
|
|
|
%hook UpdatesManager
|
|
/* When an UpdatesManager instance is created */
|
|
- (id)init
|
|
{
|
|
/* we set our sharedInstance to be the current instance of the UpdatesManager */
|
|
sharedInstance = %orig;
|
|
/* Then we return the sharedInstance which is itself */
|
|
return sharedInstance;
|
|
}
|
|
|
|
/* Create new sharedInstance */
|
|
%new
|
|
+ (id)sharedInstance
|
|
{
|
|
/* It returns the current instance of the UpdatesManger */
|
|
return sharedInstance;
|
|
}
|
|
|
|
%end
|