From 7003bad96e67a3600d3228d2c2261d3365e462bb Mon Sep 17 00:00:00 2001 From: Micah Gomez Date: Sun, 18 Aug 2019 20:19:25 -0600 Subject: [PATCH] comit for code for latest version that I completely forgot about --- .DS_Store | Bin 0 -> 8196 bytes FlashBack.xcodeproj/project.pbxproj | 4 + .../UserInterfaceState.xcuserstate | Bin 0 -> 72345 bytes FlashBack/.DS_Store | Bin 0 -> 8196 bytes FlashBack/Base.lproj/Main.storyboard | 175 +++-- FlashBack/ViewController.m | 622 ++++++++++-------- 6 files changed, 423 insertions(+), 378 deletions(-) create mode 100644 .DS_Store create mode 100644 FlashBack.xcodeproj/project.xcworkspace/xcuserdata/micahgomez.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 FlashBack/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..540731ecc9d80997a2bcb420cfba15dea791fecd GIT binary patch literal 8196 zcmeHM%We}%6ulJ!w9O-(7YS&PEG#4>B9xE_DGP)#8D`8Z5@-Vs0ZczCPKS1v)!m5+ zA%nkwH8X#J#DXQO(Xc?`4@Q~|Kfr<&Te$Tw*s&7@jbIQ|Nmb`|*FANsPr15sI{-lP zE8YaaC;%8(Ihy;h=~8$pCBa0il;s9UXoR-jV>p1YeWZ$H(R zzf-8H>$ngw*9n*-e1VK0o_H^c7%&AFG2gc#h9$@&x^TA(G&bRc= z-;8l>3JI+i!bOG=S8*+7YuqiqMxz+9gI}7rqsR^`G{1H$upJuAhIy7Gtjaz4X!sy= z5#=L^NLI~u{jicf_f|@t&CNB96VfmtD-D2buJpIC4U-i4Q>0Sa+;6JafRk_@E`fzV z-#R>kKjA4nhnMg#yn%P5mmDI;$VoCq&XRNFS8|zLAw@DzZjc4Z?`baoQ8k_d;-S%H zeOIk03|LsfUd|ls+&pj!?%^h4;Nb?WL4?+F`-Xxi$ZXwEI~*mbOjs_f){u?SSNWN_ zLuQrD%&6^Yyj*^G=4tTa{O7Q}|G=&-wa)q(pZgAHy-DkXU9>Ku#xZ`d?DCQ$M$0Q} zTW;%?HoFA53I*6A5MRo+K>YD^(F%Nd1$N00qdfordF${0Uw$Gwf>uB)@V_ZQdS|Se zJce)nC9`=ZJlD=(y@Qn(?$?kgDAh#&u9h;{~DIVY#EArbFj`T8FM+7gwm Uj%A+Yv>nU({1?lmo9{${4_X|QdH?_b literal 0 HcmV?d00001 diff --git a/FlashBack.xcodeproj/project.pbxproj b/FlashBack.xcodeproj/project.pbxproj index 63bbda6..4f78119 100644 --- a/FlashBack.xcodeproj/project.pbxproj +++ b/FlashBack.xcodeproj/project.pbxproj @@ -444,6 +444,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = PRBH2T6668; FRAMEWORK_SEARCH_PATHS = ( @@ -458,6 +459,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.mpg13.FlashBack; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -467,6 +469,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = PRBH2T6668; FRAMEWORK_SEARCH_PATHS = ( @@ -481,6 +484,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.mpg13.FlashBack; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; diff --git a/FlashBack.xcodeproj/project.xcworkspace/xcuserdata/micahgomez.xcuserdatad/UserInterfaceState.xcuserstate b/FlashBack.xcodeproj/project.xcworkspace/xcuserdata/micahgomez.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e7da8a6cd8974f642d9a9cc3370c9d67fe32dc6c GIT binary patch literal 72345 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 bVs1l~F;y+cN@4}g{1A{dn87gcR~h&L*?=%( literal 0 HcmV?d00001 diff --git a/FlashBack/Base.lproj/Main.storyboard b/FlashBack/Base.lproj/Main.storyboard index 9060dd4..ed58ee0 100644 --- a/FlashBack/Base.lproj/Main.storyboard +++ b/FlashBack/Base.lproj/Main.storyboard @@ -1,11 +1,9 @@ - - - - + + - + @@ -26,11 +24,42 @@ + + + + + + + + - - + + @@ -43,11 +72,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FlashBack/ViewController.m b/FlashBack/ViewController.m index 6c61f17..300fd73 100644 --- a/FlashBack/ViewController.m +++ b/FlashBack/ViewController.m @@ -16,126 +16,111 @@ @end +BOOL trial; NSArray *_backupFolderArray; NSString *_backupDirectory; NSMutableString *selectedBackupImageURL; NSMutableString *selectedBackupURL; NSString *backupNameSelected; -int itFuckingCounts = 0; -//CFArrayRef CPBitmapCreateImagesFromData(CFDataRef cpbitmap, void*, int, void*); @implementation ViewController - -- (IBAction)secretButton:(id)sender { - - itFuckingCounts++; - - if (itFuckingCounts==13) { - - UIAlertController * secretButtonAlert= [UIAlertController - alertControllerWithTitle:@"Secret found!" - message:@"Thanks for supporting FlashBack, and congratulations on finding the secret button!" - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction - actionWithTitle:@":)" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) - { - NSURL *myPicURL = [NSURL fileURLWithPath:@"/Library/FlashBack/.mg.png"]; - NSLog(@"%@", myPicURL); - NSData *myPicData = [NSData dataWithContentsOfURL:myPicURL]; - selectedBackupImage.image = [UIImage imageWithData:myPicData]; - - [secretButtonAlert dismissViewControllerAnimated:YES completion:nil]; - - }]; - [secretButtonAlert addAction:ok]; - - [self presentViewController:secretButtonAlert animated:YES completion:nil]; - - } -} - - - - (IBAction)createBackup:(id)sender { - UIAlertController *createBackupAlert = [UIAlertController alertControllerWithTitle:@"Enter the Backup Name" message:@"Please do not use special symbols. Use only letters and numbers, no spaces." preferredStyle:UIAlertControllerStyleAlert]; - [createBackupAlert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { - textField.placeholder = @"Backup Name"; - textField.secureTextEntry = NO; - }]; - UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - NSLog(@"Backup name is :%@", [[createBackupAlert textFields][0] text]); - NSString *newBackupName=[[createBackupAlert textFields][0] text]; + if(([_backupFolderArray count] >= 1) && (trial == YES)){ - if([[[createBackupAlert textFields][0] text] isEqual:@""]){ - NSLog(@"empty backup name!"); - } - else{ - NSLog(@"Backup name is good!"); - - NSLog(@"Running NSTask"); - - NSTask *createTask = [[NSTask alloc] init]; - [createTask setLaunchPath:@"/bin/bash"]; - [createTask setArguments:@[ @"FBCreate", newBackupName]]; - [createTask launch]; - [createTask waitUntilExit]; - - UIAlertController * finishedCreateAlert= [UIAlertController - alertControllerWithTitle:@"Backup Creation Completed" - message:@"The backup has been successfully created" - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction - actionWithTitle:@"OK" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) - { - - _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/Library/FlashBack/Backups/" error:nil]; - [self->selectedBackupPickerView reloadAllComponents]; - - [finishedCreateAlert dismissViewControllerAnimated:YES completion:nil]; - - }]; - [finishedCreateAlert addAction:ok]; - - [self presentViewController:finishedCreateAlert animated:YES completion:nil]; - - /*pid_t pid; - int status; - const char* args[] = {"killall", "backboardd", NULL, NULL}; - posix_spawn(&pid, "/bin/bash", NULL, NULL, (char* const*)args, NULL); - waitpid(pid, &status, WEXITED);*/ - - } + UIAlertController * noMoreBackupsAlert = [UIAlertController + alertControllerWithTitle:@"Maximum Backups Reached" + message:@"The free trial of FlashBack only allows one saved setup. Purchase the full version on PackIX for $1.50 to make more!" + preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction* ok = [UIAlertAction + actionWithTitle:@"ok" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + [noMoreBackupsAlert dismissViewControllerAnimated:YES completion:nil]; + + }]; - }]; - [createBackupAlert addAction:confirmAction]; - UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { - NSLog(@"Canelled"); - }]; - [createBackupAlert addAction:cancelAction]; - [self presentViewController:createBackupAlert animated:YES completion:nil]; - + [noMoreBackupsAlert addAction:ok]; + [self presentViewController:noMoreBackupsAlert animated:YES completion:nil]; + + } + else{ + + UIAlertController *createBackupAlert = [UIAlertController alertControllerWithTitle:@"Enter the Backup Name" message:@"Please do not use special symbols. Use only letters and numbers, no spaces. If you have issues with the wallpaper not being properly applied after restoring to a backup, install autowall from\n https://jb365.github.io/" preferredStyle:UIAlertControllerStyleAlert]; + [createBackupAlert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { + textField.placeholder = @"Backup Name"; + textField.secureTextEntry = NO; + }]; + UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + NSLog(@"Backup name is :%@", [[createBackupAlert textFields][0] text]); + NSString *newBackupName=[[createBackupAlert textFields][0] text]; + + if([[[createBackupAlert textFields][0] text] isEqual:@""]){ + NSLog(@"empty backup name!"); + } + else{ + NSLog(@"Backup name is good!"); + + NSLog(@"Running NSTask"); + + NSTask *createTask = [[NSTask alloc] init]; + [createTask setLaunchPath:@"/bin/bash"]; + [createTask setArguments:@[ @"FBCreate", newBackupName]]; + [createTask launch]; + [createTask waitUntilExit]; + + UIAlertController * finishedCreateAlert= [UIAlertController + alertControllerWithTitle:@"Backup Creation Completed" + message:@"The backup has been successfully created" + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction + actionWithTitle:@"OK" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + + _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/Library/FlashBack/Backups/" error:nil]; + [self->selectedBackupPickerView reloadAllComponents]; + + [finishedCreateAlert dismissViewControllerAnimated:YES completion:nil]; + + }]; + [finishedCreateAlert addAction:ok]; + + [self presentViewController:finishedCreateAlert animated:YES completion:nil]; + + /*pid_t pid; + int status; + const char* args[] = {"killall", "backboardd", NULL, NULL}; + posix_spawn(&pid, "/bin/bash", NULL, NULL, (char* const*)args, NULL); + waitpid(pid, &status, WEXITED);*/ + + } + + + }]; + [createBackupAlert addAction:confirmAction]; + UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + NSLog(@"Canelled"); + }]; + [createBackupAlert addAction:cancelAction]; + [self presentViewController:createBackupAlert animated:YES completion:nil]; + } } - - - (IBAction)restoreBackup:(id)sender { if (backupNameSelected == nil){ UIAlertController * selectBackupAlert= [UIAlertController - alertControllerWithTitle:@"Select a Backup!" - message:@"Scroll through the list then let it settle on an item to select the backup." - preferredStyle:UIAlertControllerStyleAlert]; + alertControllerWithTitle:@"Select a Backup!" + message:@"Scroll through the list then let it settle on an item to select the backup." + preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* ok = [UIAlertAction actionWithTitle:@"ok" @@ -152,47 +137,47 @@ int itFuckingCounts = 0; } else{ - - UIAlertController * restoreBackupAlert= [UIAlertController - alertControllerWithTitle:@"Restore Backup" - message:@"Your device will revert to the selected backup! Please wait for your device to respring." - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction - actionWithTitle:@"OK" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) - { - - //RUN RESTORE SCRIPT - - NSTask *restoreTask = [[NSTask alloc] init]; - [restoreTask setLaunchPath:@"/bin/bash"]; - [restoreTask setArguments:@[ @"FBRestore", backupNameSelected]]; - [restoreTask launch]; - - UIAlertController * finishedRestoreAlert= [UIAlertController - alertControllerWithTitle:@"Restoring from backup" - message:@"Your device will respring when the process is completed." - preferredStyle:UIAlertControllerStyleAlert]; - [self presentViewController:finishedRestoreAlert animated:YES completion:nil]; - - [restoreBackupAlert dismissViewControllerAnimated:YES completion:nil]; - - }]; - UIAlertAction* cancel = [UIAlertAction - actionWithTitle:@"Cancel" + + UIAlertController * restoreBackupAlert= [UIAlertController + alertControllerWithTitle:@"Restore Backup" + message:@"Your device will revert to the selected backup! Please wait for your device to respring." + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction + actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { + + //RUN RESTORE SCRIPT + + NSTask *restoreTask = [[NSTask alloc] init]; + [restoreTask setLaunchPath:@"/bin/bash"]; + [restoreTask setArguments:@[ @"FBRestore", backupNameSelected]]; + [restoreTask launch]; + + UIAlertController * finishedRestoreAlert= [UIAlertController + alertControllerWithTitle:@"Restoring from backup" + message:@"Your device will respring when the process is completed." + preferredStyle:UIAlertControllerStyleAlert]; + [self presentViewController:finishedRestoreAlert animated:YES completion:nil]; + [restoreBackupAlert dismissViewControllerAnimated:YES completion:nil]; }]; - - [restoreBackupAlert addAction:cancel]; - [restoreBackupAlert addAction:ok]; - - [self presentViewController:restoreBackupAlert animated:YES completion:nil]; + UIAlertAction* cancel = [UIAlertAction + actionWithTitle:@"Cancel" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + [restoreBackupAlert dismissViewControllerAnimated:YES completion:nil]; + + }]; + + [restoreBackupAlert addAction:cancel]; + [restoreBackupAlert addAction:ok]; + + [self presentViewController:restoreBackupAlert animated:YES completion:nil]; } } @@ -220,143 +205,167 @@ int itFuckingCounts = 0; } else{ - - UIAlertController * updateBackupAlert= [UIAlertController - alertControllerWithTitle:@"Update Backup" - message:@"The selected backup will be overwritten! Please wait until the completion pop-up appears" - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction - actionWithTitle:@"OK" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) - { - - - [updateBackupAlert dismissViewControllerAnimated:YES completion:nil]; - - NSTask *deleteTask = [[NSTask alloc] init]; - [deleteTask setLaunchPath:@"/bin/bash"]; - [deleteTask setArguments:@[ @"FBDelete", backupNameSelected]]; - [deleteTask launch]; - [deleteTask waitUntilExit]; - - NSTask *createTask = [[NSTask alloc] init]; - [createTask setLaunchPath:@"/bin/bash"]; - [createTask setArguments:@[ @"FBCreate", backupNameSelected]]; - [createTask launch]; - [createTask waitUntilExit]; - - UIAlertController * finishedUpdateAlert= [UIAlertController - alertControllerWithTitle:@"Backup Update Completed" - message:@"The backup has been successfully updated" - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction - actionWithTitle:@"OK" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) - { - - _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/Library/FlashBack/Backups/" error:nil]; - [self->selectedBackupPickerView reloadAllComponents]; - - [finishedUpdateAlert dismissViewControllerAnimated:YES completion:nil]; - - }]; - [finishedUpdateAlert addAction:ok]; - - [self presentViewController:finishedUpdateAlert animated:YES completion:nil]; - - - }]; - UIAlertAction* cancel = [UIAlertAction - actionWithTitle:@"Cancel" + + UIAlertController * updateBackupAlert= [UIAlertController + alertControllerWithTitle:@"Update Backup" + message:@"The selected backup will be overwritten! Please wait until the completion pop-up appears" + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction + actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { + + [updateBackupAlert dismissViewControllerAnimated:YES completion:nil]; + NSTask *deleteTask = [[NSTask alloc] init]; + [deleteTask setLaunchPath:@"/bin/bash"]; + [deleteTask setArguments:@[ @"FBDelete", backupNameSelected]]; + [deleteTask launch]; + [deleteTask waitUntilExit]; + + NSTask *createTask = [[NSTask alloc] init]; + [createTask setLaunchPath:@"/bin/bash"]; + [createTask setArguments:@[ @"FBCreate", backupNameSelected]]; + [createTask launch]; + [createTask waitUntilExit]; + + UIAlertController * finishedUpdateAlert= [UIAlertController + alertControllerWithTitle:@"Backup Update Completed" + message:@"The backup has been successfully updated" + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction + actionWithTitle:@"OK" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + + _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/Library/FlashBack/Backups/" error:nil]; + [self->selectedBackupPickerView reloadAllComponents]; + + [finishedUpdateAlert dismissViewControllerAnimated:YES completion:nil]; + + }]; + [finishedUpdateAlert addAction:ok]; + + [self presentViewController:finishedUpdateAlert animated:YES completion:nil]; + + }]; - - [updateBackupAlert addAction:cancel]; - [updateBackupAlert addAction:ok]; - - [self presentViewController:updateBackupAlert animated:YES completion:nil]; + UIAlertAction* cancel = [UIAlertAction + actionWithTitle:@"Cancel" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + [updateBackupAlert dismissViewControllerAnimated:YES completion:nil]; + + }]; + + [updateBackupAlert addAction:cancel]; + [updateBackupAlert addAction:ok]; + + [self presentViewController:updateBackupAlert animated:YES completion:nil]; } } - - (IBAction)packageBackup:(id)sender { - if (backupNameSelected == nil){ + if (trial == NO){ - UIAlertController * selectBackupAlert= [UIAlertController - alertControllerWithTitle:@"Select a Backup!" - message:@"Scroll through the list then let it settle on an item to select the backup." - preferredStyle:UIAlertControllerStyleAlert]; + if (backupNameSelected == nil){ + + UIAlertController * selectBackupAlert= [UIAlertController + alertControllerWithTitle:@"Select a Backup!" + message:@"Scroll through the list then let it settle on an item to select the backup." + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction + actionWithTitle:@"ok" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + [selectBackupAlert dismissViewControllerAnimated:YES completion:nil]; + + }]; + + [selectBackupAlert addAction:ok]; + + [self presentViewController:selectBackupAlert animated:YES completion:nil]; + + } + else{ + + UIAlertController * packageBackupAlert= [UIAlertController + alertControllerWithTitle:@"Package Backup" + message:@"This will package the selected backup to a DEB file." + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction + actionWithTitle:@"OK" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + + UIAlertController * packageBackupWait= [UIAlertController + alertControllerWithTitle:@"Backup DEB" + message:@"The backup is being created. Please Wait. This dialogue will will be dismissed when finished. The DEB can be found in [/User/Documents/FlashBackDEBs]" + preferredStyle:UIAlertControllerStyleAlert]; + + [packageBackupAlert dismissViewControllerAnimated:YES completion:nil]; + + [self presentViewController:packageBackupWait animated:YES completion:nil]; + + + NSTask *packageTask = [[NSTask alloc] init]; + [packageTask setLaunchPath:@"/bin/bash"]; + [packageTask setArguments:@[ @"FBPackage", backupNameSelected]]; + [packageTask launch]; + [packageTask waitUntilExit]; + + + [packageBackupWait dismissViewControllerAnimated:YES completion:nil]; + + }]; + UIAlertAction* cancel = [UIAlertAction + actionWithTitle:@"Cancel" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + [packageBackupAlert dismissViewControllerAnimated:YES completion:nil]; + + }]; + + [packageBackupAlert addAction:cancel]; + [packageBackupAlert addAction:ok]; + + [self presentViewController:packageBackupAlert animated:YES completion:nil]; + } + } + + else{ + + UIAlertController * noBackupDEBAlert = [UIAlertController + alertControllerWithTitle:@"Creating DEBs is only available in the full version" + message:@"The free trial of FlashBack doesn't allow backing up setups to DEBs. Purchase the full version on PackIX for $1.50 for this!" + preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* ok = [UIAlertAction actionWithTitle:@"ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { - [selectBackupAlert dismissViewControllerAnimated:YES completion:nil]; + [noBackupDEBAlert dismissViewControllerAnimated:YES completion:nil]; }]; - [selectBackupAlert addAction:ok]; + [noBackupDEBAlert addAction:ok]; - [self presentViewController:selectBackupAlert animated:YES completion:nil]; + [self presentViewController:noBackupDEBAlert animated:YES completion:nil]; } - else{ - - UIAlertController * packageBackupAlert= [UIAlertController - alertControllerWithTitle:@"Package Backup" - message:@"This will package the selected backup to a DEB file." - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction - actionWithTitle:@"OK" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) - { - - UIAlertController * packageBackupWait= [UIAlertController - alertControllerWithTitle:@"Backup DEB" - message:@"The backup is being created. Please Wait. This dialogue will will be dismissed when finished. The DEB can be found in [/User/Documents/FlashBackDEBs]" - preferredStyle:UIAlertControllerStyleAlert]; - - [packageBackupAlert dismissViewControllerAnimated:YES completion:nil]; - - [self presentViewController:packageBackupWait animated:YES completion:nil]; - - - NSTask *packageTask = [[NSTask alloc] init]; - [packageTask setLaunchPath:@"/bin/bash"]; - [packageTask setArguments:@[ @"FBPackage", backupNameSelected]]; - [packageTask launch]; - [packageTask waitUntilExit]; - - - [packageBackupWait dismissViewControllerAnimated:YES completion:nil]; - - }]; - UIAlertAction* cancel = [UIAlertAction - actionWithTitle:@"Cancel" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) - { - [packageBackupAlert dismissViewControllerAnimated:YES completion:nil]; - - }]; - - [packageBackupAlert addAction:cancel]; - [packageBackupAlert addAction:ok]; - - [self presentViewController:packageBackupAlert animated:YES completion:nil]; - } } - (IBAction)helpMenu:(id)sender { @@ -376,7 +385,7 @@ int itFuckingCounts = 0; UIAlertController * infoAlert= [UIAlertController alertControllerWithTitle:@"Known issues" - message:@"\nScrolling through the picker view with no backups will crash the app.\n\nSometimes, wallpapers are incorrectly applied after restoring a backup\n\nFor bug reports, please contact me via Twitter or the email available in the next pop-up dialogue." + message:@"\nFor bug reports, please contact me via Twitter or the email available in the next pop-up dialogue.\n\nCredit for the DRM goes to @kushdabush on twitter" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* okay = [UIAlertAction @@ -423,8 +432,6 @@ int itFuckingCounts = 0; } - - - (IBAction)deleteBackup:(id)sender { if (backupNameSelected == nil){ @@ -467,9 +474,9 @@ int itFuckingCounts = 0; [deleteTask waitUntilExit]; UIAlertController * deleteFinishedAlert= [UIAlertController - alertControllerWithTitle:@"Backup Deleted" - message:@"The backup has been deleted successfully" - preferredStyle:UIAlertControllerStyleAlert]; + alertControllerWithTitle:@"Backup Deleted" + message:@"The backup has been deleted successfully" + preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* okey = [UIAlertAction actionWithTitle:@"ok" @@ -515,24 +522,82 @@ int itFuckingCounts = 0; [super viewDidLoad]; // Do any additional setup after loading the view. + + selectedBackupPickerView.delegate=self; selectedBackupPickerView.dataSource=self; + // MARK: List of Backups is found and added to this array //_backupFolderArray = @[@"one",@"two",@"three"]; _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/Library/FlashBack/Backups/" error:nil]; - NSLog(@"%d", itFuckingCounts); + + // MARK: DRM From @Kushdabush, commenting out for testing + //pulled from https://github.com/DomienF/kushy-drm/blob/master/Tweak.xm + /* + + UIAlertController * failedDRMAlert= [UIAlertController + alertControllerWithTitle:@"FlashBack appears to be pirated :(" + message:@"Please support small devs and purchase software. If you're unable to, please contact me, I'm happy to work things out! If you want to test it out, check out the trial version!" + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* failedDRMOk = [UIAlertAction + actionWithTitle:@"ok" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + [failedDRMAlert dismissViewControllerAnimated:YES completion:nil]; + //exit(0); + }]; + + UIAlertController * trialNoticeAlert= [UIAlertController + alertControllerWithTitle:@"Trial Notice" + message:@"Thanks for checking out FlashBack! This trial allows you to give FlashBack a test run allowing for one backup. You can use that backup as a checkpoint to revert to after making changes." + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* trialOk = [UIAlertAction + actionWithTitle:@"ok" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + [trialNoticeAlert dismissViewControllerAnimated:YES completion:nil]; + }]; + + [failedDRMAlert addAction:failedDRMOk]; + [trialNoticeAlert addAction:trialOk]; + + if ([[NSFileManager defaultManager] fileExistsAtPath:@"/var/lib/dpkg/info/com.mpg13.flashback.list"]){ + NSLog(@"FlashBack DRM Passed"); + trial = NO; + } + else{ + if ([[NSFileManager defaultManager] fileExistsAtPath:@"/var/lib/dpkg/info/com.mpg13.flashbackfree.list"]){ + NSLog(@"FlashBack Trial Mode"); + trial = YES; + dispatch_async(dispatch_get_main_queue(), ^ { + [self presentViewController:trialNoticeAlert animated:YES completion:nil]; + }); + } + else{ + NSLog(@"DRM failed"); + dispatch_async(dispatch_get_main_queue(), ^ { + [self presentViewController:failedDRMAlert animated:YES completion:nil]; + }); + } + } + */ + + trial = NO; } + -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ - - //NEED TO FIGURE OUT HOW TO CHECK FOR EMPTY LIST if (_backupFolderArray == nil){ - + UIAlertController * emptyArrayAlert= [UIAlertController - alertControllerWithTitle:@"Let's start by making a backup!" - message:@"Press 'Create Backup' to get started!" - preferredStyle:UIAlertControllerStyleAlert]; + alertControllerWithTitle:@"Let's start by making a backup!" + message:@"Press 'Create Backup' to get started!" + preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* ok = [UIAlertAction actionWithTitle:@"ok" @@ -546,33 +611,24 @@ int itFuckingCounts = 0; [emptyArrayAlert addAction:ok]; [self presentViewController:emptyArrayAlert animated:YES completion:nil]; - + } else{ - backupNameSelected = [_backupFolderArray objectAtIndex:row]; - selectedBackupText.text=backupNameSelected; - - selectedBackupURL = [NSMutableString stringWithString: @"/Library/FlashBack/Backups/"]; - [selectedBackupURL appendString: backupNameSelected]; - - selectedBackupImageURL=selectedBackupURL; - - [selectedBackupImageURL appendString: @"/SBFolder/LockBackgroundThumbnail.jpg"]; - //[selectedBackupImageURL appendString: @"/SBFolder/LockBackground.cpbitmap"]; - NSLog(@"%@", selectedBackupImageURL); - NSURL *url = [NSURL fileURLWithPath:selectedBackupImageURL]; - NSData *data = [NSData dataWithContentsOfURL:url]; - - /*NSData *homeData = [NSData dataWithContentsOfFile:selectedBackupImageURL]; - CFArrayRef homeArrayRef = CPBitmapCreateImagesFromData((__bridge CFDataRef)homeData, NULL, 1, NULL); - NSArray *homeArray = (__bridge NSArray*)homeArrayRef; - UIImage *homeWallpaper = [[UIImage alloc] initWithCGImage:(__bridge CGImageRef)(homeArray[0])];*/ + backupNameSelected = [_backupFolderArray objectAtIndex:row]; + selectedBackupText.text=backupNameSelected; - selectedBackupImage.image = [UIImage imageWithData:data]; - //selectedBackupImage.image = [UIImage imageWithContentsOfCPBitmapFile:selectedBackupImageURL flags:kNilOptions]; + selectedBackupURL = [NSMutableString stringWithString: @"/Library/FlashBack/Backups/"]; + [selectedBackupURL appendString: backupNameSelected]; - - NSLog(@"%@", backupNameSelected); + selectedBackupImageURL=selectedBackupURL; + + [selectedBackupImageURL appendString: @"/SBFolder/LockBackgroundThumbnail.jpg"]; + NSLog(@"%@", selectedBackupImageURL); + NSURL *url = [NSURL fileURLWithPath:selectedBackupImageURL]; + NSData *data = [NSData dataWithContentsOfURL:url]; + selectedBackupImage.image = [UIImage imageWithData:data]; + + NSLog(@"%@", backupNameSelected); } }