diff --git a/Classes/LinphoneManager.m b/Classes/LinphoneManager.m index 2debfe0a2..b17478c0b 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -326,129 +326,6 @@ static int check_should_migrate_images(void *data, int argc, char **argv, char * return 0; } -- (BOOL)migrateChatDBIfNeeded:(LinphoneCore *)lc { - sqlite3 *newDb; - char *errMsg; - NSError *error; - NSString *oldDbPath = [LinphoneManager documentFile:kLinphoneOldChatDBFilename]; - NSString *newDbPath = [LinphoneManager documentFile:kLinphoneInternalChatDBFilename]; - BOOL shouldMigrate = [[NSFileManager defaultManager] fileExistsAtPath:oldDbPath]; - BOOL shouldMigrateImages = FALSE; - const char *identity = NULL; - BOOL migrated = FALSE; - char *attach_stmt = NULL; - LinphoneProxyConfig *default_proxy = linphone_core_get_default_proxy_config(lc); - - if (sqlite3_open([newDbPath UTF8String], &newDb) != SQLITE_OK) { - LOGE(@"Can't open \"%@\" sqlite3 database.", newDbPath); - return FALSE; - } - - const char *check_appdata = - "SELECT url,message FROM history WHERE url LIKE 'assets-library%' OR message LIKE 'assets-library%' LIMIT 1;"; - // will set "needToMigrateImages to TRUE if a result comes by - sqlite3_exec(newDb, check_appdata, check_should_migrate_images, &shouldMigrateImages, NULL); - if (!shouldMigrate && !shouldMigrateImages) { - sqlite3_close(newDb); - return FALSE; - } - - LOGI(@"Starting migration procedure"); - - if (shouldMigrate) { - - // attach old database to the new one: - attach_stmt = sqlite3_mprintf("ATTACH DATABASE %Q AS oldchats", [oldDbPath UTF8String]); - if (sqlite3_exec(newDb, attach_stmt, NULL, NULL, &errMsg) != SQLITE_OK) { - LOGE(@"Can't attach old chat table, error[%s] ", errMsg); - sqlite3_free(errMsg); - goto exit_dbmigration; - } - - // migrate old chats to the new db. The iOS stores timestamp in UTC already, so we can directly put it in the - // 'utc' field and set 'time' to -1 - const char *migration_statement = - "INSERT INTO history (localContact,remoteContact,direction,message,utc,read,status,time) " - "SELECT localContact,remoteContact,direction,message,time,read,state,'-1' FROM oldchats.chat"; - - if (sqlite3_exec(newDb, migration_statement, NULL, NULL, &errMsg) != SQLITE_OK) { - LOGE(@"DB migration failed, error[%s] ", errMsg); - sqlite3_free(errMsg); - goto exit_dbmigration; - } - - // invert direction of old messages, because iOS was storing the direction flag incorrectly - const char *invert_direction = "UPDATE history SET direction = NOT direction"; - if (sqlite3_exec(newDb, invert_direction, NULL, NULL, &errMsg) != SQLITE_OK) { - LOGE(@"Inverting direction failed, error[%s]", errMsg); - sqlite3_free(errMsg); - goto exit_dbmigration; - } - - // replace empty from: or to: by the current identity. - if (default_proxy) { - identity = linphone_proxy_config_get_identity(default_proxy); - } - if (!identity) { - identity = "sip:unknown@sip.linphone.org"; - } - - char *from_conversion = - sqlite3_mprintf("UPDATE history SET localContact = %Q WHERE localContact = ''", identity); - if (sqlite3_exec(newDb, from_conversion, NULL, NULL, &errMsg) != SQLITE_OK) { - LOGE(@"FROM conversion failed, error[%s] ", errMsg); - sqlite3_free(errMsg); - } - sqlite3_free(from_conversion); - - char *to_conversion = - sqlite3_mprintf("UPDATE history SET remoteContact = %Q WHERE remoteContact = ''", identity); - if (sqlite3_exec(newDb, to_conversion, NULL, NULL, &errMsg) != SQLITE_OK) { - LOGE(@"DB migration failed, error[%s] ", errMsg); - sqlite3_free(errMsg); - } - sqlite3_free(to_conversion); - } - - // local image paths were stored in the 'message' field historically. They were - // very temporarily stored in the 'url' field, and now we migrated them to a JSON- - // encoded field. These are the migration steps to migrate them. - - // move already stored images from the messages to the appdata JSON field - const char *assetslib_migration = "UPDATE history SET appdata='{\"localimage\":\"'||message||'\"}' , message='' " - "WHERE message LIKE 'assets-library%'"; - if (sqlite3_exec(newDb, assetslib_migration, NULL, NULL, &errMsg) != SQLITE_OK) { - LOGE(@"Assets-history migration for MESSAGE failed, error[%s] ", errMsg); - sqlite3_free(errMsg); - } - - // move already stored images from the url to the appdata JSON field - const char *assetslib_migration_fromurl = - "UPDATE history SET appdata='{\"localimage\":\"'||url||'\"}' , url='' WHERE url LIKE 'assets-library%'"; - if (sqlite3_exec(newDb, assetslib_migration_fromurl, NULL, NULL, &errMsg) != SQLITE_OK) { - LOGE(@"Assets-history migration for URL failed, error[%s] ", errMsg); - sqlite3_free(errMsg); - } - - // We will lose received messages with remote url, they will be displayed in plain. We can't do much for them.. - migrated = TRUE; - -exit_dbmigration: - - if (attach_stmt) - sqlite3_free(attach_stmt); - - sqlite3_close(newDb); - - // in any case, we should remove the old chat db - if (shouldMigrate && ![[NSFileManager defaultManager] removeItemAtPath:oldDbPath error:&error]) { - LOGE(@"Could not remove old chat DB: %@", error); - } - - LOGI(@"Message storage migration finished: success = %@", migrated ? @"TRUE" : @"FALSE"); - return migrated; -} - - (void)migrateFromUserPrefs { static NSString *migration_flag = @"userpref_migration_done"; @@ -490,14 +367,6 @@ exit_dbmigration: } - (void)migrationLinphoneSettings { - // we need to proceed to the migration *after* the chat database was opened, so that we know it is in consistent - // state - NSString *chatDBFileName = [LinphoneManager documentFile:kLinphoneInternalChatDBFilename]; - if ([self migrateChatDBIfNeeded:theLinphoneCore]) { - // if a migration was performed, we should reinitialize the chat database - linphone_core_set_chat_database_path(theLinphoneCore, [chatDBFileName UTF8String]); - } - /* AVPF migration */ if ([self lpConfigBoolForKey:@"avpf_migration_done"] == FALSE) { const MSList *proxies = linphone_core_get_proxy_config_list(theLinphoneCore); diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index b9fb60650..b2f890fda 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -1631,6 +1631,7 @@ 63FB30341A680E73008CA393 /* UIRoundedImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIRoundedImageView.m; sourceTree = ""; }; 70E542F213E147E3002BA2C0 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; 70E542F413E147EB002BA2C0 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 8C1A1F7C1FA331D40064BE00 /* libsoci_sqlite3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsoci_sqlite3.a; path = "liblinphone-sdk/apple-darwin/lib/libsoci_sqlite3.a"; sourceTree = ""; }; 8C1B67051E671826001EA2FE /* AudioHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioHelper.m; sourceTree = ""; }; 8C1B67081E6718BC001EA2FE /* AudioHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioHelper.h; path = Utils/AudioHelper.h; sourceTree = ""; }; 8C1C42E61E43408E00FE9A91 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/AboutView.strings; sourceTree = ""; }; @@ -1718,6 +1719,8 @@ 8CB2B8F61F86229B0015CEE2 /* chat_secure.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_secure.png; sourceTree = ""; }; 8CB2B8F71F86229C0015CEE2 /* next_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = next_disabled.png; sourceTree = ""; }; 8CB2B8F81F86229D0015CEE2 /* next_disabled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "next_disabled@2x.png"; sourceTree = ""; }; + 8CD0B3BE1FA22CBA008FEB16 /* libsoci_core.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsoci_core.a; path = "liblinphone-sdk/apple-darwin/lib/libsoci_core.a"; sourceTree = ""; }; + 8CD0B3C81FA2357B008FEB16 /* libsqlite3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsqlite3.a; path = "liblinphone-sdk/apple-darwin/lib/libsqlite3.a"; sourceTree = ""; }; 8CDC618C1F84D89B0087CF7F /* check_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = check_selected.png; path = "../../../ressources 27.07.17/check_selected.png"; sourceTree = ""; }; 8CDC61961F84D9270087CF7F /* check_selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "check_selected@2x.png"; path = "../../../ressources 27.07.17/check_selected@2x.png"; sourceTree = ""; }; 8CE24F491F8234A20077AC0A /* next_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = next_default.png; sourceTree = ""; }; @@ -2288,6 +2291,9 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( + 8C1A1F7C1FA331D40064BE00 /* libsoci_sqlite3.a */, + 8CD0B3C81FA2357B008FEB16 /* libsqlite3.a */, + 8CD0B3BE1FA22CBA008FEB16 /* libsoci_core.a */, 8C3EAA191EB8D9C300B732B6 /* linphonetester.framework */, 8C5BCEC61EB3859200A9AAEF /* bctoolbox-tester.framework */, 8C3EA9EF1EB8A78C00B732B6 /* msx264.framework */, diff --git a/submodules/cmake-builder b/submodules/cmake-builder index 99773d23d..ddddd2b3b 160000 --- a/submodules/cmake-builder +++ b/submodules/cmake-builder @@ -1 +1 @@ -Subproject commit 99773d23d71b78c75a8b2eb7ec91e7c3a69777f5 +Subproject commit ddddd2b3bc66604225c26b6cdecaf3c91680deda diff --git a/submodules/externals/soci b/submodules/externals/soci index 908c7eb8f..672c6a8ef 160000 --- a/submodules/externals/soci +++ b/submodules/externals/soci @@ -1 +1 @@ -Subproject commit 908c7eb8f421601e6eb7b77e1131a35bcbe374fa +Subproject commit 672c6a8ef77ffc0725475a826110d13e22dc909d diff --git a/submodules/linphone b/submodules/linphone index d15d7dfc5..a859c185b 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit d15d7dfc52041ee6e983e677735542cbeb63f5a8 +Subproject commit a859c185b5345cc4e05a4e7c4c3367cea5241a72