Saturday 15 November 2014

Download Images from URL & Update the Image Count (DB-SQLite)

AppDelegate.h File

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    NSString *databasePath;
}

@property (strong, nonatomic) UIWindow *window;

- (NSString *) getDatabasepath;

@end


AppDelegate.m File

#import "AppDelegate.h"

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self checkAndCreateDatabase];
}


//DB is copied from Project to Document Directory
-(void) checkAndCreateDatabase
{
BOOL success;
    
NSError *error;
    
NSFileManager *fileManager = [NSFileManager defaultManager];
    
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    
NSString *documentsDirectory=[paths objectAtIndex:0];
    
databasePath=[documentsDirectory stringByAppendingFormat:@“/DB.sqlite"];
    
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"DB.sqlite"];
    
success = [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:&error];
}


//Find the DB Path from Document Directory
- (NSString *) getDatabasepath
{
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory=[paths objectAtIndex:0];
databasePath=[documentsDirectory stringByAppendingFormat:@"/DB.sqlite"];
return databasePath;
}


DBHelpher.h File

@interface DBHelper : NSObject
{
    NSMutableArray* tempArray;
    NSMutableDictionary* tempDict;
}

-(NSMutableArray *)get_images_from_web;
-(void)updateDate:(NSString *)dte

@end


DBHelpher.m File

#import "DBHelper.h"
#import "AppDelegate.h"

@implementation DBHelper

static sqlite3_stmt *Images_statement = nil;
static sqlite3_stmt *Images_count_statement = nil;

-(NSMutableArray *)get_images_from_web
{
    tempArray = [[NSMutableArray alloc] init];
    NSString *status=@"Y";
    NSString *databasePath=[(AppDelegate *)[[UIApplication sharedApplication] delegate] getDatabasepath];
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
    {
        const char *sql = "select Logo_url from tablename where status = 'Y'";
        if (sqlite3_prepare_v2(database, sql, -1, &Images_statement, NULL) != SQLITE_OK)
        {
            NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
        }
        sqlite3_bind_text(Images_statement, 1, [status UTF8String],-1,SQLITE_TRANSIENT);
        
        // Loop through the results and add them to the feeds array
        while(sqlite3_step(Images_statement) == SQLITE_ROW)
        {
            NSString *imageurl = [NSString stringWithFormat:@"%s",sqlite3_column_text(Images_statement, 0)];
            [tempArray addObject:imageurl];
        }
        sqlite3_reset(Images_statement);
        sqlite3_finalize(Images_statement);
    }
    sqlite3_close(database);
    return tempArray;
}


-(void)update_img_count:(int)count_val
{
    NSString *sql = @"";
    NSString *databasePath=[(AppDelegate *)[[UIApplication sharedApplication] delegate] getDatabasepath];
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
    {
        sql = [NSString stringWithFormat:@"UPDATE images_count_table SET img_count = '%d' WHERE serial = 1", count_val];
        if(sqlite3_prepare_v2(database, [sql UTF8String], -1, & Images_count_statement, NULL) != SQLITE_OK)
        {
            NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
        }
        NSLog(@"update query : %@", sql);
        
        if(SQLITE_DONE != sqlite3_step(Images_count_statement))
            NSLog(@"Error while inserting data. '%s'", sqlite3_errmsg(database));

        sqlite3_reset(Images_count_statement);
        sqlite3_finalize(Images_count_statement);
    }
    sqlite3_close(database);
}


ViewController.h File

#import <UIKit/UIKit.h>
#import "DBHelper.h"


@interface ViewController : GAITrackedViewController
{
    DBHelper *dbHelper;
}
@end


ViewController.m File

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController


-(void)viewWillAppear:(BOOL)animated
{
dbHelper = [[DBHelper alloc] init];
    [self Images_Add_to_Local];
[dbHelper update_img_count:20];
}


-(void)Images_Add_to_Local
{
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    if (![[defaults objectForKey:@"Images_From_Web"] isEqualToString:@"Downloaded"])
    {
        [defaults setObject:@"Downloaded" forKey:@"Images_From_Web"];
        [defaults synchronize];
        
        NSMutableArray *imagesArray = [dbHelper get_images_from_web];
        
        for (int i=1; i<=[imagesArray count]; i++)
        {
            NSString *str_image_name = [NSString stringWithFormat:@"%d.jpg",i];
            NSURL *url = [NSURL URLWithString:[imagesArray objectAtIndex:i-1]];
            NSData *pictureData = [NSData dataWithContentsOfURL:url];
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documents = [paths objectAtIndex:0];
            NSString *finalPath = [documents stringByAppendingPathComponent:str_image_name];
            [pictureData writeToFile:finalPath atomically:YES];
        }
    }

}

No comments: