Skip to content

Commit

Permalink
transaction update, logs
Browse files Browse the repository at this point in the history
  • Loading branch information
strawberrybread authored and Okuro3499 committed Aug 16, 2024
1 parent 578c25c commit 66e37b3
Show file tree
Hide file tree
Showing 4 changed files with 213 additions and 44 deletions.
20 changes: 10 additions & 10 deletions app/src/main/java/org/ole/planet/myplanet/model/RealmMyCourse.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Context.MODE_PRIVATE
import android.content.SharedPreferences
import android.text.TextUtils
import android.util.Base64
import android.util.Log
import com.google.gson.Gson
import com.google.gson.JsonArray
import com.google.gson.JsonObject
Expand Down Expand Up @@ -85,9 +86,10 @@ open class RealmMyCourse : RealmObject() {

@JvmStatic
fun insertMyCourses(userId: String?, myCoursesDoc: JsonObject?, mRealm: Realm) {
context.getSharedPreferences(PREFS_NAME, MODE_PRIVATE)
if (!mRealm.isInTransaction) {
mRealm.beginTransaction()
if(mRealm.isInTransaction) {
Log.e("RealmMyCourse", "insertMyCourses: Transaction is already in progress")
} else{
Log.e("RealmMyCourse", "insertMyCourses: Transaction is not in progress")
}
val id = JsonUtils.getString("_id", myCoursesDoc)
var myMyCoursesDB = mRealm.where(RealmMyCourse::class.java).equalTo("id", id).findFirst()
Expand Down Expand Up @@ -136,15 +138,9 @@ open class RealmMyCourse : RealmObject() {
courseStepsList.add(step)
}

if (mRealm.isInTransaction) {
mRealm.commitTransaction()
}

if (!mRealm.isInTransaction) {
mRealm.beginTransaction()
}
myMyCoursesDB?.courseSteps = RealmList()
myMyCoursesDB?.courseSteps?.addAll(courseStepsList)

mRealm.commitTransaction()

val csvRow = arrayOf(
Expand Down Expand Up @@ -291,7 +287,11 @@ open class RealmMyCourse : RealmObject() {

@JvmStatic
fun insert(mRealm: Realm, myCoursesDoc: JsonObject?) {
if (!mRealm.isInTransaction) {
mRealm.beginTransaction()
}
insertMyCourses("", myCoursesDoc, mRealm)
mRealm.commitTransaction()
}

@JvmStatic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.ole.planet.myplanet.model
import android.content.Context
import android.content.SharedPreferences
import android.text.TextUtils
import android.util.Log
import com.google.gson.JsonArray
import com.google.gson.JsonNull
import com.google.gson.JsonObject
Expand Down Expand Up @@ -335,7 +336,11 @@ open class RealmMyLibrary : RealmObject() {

@JvmStatic
fun insertMyLibrary(userId: String?, doc: JsonObject, mRealm: Realm) {
if (!mRealm.isInTransaction) {
mRealm.beginTransaction()
}
insertMyLibrary(userId, "", "", doc, mRealm)
mRealm.commitTransaction()
}

@JvmStatic
Expand All @@ -349,8 +354,10 @@ open class RealmMyLibrary : RealmObject() {

@JvmStatic
fun insertMyLibrary(userId: String?, stepId: String?, courseId: String?, doc: JsonObject, mRealm: Realm) {
if (!mRealm.isInTransaction) {
mRealm.beginTransaction()
if(mRealm.isInTransaction) {
Log.e("RealmMyLibrary", "insertMyLibrary: Transaction is already in progress")
} else{
Log.e("RealmMyLibrary", "insertMyLibrary: Transaction is not in progress")
}
val resourceId = JsonUtils.getString("_id", doc)
val settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
Expand Down
222 changes: 190 additions & 32 deletions app/src/main/java/org/ole/planet/myplanet/service/SyncManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.content.SharedPreferences
import android.net.wifi.SupplicantState
import android.net.wifi.WifiManager
import android.text.TextUtils
import android.util.Log
import com.google.gson.Gson
import com.google.gson.JsonArray
import com.google.gson.JsonNull
Expand Down Expand Up @@ -86,6 +87,47 @@ class SyncManager private constructor(private val context: Context) {
td?.start()
}

// private fun startSync() {
// try {
// val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
// val wifiInfo = wifiManager.connectionInfo
// if (wifiInfo.supplicantState == SupplicantState.COMPLETED) {
// settings.edit().putString("LastWifiSSID", wifiInfo.ssid).apply()
// }
// isSyncing = true
// create(context, R.mipmap.ic_launcher, " Syncing data", "Please wait...")
// mRealm = dbService.realmInstance
// TransactionSyncManager.syncDb(mRealm, "tablet_users")
// myLibraryTransactionSync()
// TransactionSyncManager.syncDb(mRealm, "courses")
// TransactionSyncManager.syncDb(mRealm, "exams")
// TransactionSyncManager.syncDb(mRealm, "ratings")
// TransactionSyncManager.syncDb(mRealm, "courses_progress")
// TransactionSyncManager.syncDb(mRealm, "achievements")
// TransactionSyncManager.syncDb(mRealm, "tags")
// TransactionSyncManager.syncDb(mRealm, "submissions")
// TransactionSyncManager.syncDb(mRealm, "news")
// TransactionSyncManager.syncDb(mRealm, "feedback")
// TransactionSyncManager.syncDb(mRealm, "teams")
// TransactionSyncManager.syncDb(mRealm, "tasks")
// TransactionSyncManager.syncDb(mRealm, "login_activities")
// TransactionSyncManager.syncDb(mRealm, "meetups")
// TransactionSyncManager.syncDb(mRealm, "health")
// TransactionSyncManager.syncDb(mRealm, "certifications")
// TransactionSyncManager.syncDb(mRealm, "team_activities")
// TransactionSyncManager.syncDb(mRealm, "chat_history")
// ManagerSync.instance?.syncAdmin()
// resourceTransactionSync()
// onSynced(mRealm, settings)
// mRealm.close()
// } catch (err: Exception) {
// err.printStackTrace()
// handleException(err.message)
// } finally {
// destroy()
// }
// }

private fun startSync() {
try {
val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
Expand All @@ -96,28 +138,33 @@ class SyncManager private constructor(private val context: Context) {
isSyncing = true
create(context, R.mipmap.ic_launcher, " Syncing data", "Please wait...")
mRealm = dbService.realmInstance
TransactionSyncManager.syncDb(mRealm, "tablet_users")
Log.d("SyncManager", "Syncing tablet_users")
syncDb("tablet_users")
Log.d("SyncManager", "Syncing my library")
myLibraryTransactionSync()
TransactionSyncManager.syncDb(mRealm, "courses")
TransactionSyncManager.syncDb(mRealm, "exams")
TransactionSyncManager.syncDb(mRealm, "ratings")
TransactionSyncManager.syncDb(mRealm, "courses_progress")
TransactionSyncManager.syncDb(mRealm, "achievements")
TransactionSyncManager.syncDb(mRealm, "tags")
TransactionSyncManager.syncDb(mRealm, "submissions")
TransactionSyncManager.syncDb(mRealm, "news")
TransactionSyncManager.syncDb(mRealm, "feedback")
TransactionSyncManager.syncDb(mRealm, "teams")
TransactionSyncManager.syncDb(mRealm, "tasks")
TransactionSyncManager.syncDb(mRealm, "login_activities")
TransactionSyncManager.syncDb(mRealm, "meetups")
TransactionSyncManager.syncDb(mRealm, "health")
TransactionSyncManager.syncDb(mRealm, "certifications")
TransactionSyncManager.syncDb(mRealm, "team_activities")
TransactionSyncManager.syncDb(mRealm, "chat_history")
syncDb("courses")
syncDb("exams")
syncDb("ratings")
syncDb("courses_progress")
syncDb("achievements")
syncDb("tags")
syncDb("submissions")
syncDb("news")
syncDb("feedback")
syncDb("teams")
syncDb("tasks")
syncDb("login_activities")
syncDb("meetups")
syncDb("health")
syncDb("certifications")
syncDb("team_activities")
syncDb("chat_history")
ManagerSync.instance?.syncAdmin()
Log.d("SyncManager", "Syncing resources")
resourceTransactionSync()
Log .d("SyncManager", "Before OnSynced")
onSynced(mRealm, settings)
Log.d("SyncManager", "After OnSynced")
mRealm.close()
} catch (err: Exception) {
err.printStackTrace()
Expand All @@ -127,6 +174,19 @@ class SyncManager private constructor(private val context: Context) {
}
}

private fun syncDb(dbName: String) {
Log.d("SyncManager", "Starting transaction for $dbName")
mRealm.beginTransaction()
try {
TransactionSyncManager.syncDb(mRealm, dbName)
Log.d("SyncManager", "Transaction committed for $dbName")
mRealm.commitTransaction()
} catch (e: Exception) {
mRealm.cancelTransaction()
Log.e("SyncManager", "Error syncing $dbName: ${e.message}")
}
}

private fun handleException(message: String?) {
if (listener != null) {
isSyncing = false
Expand All @@ -136,6 +196,7 @@ class SyncManager private constructor(private val context: Context) {
}

private fun resourceTransactionSync() {
Log.d("SyncManager", "Starting resource transaction")
val apiInterface = client?.create(ApiInterface::class.java)
try {
syncResource(apiInterface)
Expand All @@ -146,6 +207,7 @@ class SyncManager private constructor(private val context: Context) {

@Throws(IOException::class)
private fun syncResource(dbClient: ApiInterface?) {
Log.d("SyncManager", "Syncing resources")
val newIds: MutableList<String?> = ArrayList()
val allDocs = dbClient?.getJsonObject(Utilities.header, Utilities.getUrl() + "/resources/_all_docs?include_doc=false")
val all = allDocs?.execute()
Expand All @@ -169,32 +231,36 @@ class SyncManager private constructor(private val context: Context) {
}

private fun myLibraryTransactionSync() {
Log.d("SyncManager", "Starting my library transaction")
val apiInterface = client?.create(ApiInterface::class.java)
try {
val res = apiInterface?.getDocuments(Utilities.header, Utilities.getUrl() + "/shelf/_all_docs")?.execute()?.body()
for (i in res?.rows!!.indices) {
shelfDoc = res.rows!![i]
res?.rows?.forEach { row ->
shelfDoc = row
populateShelfItems(apiInterface)
}
} catch (e: IOException) {
e.printStackTrace()
Log.e("SyncManager", "Error in myLibraryTransactionSync: ${e.message}")
}
}

private fun populateShelfItems(apiInterface: ApiInterface) {
Log.d("SyncManager", "Populating shelf items")
try {
val jsonDoc = apiInterface.getJsonObject(Utilities.header, Utilities.getUrl() + "/shelf/" + shelfDoc?.id).execute().body()
for (i in Constants.shelfDataList.indices) {
val shelfData = Constants.shelfDataList[i]
Constants.shelfDataList.forEach { shelfData ->
val array = getJsonArray(shelfData.key, jsonDoc)
memberShelfData(array, shelfData)
}
} catch (err: Exception) {
err.printStackTrace()
Log.e("SyncManager", "Error in populateShelfItems: ${err.message}")
}
}

private fun memberShelfData(array: JsonArray, shelfData: ShelfData) {
Log.d("SyncManager", "Processing shelf data")
if (array.size() > 0) {
triggerInsert(shelfData.categoryKey, shelfData.type)
check(array)
Expand Down Expand Up @@ -223,26 +289,118 @@ class SyncManager private constructor(private val context: Context) {
resourceDoc?.let { triggerInsert(stringArray, it) }
} catch (e: IOException) {
e.printStackTrace()
Log.e("SyncManager", "Error in validateDocument: ${e.message}")
}
}

// private fun triggerInsert(stringArray: Array<String?>, resourceDoc: JsonObject) {
// when (stringArray[2]) {
// "resources" -> insertMyLibrary(stringArray[0], resourceDoc, mRealm)
// "meetups" -> insert(mRealm, resourceDoc)
// "courses" -> {
// if (!mRealm.isInTransaction){
// mRealm.beginTransaction()
// }
// insertMyCourses(stringArray[0], resourceDoc, mRealm)
// if (mRealm.isInTransaction){
// mRealm.commitTransaction()
// }
// }
// "teams" -> insertMyTeams(resourceDoc, mRealm)
// }
// saveConcatenatedLinksToPrefs()
// }

private fun triggerInsert(stringArray: Array<String?>, resourceDoc: JsonObject) {
when (stringArray[2]) {
"resources" -> insertMyLibrary(stringArray[0], resourceDoc, mRealm)
"meetups" -> insert(mRealm, resourceDoc)
"courses" -> {
if (!mRealm.isInTransaction){
mRealm.beginTransaction()
val realm = Realm.getDefaultInstance()
try {
// Start transaction if not already in progress
if (!realm.isInTransaction) {
realm.beginTransaction()
Log.d("SyncManager", "Transaction started for ${stringArray[2]}")
} else {
Log.e("SyncManager", "Transaction already in progress for ${stringArray[2]}")
}

// Perform insertion based on category
when (stringArray[2]) {
"resources" -> {
insertMyLibrary(stringArray[0], resourceDoc, realm)
}
"meetups" -> {
insert(realm, resourceDoc)
}
"courses" -> {
insertMyCourses(stringArray[0], resourceDoc, realm)
}
insertMyCourses(stringArray[0], resourceDoc, mRealm)
if (mRealm.isInTransaction){
mRealm.commitTransaction()
"teams" -> {
insertMyTeams(resourceDoc, realm)
}
}
"teams" -> insertMyTeams(resourceDoc, mRealm)

// Commit transaction if it is still in progress
if (realm.isInTransaction) {
realm.commitTransaction()
Log.d("SyncManager", "Transaction committed for ${stringArray[2]}")
} else {
Log.e("SyncManager", "No transaction in progress to commit for ${stringArray[2]}")
}
} catch (e: Exception) {
// Cancel transaction if an exception occurs and transaction is in progress
if (realm.isInTransaction) {
realm.cancelTransaction()
Log.e("SyncManager", "Transaction canceled for ${stringArray[2]}: ${e.message}")
}
Log.e("SyncManager", "Error inserting into ${stringArray[2]}: ${e.message}")
} finally {
realm.close()
}
saveConcatenatedLinksToPrefs()
}
// when (stringArray[2]) {
// "resources" -> {
// mRealm.beginTransaction()
// try {
// insertMyLibrary(stringArray[0], resourceDoc, mRealm)
// mRealm.commitTransaction()
// } catch (e: Exception) {
// mRealm.cancelTransaction()
// Log.e("SyncManager", "Error inserting into resources: ${e.message}")
// }
// }
// "meetups" -> {
// mRealm.beginTransaction()
// try {
// insert(mRealm, resourceDoc)
// mRealm.commitTransaction()
// } catch (e: Exception) {
// mRealm.cancelTransaction()
// Log.e("SyncManager", "Error inserting into meetups: ${e.message}")
// }
// }
// "courses" -> {
// mRealm.beginTransaction()
// try {
// insertMyCourses(stringArray[0], resourceDoc, mRealm)
// mRealm.commitTransaction()
// } catch (e: Exception) {
// mRealm.cancelTransaction()
// Log.e("SyncManager", "Error inserting into courses: ${e.message}")
// }
// }
// "teams" -> {
// mRealm.beginTransaction()
// try {
// insertMyTeams(resourceDoc, mRealm)
// mRealm.commitTransaction()
// } catch (e: Exception) {
// mRealm.cancelTransaction()
// Log.e("SyncManager", "Error inserting into teams: ${e.message}")
// }
// }
// }
// saveConcatenatedLinksToPrefs()
// }

companion object {
private var ourInstance: SyncManager? = null
Expand Down
Loading

0 comments on commit 66e37b3

Please sign in to comment.