From 051401abeaa1b92a57250402df73be3aa54d178d Mon Sep 17 00:00:00 2001 From: Vivian Li Date: Thu, 25 Jul 2024 09:19:39 -0400 Subject: [PATCH] update --- .../planet/myplanet/model/RealmMyCourse.kt | 108 +++++++------- .../planet/myplanet/model/RealmMyLibrary.kt | 116 +++++++-------- .../planet/myplanet/service/SyncManager.kt | 133 +++--------------- 3 files changed, 139 insertions(+), 218 deletions(-) diff --git a/app/src/main/java/org/ole/planet/myplanet/model/RealmMyCourse.kt b/app/src/main/java/org/ole/planet/myplanet/model/RealmMyCourse.kt index 8e5a9870ee..32e1776d06 100644 --- a/app/src/main/java/org/ole/planet/myplanet/model/RealmMyCourse.kt +++ b/app/src/main/java/org/ole/planet/myplanet/model/RealmMyCourse.kt @@ -81,61 +81,65 @@ open class RealmMyCourse : RealmObject() { @JvmStatic fun insertMyCourses(userId: String?, myCousesDoc: JsonObject?, mRealm: Realm) { - if(mRealm.isInTransaction) { - Log.e("RealmMyCourse", "insertMyCourses: Transaction is already in progress") - } else{ - Log.e("RealmMyCourse", "insertMyCourses: Transaction is not in progress") - } - val settings: SharedPreferences = context.getSharedPreferences(PREFS_NAME, MODE_PRIVATE) - val id = JsonUtils.getString("_id", myCousesDoc) - var myMyCoursesDB = mRealm.where(RealmMyCourse::class.java).equalTo("id", id).findFirst() - if (myMyCoursesDB == null) { - myMyCoursesDB = mRealm.createObject(RealmMyCourse::class.java, id) - } - myMyCoursesDB?.setUserId(userId) - myMyCoursesDB?.courseId = JsonUtils.getString("_id", myCousesDoc) - myMyCoursesDB?.course_rev = JsonUtils.getString("_rev", myCousesDoc) - myMyCoursesDB?.languageOfInstruction = JsonUtils.getString("languageOfInstruction", myCousesDoc) - myMyCoursesDB?.courseTitle = JsonUtils.getString("courseTitle", myCousesDoc) - myMyCoursesDB?.memberLimit = JsonUtils.getInt("memberLimit", myCousesDoc) - myMyCoursesDB?.description = JsonUtils.getString("description", myCousesDoc) - val description = JsonUtils.getString("description", myCousesDoc) - val links = extractLinks(description) - val baseUrl = Utilities.getUrl() - for (link in links) { - val concatenatedLink = "$baseUrl/$link" - concatenatedLinks.add(concatenatedLink) - } - myMyCoursesDB?.method = JsonUtils.getString("method", myCousesDoc) - myMyCoursesDB?.gradeLevel = JsonUtils.getString("gradeLevel", myCousesDoc) - myMyCoursesDB?.subjectLevel = JsonUtils.getString("subjectLevel", myCousesDoc) - myMyCoursesDB?.createdDate = JsonUtils.getLong("createdDate", myCousesDoc) - myMyCoursesDB?.setnumberOfSteps(JsonUtils.getJsonArray("steps", myCousesDoc).size()) - val courseStepsJsonArray = JsonUtils.getJsonArray("steps", myCousesDoc) - val courseStepsList = mutableListOf() - - for (i in 0 until courseStepsJsonArray.size()) { - val step_id = Base64.encodeToString(courseStepsJsonArray[i].toString().toByteArray(), Base64.NO_WRAP) - val stepJson = courseStepsJsonArray[i].asJsonObject - val step = RealmCourseStep() - step.id = step_id - step.stepTitle = JsonUtils.getString("stepTitle", stepJson) - step.description = JsonUtils.getString("description", stepJson) - val stepDescription = JsonUtils.getString("description", stepJson) - val stepLinks = extractLinks(stepDescription) - for (stepLink in stepLinks) { - val concatenatedLink = "$baseUrl/$stepLink" + try{ + if(!mRealm.isInTransaction) { + return + } + val settings: SharedPreferences = context.getSharedPreferences(PREFS_NAME, MODE_PRIVATE) + val id = JsonUtils.getString("_id", myCousesDoc) + var myMyCoursesDB = mRealm.where(RealmMyCourse::class.java).equalTo("id", id).findFirst() + if (myMyCoursesDB == null) { + myMyCoursesDB = mRealm.createObject(RealmMyCourse::class.java, id) + } + myMyCoursesDB?.setUserId(userId) + myMyCoursesDB?.courseId = JsonUtils.getString("_id", myCousesDoc) + myMyCoursesDB?.course_rev = JsonUtils.getString("_rev", myCousesDoc) + myMyCoursesDB?.languageOfInstruction = JsonUtils.getString("languageOfInstruction", myCousesDoc) + myMyCoursesDB?.courseTitle = JsonUtils.getString("courseTitle", myCousesDoc) + myMyCoursesDB?.memberLimit = JsonUtils.getInt("memberLimit", myCousesDoc) + myMyCoursesDB?.description = JsonUtils.getString("description", myCousesDoc) + val description = JsonUtils.getString("description", myCousesDoc) + val links = extractLinks(description) + val baseUrl = Utilities.getUrl() + for (link in links) { + val concatenatedLink = "$baseUrl/$link" concatenatedLinks.add(concatenatedLink) } - insertCourseStepsAttachments(myMyCoursesDB?.courseId, step_id, JsonUtils.getJsonArray("resources", stepJson), mRealm) - insertExam(stepJson, mRealm, step_id, i + 1, myMyCoursesDB?.courseId) - step.noOfResources = JsonUtils.getJsonArray("resources", stepJson).size() - step.courseId = myMyCoursesDB?.courseId - courseStepsList.add(step) - } + myMyCoursesDB?.method = JsonUtils.getString("method", myCousesDoc) + myMyCoursesDB?.gradeLevel = JsonUtils.getString("gradeLevel", myCousesDoc) + myMyCoursesDB?.subjectLevel = JsonUtils.getString("subjectLevel", myCousesDoc) + myMyCoursesDB?.createdDate = JsonUtils.getLong("createdDate", myCousesDoc) + myMyCoursesDB?.setnumberOfSteps(JsonUtils.getJsonArray("steps", myCousesDoc).size()) + val courseStepsJsonArray = JsonUtils.getJsonArray("steps", myCousesDoc) + val courseStepsList = mutableListOf() + + for (i in 0 until courseStepsJsonArray.size()) { + val step_id = Base64.encodeToString(courseStepsJsonArray[i].toString().toByteArray(), Base64.NO_WRAP) + val stepJson = courseStepsJsonArray[i].asJsonObject + val step = RealmCourseStep() + step.id = step_id + step.stepTitle = JsonUtils.getString("stepTitle", stepJson) + step.description = JsonUtils.getString("description", stepJson) + val stepDescription = JsonUtils.getString("description", stepJson) + val stepLinks = extractLinks(stepDescription) + for (stepLink in stepLinks) { + val concatenatedLink = "$baseUrl/$stepLink" + concatenatedLinks.add(concatenatedLink) + } + insertCourseStepsAttachments(myMyCoursesDB?.courseId, step_id, JsonUtils.getJsonArray("resources", stepJson), mRealm) + insertExam(stepJson, mRealm, step_id, i + 1, myMyCoursesDB?.courseId) + step.noOfResources = JsonUtils.getJsonArray("resources", stepJson).size() + step.courseId = myMyCoursesDB?.courseId + courseStepsList.add(step) + } + + myMyCoursesDB?.courseSteps = RealmList() + myMyCoursesDB?.courseSteps?.addAll(courseStepsList) - myMyCoursesDB?.courseSteps = RealmList() - myMyCoursesDB?.courseSteps?.addAll(courseStepsList) + } catch (e: Exception) { + Log.e("RealmMyCourse", "Error during insertion into courses: ${e.message}") + throw e + } } private fun extractLinks(text: String?): ArrayList { diff --git a/app/src/main/java/org/ole/planet/myplanet/model/RealmMyLibrary.kt b/app/src/main/java/org/ole/planet/myplanet/model/RealmMyLibrary.kt index b74da4c147..48164fb255 100644 --- a/app/src/main/java/org/ole/planet/myplanet/model/RealmMyLibrary.kt +++ b/app/src/main/java/org/ole/planet/myplanet/model/RealmMyLibrary.kt @@ -353,65 +353,69 @@ open class RealmMyLibrary : RealmObject() { @JvmStatic fun insertMyLibrary(userId: String?, stepId: String?, courseId: String?, doc: JsonObject, mRealm: Realm) { - 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 = MainApplication.context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) - var resource = mRealm.where(RealmMyLibrary::class.java).equalTo("id", resourceId).findFirst() - if (resource == null) { - resource = mRealm.createObject(RealmMyLibrary::class.java, resourceId) - } - resource?.setUserId(userId) - resource?._id = resourceId - if (!TextUtils.isEmpty(stepId)) { - resource?.stepId = stepId - } - if (!TextUtils.isEmpty(courseId)) { - resource?.courseId = courseId - } - resource?._rev = JsonUtils.getString("_rev", doc) - resource?.resourceId = resourceId - resource?.title = JsonUtils.getString("title", doc) - resource?.description = JsonUtils.getString("description", doc) - if (doc.has("_attachments")) { - val attachments = doc["_attachments"].asJsonObject - val element = JsonParser.parseString(attachments.toString()) - val obj = element.asJsonObject - val entries = obj.entrySet() - for ((key) in entries) { - if (key.indexOf("/") < 0) { - resource?.resourceRemoteAddress = settings.getString("couchdbURL", "http://") + "/resources/" + resourceId + "/" + key - resource?.resourceLocalAddress = key - resource?.resourceOffline = FileUtils.checkFileExist(resource?.resourceRemoteAddress) + try{ + if(!mRealm.isInTransaction) { + return + } + val resourceId = JsonUtils.getString("_id", doc) + val settings = MainApplication.context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) + var resource = mRealm.where(RealmMyLibrary::class.java).equalTo("id", resourceId).findFirst() + if (resource == null) { + resource = mRealm.createObject(RealmMyLibrary::class.java, resourceId) + } + resource?.setUserId(userId) + resource?._id = resourceId + if (!TextUtils.isEmpty(stepId)) { + resource?.stepId = stepId + } + if (!TextUtils.isEmpty(courseId)) { + resource?.courseId = courseId + } + resource?._rev = JsonUtils.getString("_rev", doc) + resource?.resourceId = resourceId + resource?.title = JsonUtils.getString("title", doc) + resource?.description = JsonUtils.getString("description", doc) + if (doc.has("_attachments")) { + val attachments = doc["_attachments"].asJsonObject + val element = JsonParser.parseString(attachments.toString()) + val obj = element.asJsonObject + val entries = obj.entrySet() + for ((key) in entries) { + if (key.indexOf("/") < 0) { + resource?.resourceRemoteAddress = settings.getString("couchdbURL", "http://") + "/resources/" + resourceId + "/" + key + resource?.resourceLocalAddress = key + resource?.resourceOffline = FileUtils.checkFileExist(resource?.resourceRemoteAddress) + } } } + resource?.filename = JsonUtils.getString("filename", doc) + resource?.averageRating = JsonUtils.getString("averageRating", doc) + resource?.uploadDate = JsonUtils.getString("uploadDate", doc) + resource?.year = JsonUtils.getString("year", doc) + resource?.addedBy = JsonUtils.getString("addedBy", doc) + resource?.publisher = JsonUtils.getString("publisher", doc) + resource?.linkToLicense = JsonUtils.getString("linkToLicense", doc) + resource?.openWith = JsonUtils.getString("openWith", doc) + resource?.articleDate = JsonUtils.getString("articleDate", doc) + resource?.kind = JsonUtils.getString("kind", doc) + resource?.createdDate = JsonUtils.getLong("createdDate", doc) + resource?.language = JsonUtils.getString("language", doc) + resource?.author = JsonUtils.getString("author", doc) + resource?.mediaType = JsonUtils.getString("mediaType", doc) + resource?.resourceType = JsonUtils.getString("resourceType", doc) + resource?.timesRated = JsonUtils.getInt("timesRated", doc) + resource?.medium = JsonUtils.getString("medium", doc) + resource?.setResourceFor(JsonUtils.getJsonArray("resourceFor", doc), resource) + resource?.setSubject(JsonUtils.getJsonArray("subject", doc), resource) + resource?.setLevel(JsonUtils.getJsonArray("level", doc), resource) + resource?.setTag(JsonUtils.getJsonArray("tags", doc), resource) + resource?.isPrivate = JsonUtils.getBoolean("private", doc) + resource?.setLanguages(JsonUtils.getJsonArray("languages", doc), resource) + + } catch (e: Exception) { + Log.e("RealmMyLibrary", "Error during insertion into resources: ${e.message}") + throw e } - resource?.filename = JsonUtils.getString("filename", doc) - resource?.averageRating = JsonUtils.getString("averageRating", doc) - resource?.uploadDate = JsonUtils.getString("uploadDate", doc) - resource?.year = JsonUtils.getString("year", doc) - resource?.addedBy = JsonUtils.getString("addedBy", doc) - resource?.publisher = JsonUtils.getString("publisher", doc) - resource?.linkToLicense = JsonUtils.getString("linkToLicense", doc) - resource?.openWith = JsonUtils.getString("openWith", doc) - resource?.articleDate = JsonUtils.getString("articleDate", doc) - resource?.kind = JsonUtils.getString("kind", doc) - resource?.createdDate = JsonUtils.getLong("createdDate", doc) - resource?.language = JsonUtils.getString("language", doc) - resource?.author = JsonUtils.getString("author", doc) - resource?.mediaType = JsonUtils.getString("mediaType", doc) - resource?.resourceType = JsonUtils.getString("resourceType", doc) - resource?.timesRated = JsonUtils.getInt("timesRated", doc) - resource?.medium = JsonUtils.getString("medium", doc) - resource?.setResourceFor(JsonUtils.getJsonArray("resourceFor", doc), resource) - resource?.setSubject(JsonUtils.getJsonArray("subject", doc), resource) - resource?.setLevel(JsonUtils.getJsonArray("level", doc), resource) - resource?.setTag(JsonUtils.getJsonArray("tags", doc), resource) - resource?.isPrivate = JsonUtils.getBoolean("private", doc) - resource?.setLanguages(JsonUtils.getJsonArray("languages", doc), resource) } @JvmStatic diff --git a/app/src/main/java/org/ole/planet/myplanet/service/SyncManager.kt b/app/src/main/java/org/ole/planet/myplanet/service/SyncManager.kt index fb2405ac82..4df71afe15 100644 --- a/app/src/main/java/org/ole/planet/myplanet/service/SyncManager.kt +++ b/app/src/main/java/org/ole/planet/myplanet/service/SyncManager.kt @@ -87,47 +87,6 @@ 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.getSystemService(Context.WIFI_SERVICE) as WifiManager @@ -294,24 +253,6 @@ class SyncManager private constructor(private val context: Context) { } } -// private fun triggerInsert(stringArray: Array, 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, resourceDoc: JsonObject) { val realm = Realm.getDefaultInstance() try { @@ -325,18 +266,10 @@ class SyncManager private constructor(private val context: Context) { // Perform insertion based on category when (stringArray[2]) { - "resources" -> { - insertMyLibrary(stringArray[0], resourceDoc, realm) - } - "meetups" -> { - insert(realm, resourceDoc) - } - "courses" -> { - insertMyCourses(stringArray[0], resourceDoc, realm) - } - "teams" -> { - insertMyTeams(resourceDoc, realm) - } + "resources" -> insertMyLibrary(stringArray[0], resourceDoc, realm) + "meetups" -> insert(realm, resourceDoc) + "courses" -> insertMyCourses(stringArray[0], resourceDoc, realm) + "teams" -> insertMyTeams(resourceDoc, realm) } // Commit transaction if it is still in progress @@ -358,51 +291,31 @@ class SyncManager private constructor(private val context: Context) { } 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}") +// private fun triggerInsert(stringArray: Array, resourceDoc: JsonObject) { +// val realm = Realm.getDefaultInstance() +// try { +// realm.executeTransaction { transactionRealm -> +// Log.d("SyncManager", "Transaction started for ${stringArray[2]}") +// +// // Perform insertion based on category +// when (stringArray[2]) { +// "resources" -> insertMyLibrary(stringArray[0], resourceDoc, transactionRealm) +// "meetups" -> insert(transactionRealm, resourceDoc) +// "courses" -> insertMyCourses(stringArray[0], resourceDoc, transactionRealm) +// "teams" -> insertMyTeams(resourceDoc, transactionRealm) // } +// +// Log.d("SyncManager", "Transaction committed for ${stringArray[2]}") // } +// } catch (e: Exception) { +// Log.e("SyncManager", "Error inserting into ${stringArray[2]}: ${e.message}") +// } finally { +// realm.close() // } // saveConcatenatedLinksToPrefs() // } + companion object { private var ourInstance: SyncManager? = null val instance: SyncManager?