objective-ctheoslogos

saving images inside apps


Hey guys I'm coding a tweak and need a help with expert users (using theos and logos mixed with objective C) I'm adding an option to save photos in instagram (third party app) i added a save button

-(void)actionSheetDismissedWithButtonTitled:(NSString *)title{if([title   isEqualtToString:@"Save"])

added the button successfully and prepared the save image code which is the following:

%hook IGFeedItemActionCell -(void)actionSheetDismissedWithButtonTitled:(NSString *)title { if ([title isEqualToString:@"Save"]) IGFeedItem *post = self.feedItem;{ UIImageWriteToSavedAlbum(post, nil,nil,nil);UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Image Saved" message:@"The image was saved."delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];[alert show];} } %end

my question is how to link the saving code with the pictures in the app (the class for pictures is IGFeedItemPhotoView)
thanks in advance


Solution

  • So I wrote a full program that does what you want and something extra :)

    #import <UIKit/UIKit.h>
    
    @interface IGPost: NSObject{}
    @property int mediaType;
    + (int)videoVersionForCurrentNetworkConditions;
    + (int)fullSizeImageVersionForDevice; 
    - (id)imageURLForImageVersion:(int)arg1;
    - (id)videoURLForVideoVersion:(int)arg1;
    @end
    
    @interface IGFeedItem: IGPost{}
    @end
    
    @interface IGFeedItemActionCell: NSObject{}
    @property (nonatomic,retain) IGFeedItem* feedItem;
    -(void)actionSheetDismissedWithButtonTitled:(id)arg1;
    @end
    
    %hook IGFeedItemActionCell
    
    
    -(void)actionSheetDismissedWithButtonTitled:(id)arg1 {
        NSString *title = (NSString *)arg1;
        if ([title isEqualToString:@"Save"]) {
            IGFeedItem *post = self.feedItem;
            if (post.mediaType == 1) {
                int version = [[post class] fullSizeImageVersionForDevice];
                NSURL *link = [post imageURLForImageVersion:version];
                NSData *imageData = [NSData dataWithContentsOfURL:link];
                UIImage *image = [UIImage imageWithData:imageData];
                UIImageWriteToSavedPhotosAlbum(image, nil,nil,nil);
                UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Image Saved" message:@"The image was saved."delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];
                [alert show];
            }
            else {
                int version = [[post class] videoVersionForCurrentNetworkConditions];
                NSURL *link = [post videoURLForVideoVersion:version];
                NSURLSessionTask *download = [[NSURLSession sharedSession] downloadTaskWithURL:link completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
                NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
                NSURL *tempURL = [documentsURL URLByAppendingPathComponent:[link lastPathComponent]];
                [[NSFileManager defaultManager] moveItemAtURL:location toURL:tempURL error:nil];
            UISaveVideoAtPathToSavedPhotosAlbum(tempURL.path, nil, NULL, NULL);
            }];
                [download resume];
                UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Video Saved" message:@"The video was saved."delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];
                [alert show];
            }
    
        }
        else {
            %orig(arg1);
        }
    }
    
    %end