Fix application startup

Improve sqlite3 usage
This commit is contained in:
Yann Diorcet 2012-07-24 14:19:41 +02:00
parent 6d9f40a9a1
commit cddf918910
8 changed files with 100 additions and 37 deletions

View file

@ -188,6 +188,7 @@ static UICompositeViewDescription *compositeDescription = nil;
// Save message in database
ChatModel *chat = [[ChatModel alloc] init];
[chat setRemoteContact:remoteAddress];
[chat setLocalContact:@""];
[chat setMessage:message];
[chat setDirection:[NSNumber numberWithInt:0]];
[chat setTime:[NSDate date]];

View file

@ -26,6 +26,7 @@
@interface LinphoneAppDelegate : NSObject <UIApplicationDelegate,UIAlertViewDelegate> {
UIWindow *window;
CTCallCenter* callCenter;
BOOL started;
}
- (void)loadDefaultSettings:(NSDictionary *) appDefaults;
@ -35,6 +36,7 @@
- (void)startApplication;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (assign) BOOL started;
@end

View file

@ -41,6 +41,26 @@ int __aeabi_idiv(int a, int b) {
@implementation LinphoneAppDelegate
@synthesize window;
@synthesize started;
#pragma mark - Lifecycle Functions
- (id)init {
self = [super init];
if(self != nil) {
self->started = FALSE;
}
return self;
}
- (void)dealloc {
[window release];
[super dealloc];
}
#pragma mark -
- (void)handleGSMCallInteration: (id) cCenter {
CTCallCenter* ct = (CTCallCenter*) cCenter;
@ -97,10 +117,10 @@ int __aeabi_idiv(int a, int b) {
&& ![[NSUserDefaults standardUserDefaults] boolForKey:@"start_at_boot_preference"]) {
// autoboot disabled, doing nothing
return;
} else if ([LinphoneManager instance] == nil) {
[self startApplication];
}
[self startApplication];
[[LinphoneManager instance] becomeActive];
if (callCenter == nil) {
@ -186,6 +206,11 @@ int __aeabi_idiv(int a, int b) {
}
- (void)startApplication {
if(started)
return;
started = TRUE;
[[LinphoneManager instance] startLibLinphone];
[self setupUI];
@ -199,11 +224,6 @@ int __aeabi_idiv(int a, int b) {
- (void)applicationWillTerminate:(UIApplication *)application {
}
- (void)dealloc {
[window release];
[super dealloc];
}
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
if([notification.userInfo objectForKey:@"call"] != nil) {
LinphoneCall* call;

View file

@ -339,6 +339,7 @@ static void linphone_iphone_registration_state(LinphoneCore *lc, LinphoneProxyCo
// Save message in database
ChatModel *chat = [[ChatModel alloc] init];
[chat setLocalContact:@""];
[chat setRemoteContact:[NSString stringWithUTF8String:fromStr]];
[chat setMessage:[NSString stringWithUTF8String:message]];
[chat setDirection:[NSNumber numberWithInt:1]];

View file

@ -425,6 +425,7 @@
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<bool key="IBUIAdjustsImageWhenHighlighted">NO</bool>
<bool key="IBUIAdjustsImageWhenDisabled">NO</bool>
<reference key="IBUINormalTitleShadowColor" ref="838911807"/>
<object class="NSCustomResource" key="IBUIHighlightedImage">
<string key="NSClassName">NSImage</string>
@ -461,6 +462,7 @@
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<bool key="IBUIAdjustsImageWhenHighlighted">NO</bool>
<bool key="IBUIAdjustsImageWhenDisabled">NO</bool>
<reference key="IBUINormalTitleShadowColor" ref="838911807"/>
<object class="NSCustomResource" key="IBUIHighlightedImage">
<string key="NSClassName">NSImage</string>
@ -1107,6 +1109,7 @@
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<bool key="IBUIAdjustsImageWhenHighlighted">NO</bool>
<bool key="IBUIAdjustsImageWhenDisabled">NO</bool>
<reference key="IBUINormalTitleShadowColor" ref="838911807"/>
<object class="NSCustomResource" key="IBUIHighlightedImage">
<string key="NSClassName">NSImage</string>
@ -1139,6 +1142,7 @@
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<bool key="IBUIAdjustsImageWhenHighlighted">NO</bool>
<bool key="IBUIAdjustsImageWhenDisabled">NO</bool>
<reference key="IBUINormalTitleShadowColor" ref="838911807"/>
<object class="NSCustomResource" key="IBUIHighlightedImage">
<string key="NSClassName">NSImage</string>
@ -1697,6 +1701,14 @@
</object>
<int key="connectionID">138</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">dialerButton</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="889778982"/>
</object>
<int key="connectionID">139</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchEventConnection" key="connection">
<string key="label">onPadClick:</string>
@ -2366,7 +2378,7 @@
<string key="127.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<real value="0.0" key="127.IBUIButtonInspectorSelectedStateConfigurationMetadataKey"/>
<string key="128.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<real value="0.0" key="128.IBUIButtonInspectorSelectedStateConfigurationMetadataKey"/>
<real value="3" key="128.IBUIButtonInspectorSelectedStateConfigurationMetadataKey"/>
<string key="21.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<real value="0.0" key="21.IBUIButtonInspectorSelectedStateConfigurationMetadataKey"/>
<string key="30.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@ -2434,7 +2446,7 @@
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">138</int>
<int key="maxID">139</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">

View file

@ -103,7 +103,7 @@
<object class="IBUIImageView" id="327031870">
<reference key="NSNextResponder" ref="848661322"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{219, 3}, {27, 17}}</string>
<string key="NSFrame">{{252, 3}, {27, 17}}</string>
<reference key="NSSuperview" ref="848661322"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="522045680"/>
@ -115,7 +115,7 @@
<object class="IBUIImageView" id="522045680">
<reference key="NSNextResponder" ref="848661322"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{254, 3}, {27, 17}}</string>
<string key="NSFrame">{{287, 3}, {27, 17}}</string>
<reference key="NSSuperview" ref="848661322"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
@ -192,7 +192,7 @@
<object class="IBUIImageView" id="408451884">
<reference key="NSNextResponder" ref="572911811"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{378, 3}, {27, 17}}</string>
<string key="NSFrame">{{412, 3}, {27, 17}}</string>
<reference key="NSSuperview" ref="572911811"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="695121572"/>
@ -204,7 +204,7 @@
<object class="IBUIImageView" id="695121572">
<reference key="NSNextResponder" ref="572911811"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{413, 3}, {27, 17}}</string>
<string key="NSFrame">{{447, 3}, {27, 17}}</string>
<reference key="NSSuperview" ref="572911811"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>

View file

@ -68,14 +68,22 @@
[LinphoneLogger logc:LinphoneLoggerError format:"Database not ready"];
return;
}
const char *sql = [[NSString stringWithFormat:@"INSERT INTO chat (localContact, remoteContact, direction, message, time, read) VALUES (\"%@\", \"%@\", %i, \"%@\", %f, %i)",
localContact, remoteContact, [direction intValue], message, [time timeIntervalSince1970], [read intValue]] UTF8String];
const char *sql = "INSERT INTO chat (localContact, remoteContact, direction, message, time, read) VALUES (@LOCALCONTACT, @REMOTECONTACT, @DIRECTION, @MESSAGE, @TIME, @READ)";
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
if (sqlite3_prepare_v2(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
return;
}
// Prepare statement
sqlite3_bind_text(sqlStatement, 1, [localContact UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_text(sqlStatement, 2, [remoteContact UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_int(sqlStatement, 3, [direction intValue]);
sqlite3_bind_text(sqlStatement, 4, [message UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_double(sqlStatement, 5, [time timeIntervalSince1970]);
sqlite3_bind_int(sqlStatement, 6, [read intValue]);
if (sqlite3_step(sqlStatement) != SQLITE_DONE) {
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
sqlite3_finalize(sqlStatement);
@ -95,14 +103,16 @@
return nil;
}
const char *sql = [[NSString stringWithFormat:@"SELECT id, localContact, remoteContact, direction, message, time, read FROM chat WHERE id=%i",
[chatId intValue]] UTF8String];
const char *sql = "SELECT id, localContact, remoteContact, direction, message, time, read FROM chat WHERE id=@ID";
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
if (sqlite3_prepare_v2(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
return nil;
}
// Prepare statement
sqlite3_bind_int(sqlStatement, 1, [chatId intValue]);
ChatModel* line = nil;
int err = sqlite3_step(sqlStatement);
if (err == SQLITE_ROW) {
@ -124,14 +134,22 @@
return;
}
const char *sql = [[NSString stringWithFormat:@"UPDATE chat SET localContact=\"%@\", remoteContact=\"%@\", direction=%i, message=\"%@\", time=%f, read=%i WHERE id=%i",
localContact, remoteContact, [direction intValue], message, [time timeIntervalSince1970], [read intValue], [chatId intValue]] UTF8String];
const char *sql = "UPDATE chat SET localContact=@LOCALCONTACT, remoteContact=@REMOTECONTACT, direction=@DIRECTION, message=@MESSAGE, time=@TIME, read=@READ WHERE id=@ID";
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
if (sqlite3_prepare_v2(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
return;
}
// Prepare statement
sqlite3_bind_text(sqlStatement, 1, [localContact UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_text(sqlStatement, 2, [remoteContact UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_int(sqlStatement, 3, [direction intValue]);
sqlite3_bind_text(sqlStatement, 4, [message UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_double(sqlStatement, 5, [time timeIntervalSince1970]);
sqlite3_bind_int(sqlStatement, 6, [read intValue]);
sqlite3_bind_int(sqlStatement, 7, [chatId intValue]);
if (sqlite3_step(sqlStatement) != SQLITE_DONE) {
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
sqlite3_finalize(sqlStatement);
@ -148,14 +166,16 @@
return;
}
const char *sql = [[NSString stringWithFormat:@"DELETE FROM chat WHERE id=%i",
[chatId intValue]] UTF8String];
const char *sql = "DELETE FROM chat WHERE id=@ID";
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
if (sqlite3_prepare_v2(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
return;
}
// Prepare statement
sqlite3_bind_int(sqlStatement, 1, [chatId intValue]);
if (sqlite3_step(sqlStatement) != SQLITE_DONE) {
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
sqlite3_finalize(sqlStatement);
@ -178,7 +198,7 @@
const char *sql = "SELECT id, localContact, remoteContact, direction, message, time, read FROM chat GROUP BY remoteContact ORDER BY time DESC";
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
if (sqlite3_prepare_v2(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
[LinphoneLogger logc:LinphoneLoggerError format:"Can't execute the query: %s (%s)", sql, sqlite3_errmsg(database)];
return array;
}
@ -208,14 +228,16 @@
return array;
}
const char *sql = [[NSString stringWithFormat:@"SELECT id, localContact, remoteContact, direction, message, time, read FROM chat WHERE remoteContact=\"%@\" ORDER BY time ASC",
contact] UTF8String];
const char *sql = "SELECT id, localContact, remoteContact, direction, message, time, read FROM chat WHERE remoteContact=@REMOTECONTACT ORDER BY time ASC";
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
if (sqlite3_prepare_v2(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
[LinphoneLogger logc:LinphoneLoggerError format:"Can't execute the query: %s (%s)", sql, sqlite3_errmsg(database)];
return array;
}
// Prepare statement
sqlite3_bind_text(sqlStatement, 1, [contact UTF8String], -1, SQLITE_STATIC);
int err;
while ((err = sqlite3_step(sqlStatement)) == SQLITE_ROW) {
ChatModel *line = [[ChatModel alloc] initWithData:sqlStatement];
@ -240,14 +262,16 @@
return;
}
const char *sql = [[NSString stringWithFormat:@"DELETE FROM chat WHERE remoteContact=\"%@\"",
contact] UTF8String];
const char *sql = "DELETE FROM chat WHERE remoteContact=@REMOTECONTACT";
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
if (sqlite3_prepare_v2(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
return;
}
// Prepare statement
sqlite3_bind_text(sqlStatement, 1, [contact UTF8String], -1, SQLITE_STATIC);
if (sqlite3_step(sqlStatement) != SQLITE_DONE) {
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
sqlite3_finalize(sqlStatement);
@ -265,9 +289,9 @@
return count;
}
const char *sql = [[NSString stringWithFormat:@"SELECT count(*) FROM chat WHERE read=0"] UTF8String];
const char *sql = "SELECT count(*) FROM chat WHERE read=0";
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
if (sqlite3_prepare_v2(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
return count;
}
@ -291,14 +315,16 @@
return;
}
const char *sql = [[NSString stringWithFormat:@"UPDATE chat SET read=1 WHERE remoteContact=\"%@\"",
contact] UTF8String];
const char *sql = "UPDATE chat SET read=1 WHERE remoteContact=@REMOTECONTACT";
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
if (sqlite3_prepare_v2(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
return;
}
// Prepare statement
sqlite3_bind_text(sqlStatement, 1, [contact UTF8String], -1, SQLITE_STATIC);
if (sqlite3_step(sqlStatement) != SQLITE_DONE) {
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
sqlite3_finalize(sqlStatement);

View file

@ -75,6 +75,7 @@ static UICompositeViewDescription *compositeDescription = nil;
- (void)viewDidLoad {
[super viewDidLoad];
settingsController.showDoneButton = FALSE;
settingsController.delegate = self;
settingsController.showCreditsFooter = FALSE;
settingsController.hiddenKeys = [self findHiddenKeys];