Skip to content

Commit

Permalink
updates for initialisation and closing database to use FMDatabaseQueue
Browse files Browse the repository at this point in the history
  • Loading branch information
josh64x2 committed Feb 28, 2015
1 parent 313cfd2 commit 6fc2b48
Showing 1 changed file with 62 additions and 71 deletions.
133 changes: 62 additions & 71 deletions src/Database.m
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,6 @@ - (instancetype)init
searchString = @"";
smartfoldersDict = [[NSMutableDictionary alloc] init];
foldersDict = [[NSMutableDictionary alloc] init];
//databaseQueue = nil;
databaseQueue = [[FMDatabaseQueue alloc] initWithPath:[Database databasePath]];
[self initaliseFields];
_transactionQueue = dispatch_queue_create("uk.co.opencommunity.vienna2.database-transaction", NULL);
_execQueue = dispatch_queue_create("uk.co.opencommunity.vienna2.database-access", NULL);
}
Expand All @@ -93,10 +90,10 @@ + (instancetype)sharedManager {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyManager = [[Database alloc] init];
// if (![sharedMyManager initDatabase]) {
// [sharedMyManager release];
// sharedMyManager = nil;
// }
if (![sharedMyManager initDatabase]) {
[sharedMyManager release];
sharedMyManager = nil;
}
});

return sharedMyManager;
Expand Down Expand Up @@ -136,28 +133,7 @@ + (NSString*)prepareStringForQuery:(NSString*)inString
}


-(void)initaliseFields {
fieldsByName = [[NSMutableDictionary alloc] init];
fieldsOrdered = [[NSMutableArray alloc] init];

[self addField:MA_Field_Read type:MA_FieldType_Flag tag:MA_FieldID_Read sqlField:@"read_flag" visible:YES width:17];
[self addField:MA_Field_Flagged type:MA_FieldType_Flag tag:MA_FieldID_Flagged sqlField:@"marked_flag" visible:YES width:17];
[self addField:MA_Field_HasEnclosure type:MA_FieldType_Flag tag:MA_FieldID_HasEnclosure sqlField:@"hasenclosure_flag" visible:YES width:17];
[self addField:MA_Field_Deleted type:MA_FieldType_Flag tag:MA_FieldID_Deleted sqlField:@"deleted_flag" visible:NO width:15];
[self addField:MA_Field_Comments type:MA_FieldType_Integer tag:MA_FieldID_Comments sqlField:@"comment_flag" visible:NO width:15];
[self addField:MA_Field_GUID type:MA_FieldType_Integer tag:MA_FieldID_GUID sqlField:@"message_id" visible:NO width:72];
[self addField:MA_Field_Subject type:MA_FieldType_String tag:MA_FieldID_Subject sqlField:@"title" visible:YES width:472];
[self addField:MA_Field_Folder type:MA_FieldType_Folder tag:MA_FieldID_Folder sqlField:@"folder_id" visible:NO width:130];
[self addField:MA_Field_Date type:MA_FieldType_Date tag:MA_FieldID_Date sqlField:@"date" visible:YES width:152];
[self addField:MA_Field_Parent type:MA_FieldType_Integer tag:MA_FieldID_Parent sqlField:@"parent_id" visible:NO width:72];
[self addField:MA_Field_Author type:MA_FieldType_String tag:MA_FieldID_Author sqlField:@"sender" visible:YES width:138];
[self addField:MA_Field_Link type:MA_FieldType_String tag:MA_FieldID_Link sqlField:@"link" visible:NO width:138];
[self addField:MA_Field_Text type:MA_FieldType_String tag:MA_FieldID_Text sqlField:@"text" visible:NO width:152];
[self addField:MA_Field_Summary type:MA_FieldType_String tag:MA_FieldID_Summary sqlField:@"summary" visible:NO width:152];
[self addField:MA_Field_Headlines type:MA_FieldType_String tag:MA_FieldID_Headlines sqlField:@"" visible:NO width:100];
[self addField:MA_Field_Enclosure type:MA_FieldType_String tag:MA_FieldID_Enclosure sqlField:@"enclosure" visible:NO width:100];
[self addField:MA_Field_EnclosureDownloaded type:MA_FieldType_Flag tag:MA_FieldID_EnclosureDownloaded sqlField:@"enclosuredownloaded_flag" visible:NO width:100];
}


/* initDatabase
* Initalizes the database. The database is first checked to ensure it exists
Expand Down Expand Up @@ -442,35 +418,46 @@ -(BOOL)initDatabase {
[self syncLastUpdate];

// Create fields
fieldsByName = [[NSMutableDictionary alloc] init];
fieldsOrdered = [[NSMutableArray alloc] init];

[self addField:MA_Field_Read type:MA_FieldType_Flag tag:MA_FieldID_Read sqlField:@"read_flag" visible:YES width:17];
[self addField:MA_Field_Flagged type:MA_FieldType_Flag tag:MA_FieldID_Flagged sqlField:@"marked_flag" visible:YES width:17];
[self addField:MA_Field_HasEnclosure type:MA_FieldType_Flag tag:MA_FieldID_HasEnclosure sqlField:@"hasenclosure_flag" visible:YES width:17];
[self addField:MA_Field_Deleted type:MA_FieldType_Flag tag:MA_FieldID_Deleted sqlField:@"deleted_flag" visible:NO width:15];
[self addField:MA_Field_Comments type:MA_FieldType_Integer tag:MA_FieldID_Comments sqlField:@"comment_flag" visible:NO width:15];
[self addField:MA_Field_GUID type:MA_FieldType_Integer tag:MA_FieldID_GUID sqlField:@"message_id" visible:NO width:72];
[self addField:MA_Field_Subject type:MA_FieldType_String tag:MA_FieldID_Subject sqlField:@"title" visible:YES width:472];
[self addField:MA_Field_Folder type:MA_FieldType_Folder tag:MA_FieldID_Folder sqlField:@"folder_id" visible:NO width:130];
[self addField:MA_Field_Date type:MA_FieldType_Date tag:MA_FieldID_Date sqlField:@"date" visible:YES width:152];
[self addField:MA_Field_Parent type:MA_FieldType_Integer tag:MA_FieldID_Parent sqlField:@"parent_id" visible:NO width:72];
[self addField:MA_Field_Author type:MA_FieldType_String tag:MA_FieldID_Author sqlField:@"sender" visible:YES width:138];
[self addField:MA_Field_Link type:MA_FieldType_String tag:MA_FieldID_Link sqlField:@"link" visible:NO width:138];
[self addField:MA_Field_Text type:MA_FieldType_String tag:MA_FieldID_Text sqlField:@"text" visible:NO width:152];
[self addField:MA_Field_Summary type:MA_FieldType_String tag:MA_FieldID_Summary sqlField:@"summary" visible:NO width:152];
[self addField:MA_Field_Headlines type:MA_FieldType_String tag:MA_FieldID_Headlines sqlField:@"" visible:NO width:100];
[self addField:MA_Field_Enclosure type:MA_FieldType_String tag:MA_FieldID_Enclosure sqlField:@"enclosure" visible:NO width:100];
[self addField:MA_Field_EnclosureDownloaded type:MA_FieldType_Flag tag:MA_FieldID_EnclosureDownloaded sqlField:@"enclosuredownloaded_flag" visible:NO width:100];

[self initaliseFields];

[sqlDatabase close];
databaseQueue = [FMDatabaseQueue databaseQueueWithPath:[Database databasePath]];
if(!databaseQueue) {
[sqlDatabase release];


[self setDatabaseQueue:[FMDatabaseQueue databaseQueueWithPath:[Database databasePath]]];
if(![self databaseQueue]) {
NSLog(@"error creating database queue");
}
return YES;
}

/**
* Initialise the mappings between the names of
* the database fields and the model fields
*/
-(void)initaliseFields {
fieldsByName = [[NSMutableDictionary alloc] init];
fieldsOrdered = [[NSMutableArray alloc] init];

[self addField:MA_Field_Read type:MA_FieldType_Flag tag:MA_FieldID_Read sqlField:@"read_flag" visible:YES width:17];
[self addField:MA_Field_Flagged type:MA_FieldType_Flag tag:MA_FieldID_Flagged sqlField:@"marked_flag" visible:YES width:17];
[self addField:MA_Field_HasEnclosure type:MA_FieldType_Flag tag:MA_FieldID_HasEnclosure sqlField:@"hasenclosure_flag" visible:YES width:17];
[self addField:MA_Field_Deleted type:MA_FieldType_Flag tag:MA_FieldID_Deleted sqlField:@"deleted_flag" visible:NO width:15];
[self addField:MA_Field_Comments type:MA_FieldType_Integer tag:MA_FieldID_Comments sqlField:@"comment_flag" visible:NO width:15];
[self addField:MA_Field_GUID type:MA_FieldType_Integer tag:MA_FieldID_GUID sqlField:@"message_id" visible:NO width:72];
[self addField:MA_Field_Subject type:MA_FieldType_String tag:MA_FieldID_Subject sqlField:@"title" visible:YES width:472];
[self addField:MA_Field_Folder type:MA_FieldType_Folder tag:MA_FieldID_Folder sqlField:@"folder_id" visible:NO width:130];
[self addField:MA_Field_Date type:MA_FieldType_Date tag:MA_FieldID_Date sqlField:@"date" visible:YES width:152];
[self addField:MA_Field_Parent type:MA_FieldType_Integer tag:MA_FieldID_Parent sqlField:@"parent_id" visible:NO width:72];
[self addField:MA_Field_Author type:MA_FieldType_String tag:MA_FieldID_Author sqlField:@"sender" visible:YES width:138];
[self addField:MA_Field_Link type:MA_FieldType_String tag:MA_FieldID_Link sqlField:@"link" visible:NO width:138];
[self addField:MA_Field_Text type:MA_FieldType_String tag:MA_FieldID_Text sqlField:@"text" visible:NO width:152];
[self addField:MA_Field_Summary type:MA_FieldType_String tag:MA_FieldID_Summary sqlField:@"summary" visible:NO width:152];
[self addField:MA_Field_Headlines type:MA_FieldType_String tag:MA_FieldID_Headlines sqlField:@"" visible:NO width:100];
[self addField:MA_Field_Enclosure type:MA_FieldType_String tag:MA_FieldID_Enclosure sqlField:@"enclosure" visible:NO width:100];
[self addField:MA_Field_EnclosureDownloaded type:MA_FieldType_Flag tag:MA_FieldID_EnclosureDownloaded sqlField:@"enclosuredownloaded_flag" visible:NO width:100];
}

/* relocateLockedDatabase
* Tell the user that the database could not be created at the path specified by path
* and prompt for an alternative location. Opens and returns the new location if we were successful.
Expand Down Expand Up @@ -1399,14 +1386,16 @@ -(BOOL)setNextSibling:(NSUInteger)nextSiblingId forFolder:(NSInteger)folderId
-(NSInteger)firstFolderId
{
__block NSInteger folderId = 0;
dispatch_sync(_execQueue, ^() {
FMResultSet * results = [sqlDatabase executeQuery:@"select first_folder from info"];
if ([results next])
{
folderId = [[results stringForColumn:@"first_folder"] intValue];
}
[results close];
});
FMDatabaseQueue *queue = [[Database sharedManager] databaseQueue];
[queue inDatabase:^(FMDatabase *db) {
FMResultSet * results = [db executeQuery:@"select first_folder from info"];
if ([results next])
{
folderId = [[results stringForColumn:@"first_folder"] intValue];
}
[results close];
}];

return folderId;
}

Expand Down Expand Up @@ -2593,16 +2582,18 @@ -(void)markArticleDeleted:(NSInteger)folderId guid:(NSString *)guid isDeleted:(B
-(BOOL)isTrashEmpty
{
__block BOOL result;
dispatch_sync(_execQueue, ^() {
FMResultSet * results = [sqlDatabase executeQuery:@"select deleted_flag from messages where deleted_flag=1"];
if ([results next])
{
result= NO;
}
else
result=YES;
[results close];
});
FMDatabaseQueue *queue = [[Database sharedManager] databaseQueue];
[queue inDatabase:^(FMDatabase *db) {
FMResultSet * results = [db executeQuery:@"select deleted_flag from messages where deleted_flag=1"];
if ([results next])
{
result= NO;
}
else
result=YES;
[results close];
}];

return result;
}

Expand Down Expand Up @@ -2674,11 +2665,11 @@ -(void)close
[fieldsByName release];
[self setTrashFolder:nil];
[self setSearchFolder:nil];
[sqlDatabase close];
initializedfoldersDict = NO;
initializedSmartfoldersDict = NO;
countOfUnread = 0;
sqlDatabase = nil;
[[self databaseQueue] close];
}

/* dealloc
Expand Down

0 comments on commit 6fc2b48

Please sign in to comment.