Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble-iphoneos.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikkel Krautz <mikkel@krautz.dk>2010-06-29 05:03:20 +0400
committerMikkel Krautz <mikkel@krautz.dk>2010-06-29 05:03:20 +0400
commit4429926b6e65fa0a0b3422c21151137c49560b46 (patch)
tree48aa72d5943763501c7b37f9b8b7cd208c0cffd2
parent821bd94e38576a4ae845c8c6453d9e2c931a1a3e (diff)
Persistent pkeys for Identity objects.
-rw-r--r--Source/Classes/Database.h8
-rw-r--r--Source/Classes/Database.m62
-rw-r--r--Source/Classes/Identity.h4
-rw-r--r--Source/Classes/Identity.m9
-rw-r--r--Source/Classes/IdentityCreationViewController.m4
-rw-r--r--Source/Classes/IdentityViewController.m2
6 files changed, 71 insertions, 18 deletions
diff --git a/Source/Classes/Database.h b/Source/Classes/Database.h
index 54a2894..d9df143 100644
--- a/Source/Classes/Database.h
+++ b/Source/Classes/Database.h
@@ -38,12 +38,16 @@
+ (void) initializeDatabase;
+ (void) teardown;
+// FavouriteServer
+ (void) storeFavourite:(FavouriteServer *)favServ;
+ (void) deleteFavourite:(FavouriteServer *)favServ;
+ (void) storeFavourites:(NSArray *)favourites;
+ (NSMutableArray *) fetchAllFavourites;
-+ (void) saveIdentity:(Identity *)ident;
-+ (NSArray *) identities;
+// Identity
++ (void) storeIdentity:(Identity *)ident;
++ (void) deleteIdentity:(Identity *)ident;
++ (void) storeIdentities:(NSArray *)idents;
++ (NSArray *) fetchAllIdentities;
@end
diff --git a/Source/Classes/Database.m b/Source/Classes/Database.m
index 1ee7c5a..a3e7bdb 100644
--- a/Source/Classes/Database.m
+++ b/Source/Classes/Database.m
@@ -67,11 +67,12 @@ static FMDatabase *db = nil;
@" `username` TEXT)"];
[db executeUpdate:@"CREATE TABLE IF NOT EXISTS `identities` "
- @"(`persistent` BLOB PRIMARY KEY,"
+ @"(`id` INTEGER PRIMARY KEY AUTOINCREMENT,"
@" `username` TEXT,"
- @" `avatar` BLOB)"];
- [db executeUpdate:@"ALTER TABLE `identities` ADD COLUMN `fullname` TEXT"];
- [db executeUpdate:@"ALTER TABLE `identities` ADD COLUMN `email` TEXT"];
+ @" `fullname` TEXT,"
+ @" `email` TEXT,"
+ @" `avatar` BLOB,"
+ @" `persistent` BLOB)"];
[db executeUpdate:@"VACUUM"];
@@ -163,18 +164,50 @@ static FMDatabase *db = nil;
//
// Store identity
//
++ (void) storeIdentity:(Identity *)ident {
+ NSLog(@"StoreIdentity..");
+ // If the favourite already has a private key, update the currently stored entity
+ if ([ident hasPrimaryKey]) {
+ // If it isn't already stored, store it and update the object's pkey.
+ [db executeUpdate:@"UPDATE `identities` SET `username`=?, `fullname`=?, `email`=?, `avatar`=?, `persistent`=? WHERE `id`=?",
+ ident.userName, ident.fullName, ident.emailAddress, nil, ident.persistent,
+ [NSNumber numberWithInt:[ident primaryKey]]];
+ } else {
+ // We're already inside a transaction if we were called from within
+ // storeIdentities. If that isn't the case, make sure we start a new
+ // transaction.
+ BOOL newTransaction = ![db inTransaction];
+ if (newTransaction)
+ [db beginTransaction];
+ [db executeUpdate:@"INSERT INTO `identities` (`username`, `fullname`, `email`, `avatar`, `persistent`) VALUES (?, ?, ?, ?, ?)",
+ ident.userName, ident.fullName, ident.emailAddress, nil, ident.persistent];
+ FMResultSet *res = [db executeQuery:@"SELECT last_insert_rowid()"];
+ [res next];
+ NSLog(@"pkey = %i", [res intForColumn:0]);
+ [ident setPrimaryKey:[res intForColumnIndex:0]];
+ if (newTransaction)
+ [db commit];
+ }
+}
-+ (void) saveIdentity:(Identity *)ident {
- [db executeUpdate:@"REPLACE INTO `identities` (`persistent`, `username`, `fullname`, `email`) VALUES (?, ?, ?, ?)",
- ident.persistentId, ident.userName, nil, nil];
+//
+// Delete identity
+//
++ (void) deleteIdentity:(Identity *)ident {
+ NSAssert([ident hasPrimaryKey], @"Can only delete objects originated from database");
+ [db executeUpdate:@"DELETE FROM `identities` WHERE `id`=?",
+ [NSNumber numberWithInt:[ident primaryKey]]];
}
-+ (NSArray *) identities {
+//
+// Fetch all identities
+//
++ (NSArray *) fetchAllIdentities {
NSMutableArray *idents = [[NSMutableArray alloc] init];
FMResultSet *res = [db executeQuery:@"SELECT `persistent`, `username`, `fullname`, `email` FROM `identities`"];
while ([res next]) {
Identity *ident = [[Identity alloc] init];
- ident.persistentId = [res dataForColumnIndex:0];
+ ident.persistent = [res dataForColumnIndex:0];
ident.userName = [res stringForColumnIndex:1];
ident.fullName = [res stringForColumnIndex:2];
ident.emailAddress = [res stringForColumnIndex:3];
@@ -184,6 +217,17 @@ static FMDatabase *db = nil;
return [idents autorelease];
}
+//
+// Save identities
+//
++ (void) storeIdentities:(NSArray *)idents {
+ [db beginTransaction];
+ for (Identity *ident in idents) {
+ [Database storeIdentity:ident];
+ }
+ [db commit];
+}
+
+ (void) showStoredIdentities {
FMResultSet *res = [db executeQuery:@"SELECT `username`, `persistent` FROM `identities`"];
while ([res next]) {
diff --git a/Source/Classes/Identity.h b/Source/Classes/Identity.h
index d999c37..4234632 100644
--- a/Source/Classes/Identity.h
+++ b/Source/Classes/Identity.h
@@ -30,14 +30,14 @@
@interface Identity : NSObject {
NSInteger _pkey;
- NSData *_persistentId;
+ NSData *_persistent;
NSString *_userName;
NSString *_fullName;
NSString *_emailAddress;
}
@property (assign) NSInteger primaryKey;
-@property (copy) NSData *persistentId;
+@property (copy) NSData *persistent;
@property (copy) NSString *userName;
@property (copy) NSString *fullName;
@property (copy) NSString *emailAddress;
diff --git a/Source/Classes/Identity.m b/Source/Classes/Identity.m
index 2e684be..46af8fa 100644
--- a/Source/Classes/Identity.m
+++ b/Source/Classes/Identity.m
@@ -33,17 +33,22 @@
@implementation Identity
@synthesize primaryKey = _pkey;
-@synthesize persistentId = _persistentId;
+@synthesize persistent = _persistent;
@synthesize userName = _userName;
@synthesize fullName = _fullName;
@synthesize emailAddress = _emailAddress;
- (id) init {
self = [super init];
+ if (self == nil)
+ return nil;
+
+ _pkey = -1;
+
return self;
}
-- (void) hasPrimaryKey {
+- (BOOL) hasPrimaryKey {
return _pkey != -1;
}
diff --git a/Source/Classes/IdentityCreationViewController.m b/Source/Classes/IdentityCreationViewController.m
index 77c0acb..44d7e73 100644
--- a/Source/Classes/IdentityCreationViewController.m
+++ b/Source/Classes/IdentityCreationViewController.m
@@ -193,9 +193,9 @@
if (err == noErr) {
if (data != nil) {
Identity *ident = [[Identity alloc] init];
- ident.persistentId = data;
+ ident.persistent = data;
ident.userName = @"Tukoff";
- [Database saveIdentity:ident];
+ [Database storeIdentity:ident];
[ident release];
NSLog(@"Stored identity...");
}
diff --git a/Source/Classes/IdentityViewController.m b/Source/Classes/IdentityViewController.m
index cd46dc6..fbfbc5e 100644
--- a/Source/Classes/IdentityViewController.m
+++ b/Source/Classes/IdentityViewController.m
@@ -113,7 +113,7 @@ static NSUInteger IdentityViewControllerCertificateView = 1;
[self animateDeleteRowsCount:deleteCount withRowAnimation:UITableViewRowAnimationRight];
_currentView = currentView;
- _identities = [[Database identities] retain];
+ _identities = [[Database fetchAllIdentities] retain];
[self animateInsertRowsCount:[_identities count] withRowAnimation:UITableViewRowAnimationLeft];
// View changed to certificate view