Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
AloqaIM-Android
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
AloqaIM-Android
Commits
f6429d6f
Commit
f6429d6f
authored
Mar 24, 2018
by
Leonardo Aramaki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement fetch info from old Realm files
parent
c3a2d172
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
325 additions
and
0 deletions
+325
-0
RocketChatApplication.kt
...ain/java/chat/rocket/android/app/RocketChatApplication.kt
+119
-0
RealmMigration.kt
.../java/chat/rocket/android/app/migration/RealmMigration.kt
+59
-0
RocketChatLibraryModule.kt
...t/rocket/android/app/migration/RocketChatLibraryModule.kt
+6
-0
RocketChatServerModule.kt
...at/rocket/android/app/migration/RocketChatServerModule.kt
+7
-0
RealmBasedServerInfo.kt
...ocket/android/app/migration/model/RealmBasedServerInfo.kt
+12
-0
RealmEmail.kt
...ava/chat/rocket/android/app/migration/model/RealmEmail.kt
+12
-0
RealmPreferences.kt
...at/rocket/android/app/migration/model/RealmPreferences.kt
+40
-0
RealmPublicSetting.kt
.../rocket/android/app/migration/model/RealmPublicSetting.kt
+20
-0
RealmSettings.kt
.../chat/rocket/android/app/migration/model/RealmSettings.kt
+12
-0
RealmUser.kt
...java/chat/rocket/android/app/migration/model/RealmUser.kt
+38
-0
No files found.
app/src/main/java/chat/rocket/android/app/RocketChatApplication.kt
View file @
f6429d6f
...
...
@@ -3,7 +3,14 @@ package chat.rocket.android.app
import
android.app.Activity
import
android.app.Application
import
android.app.Service
import
android.content.Context
import
chat.rocket.android.BuildConfig
import
chat.rocket.android.app.migration.RealmMigration
import
chat.rocket.android.app.migration.RocketChatLibraryModule
import
chat.rocket.android.app.migration.RocketChatServerModule
import
chat.rocket.android.app.migration.model.RealmBasedServerInfo
import
chat.rocket.android.app.migration.model.RealmPublicSetting
import
chat.rocket.android.app.migration.model.RealmUser
import
chat.rocket.android.dagger.DaggerAppComponent
import
chat.rocket.android.helper.CrashlyticsTree
import
chat.rocket.android.server.domain.GetCurrentServerInteractor
...
...
@@ -12,6 +19,7 @@ import chat.rocket.android.server.domain.SettingsRepository
import
chat.rocket.android.widget.emoji.EmojiRepository
import
chat.rocket.common.model.Token
import
chat.rocket.core.TokenRepository
import
chat.rocket.core.model.Value
import
com.crashlytics.android.Crashlytics
import
com.crashlytics.android.core.CrashlyticsCore
import
com.facebook.drawee.backends.pipeline.DraweeConfig
...
...
@@ -23,9 +31,12 @@ import dagger.android.DispatchingAndroidInjector
import
dagger.android.HasActivityInjector
import
dagger.android.HasServiceInjector
import
io.fabric.sdk.android.Fabric
import
io.realm.Realm
import
io.realm.RealmConfiguration
import
timber.log.Timber
import
javax.inject.Inject
class
RocketChatApplication
:
Application
(),
HasActivityInjector
,
HasServiceInjector
{
@Inject
...
...
@@ -63,6 +74,114 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
setupCrashlytics
()
setupFresco
()
setupTimber
()
setupMigration
()
}
private
fun
setupMigration
()
{
Realm
.
init
(
this
)
val
serveListConfiguration
=
RealmConfiguration
.
Builder
()
.
name
(
"server.list.realm"
)
.
schemaVersion
(
6
)
.
migration
(
RealmMigration
())
.
modules
(
RocketChatServerModule
())
.
build
()
val
serverRealm
=
Realm
.
getInstance
(
serveListConfiguration
)
val
serversInfoList
=
serverRealm
.
where
(
RealmBasedServerInfo
::
class
.
java
).
findAll
().
toList
()
serversInfoList
.
forEach
{
server
->
val
hostname
=
server
.
hostname
val
authToken
=
server
.
session
val
url
=
if
(
server
.
insecure
)
"http://$hostname"
else
"https://$hostname"
val
serverLogo
=
"$url/images/logo/android-chrome-192x192.png"
val
serverBg
=
"$url/images/logo/mstile-310x150.png"
val
config
=
RealmConfiguration
.
Builder
()
.
name
(
"${server.hostname}.realm"
)
.
schemaVersion
(
6
)
.
migration
(
RealmMigration
())
.
modules
(
RocketChatLibraryModule
())
.
build
()
val
realm
=
Realm
.
getInstance
(
config
)
val
user
=
realm
.
where
(
RealmUser
::
class
.
java
)
.
isNotEmpty
(
RealmUser
.
EMAILS
).
findFirst
()
if
(
user
!=
null
)
{
migrateServerInfo
(
url
,
authToken
!!
,
serverLogo
,
serverBg
,
user
)
}
migratePublicSettings
(
url
,
realm
)
realm
.
close
()
}
migrateCurrentServer
(
serversInfoList
)
serverRealm
.
close
()
}
private
fun
migrateServerInfo
(
url
:
String
,
authToken
:
String
,
serverLogo
:
String
,
serverBg
:
String
,
user
:
RealmUser
)
{
val
userId
=
user
.
_id
val
avatar
=
"$url/avatar/${user.username}?format=jpeg"
println
(
"token_$url: "
)
println
(
"{\n"
+
" userId: $userId,\n"
+
" authToken: $authToken\n"
+
"}"
)
println
(
"ACCOUNT_KEY: "
)
println
(
"{\n"
+
" serverUrl: $url,\n"
+
" avatar: $avatar,\n"
+
" serverLogo: $serverLogo,\n"
+
" serverBg: $serverBg\n"
+
"}"
)
}
private
fun
migratePublicSettings
(
url
:
String
,
realm
:
Realm
)
{
println
(
"settings_$url: "
)
val
settings
=
realm
.
where
(
RealmPublicSetting
::
class
.
java
).
findAll
()
val
serverSettings
=
hashMapOf
<
String
,
Value
<
Any
>>()
settings
.
toList
().
forEach
{
setting
->
val
type
=
setting
.
type
!!
val
value
=
setting
.
value
!!
val
convertedSetting
=
when
(
type
)
{
"string"
->
Value
(
value
)
"language"
->
Value
(
value
)
"boolean"
->
Value
(
value
.
toBoolean
())
"int"
->
try
{
Value
(
value
.
toInt
())
}
catch
(
ex
:
NumberFormatException
)
{
Value
(
0
)
}
else
->
null
// ignore
}
if
(
convertedSetting
!=
null
)
{
val
id
=
setting
.
_id
!!
serverSettings
.
put
(
setting
.
_id
!!
,
convertedSetting
)
println
(
"$id: $convertedSetting"
)
}
}
}
private
fun
migrateCurrentServer
(
serversList
:
List
<
RealmBasedServerInfo
>)
{
var
currentServer
=
getSharedPreferences
(
"cache"
,
Context
.
MODE_PRIVATE
)
.
getString
(
"KEY_SELECTED_SERVER_HOSTNAME"
,
null
)
currentServer
=
if
(
serversList
.
toList
().
isNotEmpty
())
{
val
server
=
serversList
.
find
{
it
.
hostname
==
currentServer
}
val
hostname
=
server
!!
.
hostname
if
(
server
.
insecure
)
{
"http://$hostname"
}
else
{
"https://$hostname"
}
}
else
{
"http://$currentServer"
}
println
(
"current_server: $currentServer"
)
}
// TODO - remove this when we have a proper service handling connection...
...
...
app/src/main/java/chat/rocket/android/app/migration/RealmMigration.kt
0 → 100644
View file @
f6429d6f
package
chat.rocket.android.app.migration
import
chat.rocket.android.BuildConfig
import
chat.rocket.android.app.migration.model.RealmUser
import
io.realm.DynamicRealm
import
io.realm.RealmMigration
class
RealmMigration
:
RealmMigration
{
override
fun
migrate
(
dynamicRealm
:
DynamicRealm
,
oldVersion
:
Long
,
newVersion
:
Long
)
{
var
oldVersion
=
oldVersion
val
schema
=
dynamicRealm
.
schema
if
(
oldVersion
==
0L
)
{
// NOOP
oldVersion
++
}
if
(
oldVersion
==
1L
)
{
oldVersion
++
}
if
(
oldVersion
==
2L
)
{
oldVersion
++
}
if
(
oldVersion
==
3L
)
{
oldVersion
++
}
if
(
oldVersion
==
4L
)
{
oldVersion
++
}
if
(
oldVersion
==
5L
)
{
val
userSchema
=
schema
.
get
(
"RealmUser"
)
try
{
userSchema
!!
.
addField
(
RealmUser
.
NAME
,
String
::
class
.
java
)
}
catch
(
e
:
IllegalArgumentException
)
{
if
(
BuildConfig
.
DEBUG
)
{
e
.
printStackTrace
()
}
// ignore; it makes here if the schema for this model was already update before without migration
}
}
}
// hack around to avoid "new different configuration cannot access the same file" error
override
fun
hashCode
():
Int
{
return
37
}
override
fun
equals
(
o
:
Any
?):
Boolean
{
return
o
is
chat
.
rocket
.
android
.
app
.
migration
.
RealmMigration
}
// end hack
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/RocketChatLibraryModule.kt
0 → 100644
View file @
f6429d6f
package
chat.rocket.android.app.migration
import
io.realm.annotations.RealmModule
@RealmModule
(
library
=
true
,
allClasses
=
true
)
class
RocketChatLibraryModule
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/RocketChatServerModule.kt
0 → 100644
View file @
f6429d6f
package
chat.rocket.android.app.migration
import
chat.rocket.android.app.migration.model.RealmBasedServerInfo
import
io.realm.annotations.RealmModule
@RealmModule
(
library
=
true
,
classes
=
arrayOf
(
RealmBasedServerInfo
::
class
))
class
RocketChatServerModule
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmBasedServerInfo.kt
0 → 100644
View file @
f6429d6f
package
chat.rocket.android.app.migration.model
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmBasedServerInfo
:
RealmObject
()
{
@PrimaryKey
@JvmField
var
hostname
:
String
?
=
null
@JvmField
var
name
:
String
?
=
null
@JvmField
var
session
:
String
?
=
null
@JvmField
var
insecure
:
Boolean
=
false
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmEmail.kt
0 → 100644
View file @
f6429d6f
package
chat.rocket.android.app.migration.model
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmEmail
:
RealmObject
()
{
@PrimaryKey
@JvmField
var
address
:
String
?
=
null
@JvmField
var
verified
:
Boolean
=
false
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmPreferences.kt
0 → 100644
View file @
f6429d6f
package
chat.rocket.android.app.migration.model
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmPreferences
:
RealmObject
()
{
@PrimaryKey
@JvmField
var
id
:
String
?
=
null
@JvmField
var
newRoomNotification
:
String
?
=
null
@JvmField
var
newMessageNotification
:
String
?
=
null
@JvmField
var
useEmojis
:
Boolean
=
false
@JvmField
var
convertAsciiEmoji
:
Boolean
=
false
@JvmField
var
saveMobileBandwidth
:
Boolean
=
false
@JvmField
var
collapseMediaByDefault
:
Boolean
=
false
@JvmField
var
unreadRoomsMode
:
Boolean
=
false
@JvmField
var
autoImageLoad
:
Boolean
=
false
@JvmField
var
emailNotificationMode
:
String
?
=
null
@JvmField
var
unreadAlert
:
Boolean
=
false
@JvmField
var
desktopNotificationDuration
:
Int
=
0
@JvmField
var
viewMode
:
Int
=
0
@JvmField
var
hideUsernames
:
Boolean
=
false
@JvmField
var
hideAvatars
:
Boolean
=
false
@JvmField
var
hideFlexTab
:
Boolean
=
false
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmPublicSetting.kt
0 → 100644
View file @
f6429d6f
package
chat.rocket.android.app.migration.model
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmPublicSetting
:
RealmObject
()
{
@PrimaryKey
@JvmField
var
_id
:
String
?
=
null
@JvmField
var
group
:
String
?
=
null
@JvmField
var
type
:
String
?
=
null
@JvmField
var
value
:
String
?
=
null
@JvmField
var
_updatedAt
:
Long
=
0
@JvmField
var
meta
:
String
?
=
null
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmSettings.kt
0 → 100644
View file @
f6429d6f
package
chat.rocket.android.app.migration.model
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmSettings
:
RealmObject
()
{
@PrimaryKey
@JvmField
var
id
:
String
?
=
null
@JvmField
var
preferences
:
RealmPreferences
?
=
null
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmUser.kt
0 → 100644
View file @
f6429d6f
package
chat.rocket.android.app.migration.model
import
io.realm.RealmList
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmUser
:
RealmObject
()
{
companion
object
{
const
val
ID
=
"_id"
const
val
NAME
=
"name"
const
val
USERNAME
=
"username"
const
val
STATUS
=
"status"
const
val
UTC_OFFSET
=
"utcOffset"
const
val
EMAILS
=
"emails"
const
val
SETTINGS
=
"settings"
const
val
STATUS_ONLINE
=
"online"
const
val
STATUS_BUSY
=
"busy"
const
val
STATUS_AWAY
=
"away"
const
val
STATUS_OFFLINE
=
"offline"
}
@PrimaryKey
@JvmField
var
_id
:
String
?
=
null
@JvmField
var
name
:
String
?
=
null
@JvmField
var
username
:
String
?
=
null
@JvmField
var
status
:
String
?
=
null
@JvmField
var
utcOffset
:
Double
=
0
.
toDouble
()
@JvmField
var
emails
:
RealmList
<
RealmEmail
>?
=
null
@JvmField
var
settings
:
RealmSettings
?
=
null
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment