Skip to content

Commit

Permalink
implement database for feed persistence
Browse files Browse the repository at this point in the history
  • Loading branch information
Nyabsi committed Dec 3, 2024
1 parent a8113f8 commit 5d2e886
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 1 deletion.
35 changes: 35 additions & 0 deletions app/src/main/java/cc/sovellus/vrcaa/helper/DatabaseHelper.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package cc.sovellus.vrcaa.helper

import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import cc.sovellus.vrcaa.App

class DatabaseHelper : SQLiteOpenHelper(App.getContext(),
Constants.DATABASE_NAME, null,
Constants.DATABASE_VERSION
) {
override fun onCreate(database: SQLiteDatabase) {
database.execSQL(Queries.SQL_CREATE_FEED_TABLE)
}

override fun onUpgrade(database: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
onUpgrade(database, oldVersion, newVersion)
}

override fun onDowngrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
onDowngrade(db, oldVersion, newVersion)
}

object Constants {
const val DATABASE_NAME = "vrcaa.db"
const val DATABASE_VERSION = 1
}

object Queries {
const val SQL_CREATE_FEED_TABLE = "CREATE TABLE feed(type INTEGER, feedId TEXT, friendId TEXT, friendName TEXT, friendPictureUrl TEXT, friendStatus TEXT, travelDestination TEXT, feedTimestamp BIGINT)"
}

object Tables {
const val SQL_TABLE_FEED = "feed"
}
}
4 changes: 4 additions & 0 deletions app/src/main/java/cc/sovellus/vrcaa/helper/StatusHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ object StatusHelper {
else -> "Offline"
}
}

companion object {
fun fromInt(value: Int) = Status.entries.first { it.ordinal == value }
}
}

fun getStatusFromString(status: String?): Status {
Expand Down
60 changes: 60 additions & 0 deletions app/src/main/java/cc/sovellus/vrcaa/manager/DatabaseManager.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package cc.sovellus.vrcaa.manager

import android.content.ContentValues
import cc.sovellus.vrcaa.helper.DatabaseHelper
import cc.sovellus.vrcaa.helper.StatusHelper
import java.time.LocalDateTime
import java.time.ZoneOffset
import java.util.UUID

object DatabaseManager {
private val dbHelper = DatabaseHelper()

fun writeFeed(feed: FeedManager.Feed) {
val values = ContentValues().apply {
put("type", feed.type.ordinal)
put("feedId", feed.feedId.toString())
put("friendId", feed.friendId)
put("friendName", feed.friendName)
put("friendPictureUrl", feed.friendPictureUrl)
put("friendStatus", feed.friendStatus.ordinal)
put("travelDestination", feed.travelDestination)
put("feedTimestamp", feed.feedTimestamp.toEpochSecond(ZoneOffset.UTC))
}

dbHelper.writableDatabase.insert(DatabaseHelper.Tables.SQL_TABLE_FEED, null, values)
}

fun readFeeds(): MutableList<FeedManager.Feed> {
val cursor = dbHelper.readableDatabase.query(
DatabaseHelper.Tables.SQL_TABLE_FEED,
arrayOf("type", "feedId", "friendId", "friendName", "friendPictureUrl", "friendStatus", "travelDestination", "feedTimestamp"),
null,
null,
null,
null,
null
)

val feeds = mutableListOf<FeedManager.Feed>()

with(cursor) {
while (moveToNext()) {
val feed = FeedManager.Feed(
type = FeedManager.FeedType.fromInt(getInt(getColumnIndexOrThrow("type"))),
feedId = UUID.fromString(getString(getColumnIndexOrThrow("feedId"))),
friendId = getString(getColumnIndexOrThrow("friendId")),
friendName = getString(getColumnIndexOrThrow("friendName")),
friendPictureUrl = getString(getColumnIndexOrThrow("friendPictureUrl")),
friendStatus = StatusHelper.Status.fromInt(getInt(getColumnIndexOrThrow("friendStatus"))),
travelDestination = getString(getColumnIndexOrThrow("travelDestination")),
feedTimestamp = LocalDateTime.ofEpochSecond(getLong(getColumnIndexOrThrow("feedTimestamp")), 0, ZoneOffset.UTC)
)
feeds.add(feed)
}
}

cursor.close()
return feeds
}
}
11 changes: 10 additions & 1 deletion app/src/main/java/cc/sovellus/vrcaa/manager/FeedManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,22 @@ object FeedManager {
private var feedListener: FeedListener? = null
private var feedList: MutableList<Feed> = ArrayList()

init {
feedList = DatabaseManager.readFeeds()
}

enum class FeedType {
FRIEND_FEED_ONLINE,
FRIEND_FEED_OFFLINE,
FRIEND_FEED_LOCATION,
FRIEND_FEED_STATUS,
FRIEND_FEED_FRIEND_REQUEST,
FRIEND_FEED_REMOVED,
FRIEND_FEED_ADDED
FRIEND_FEED_ADDED;

companion object {
fun fromInt(value: Int) = entries.first { it.ordinal == value }
}
}

data class Feed(
Expand All @@ -37,6 +45,7 @@ object FeedManager {

fun addFeed(feed: Feed) {
feedList.add(feed)
DatabaseManager.writeFeed(feed)
feedListener?.onReceiveUpdate(feedList)
}

Expand Down

0 comments on commit 5d2e886

Please sign in to comment.