p2play-app-android/app/src/main/java/org/libre/agosto/p2play/Database.kt

128 lines
4.2 KiB
Kotlin

package org.libre.agosto.p2play
import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteException
import android.database.sqlite.SQLiteOpenHelper
import org.libre.agosto.p2play.models.TokenModel
import org.libre.agosto.p2play.models.UserModel
class Database(context: Context) : SQLiteOpenHelper(context, "p2play", null, 1) {
val dbName = "p2play"
private val dbUsers = "CREATE TABLE users(id INTEGER PRIMARY KEY AUTOINCREMENT, uuid INTEGER, username varchar(30), " +
"nsfw INTEGER, email string, followers INTEGER, avatar string, status integer)"
private val dbTokens = "CREATE TABLE tokens(id INTEGER PRIMARY KEY AUTOINCREMENT, token STRING, refresh_token STRING, status INTEGER)"
override fun onCreate(db: SQLiteDatabase?) {
db?.execSQL(dbUsers)
db?.execSQL(dbTokens)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
db?.execSQL("DROP TABLE users")
db?.execSQL("DROP TABLE tokens")
onCreate(db)
}
fun newToken(token: TokenModel): Boolean {
val db = writableDatabase
this.closeTokens()
val newToken = ContentValues()
newToken.put("token", token.token)
newToken.put("refresh_token", token.refresh_token)
newToken.put("status", token.status)
db.insert("tokens", null, newToken)
return true
}
fun newUser(user: UserModel): Boolean {
val db = writableDatabase
this.closeUsers()
val newUser = ContentValues()
newUser.put("uuid", user.uuid)
newUser.put("username", user.username)
newUser.put("email", user.email)
newUser.put("nsfw", user.nsfw)
newUser.put("followers", user.followers)
newUser.put("avatar", user.avatar)
newUser.put("status", user.status)
db.insert("users", null, newUser)
return true
}
fun getToken(): TokenModel {
val db = writableDatabase
var token = TokenModel()
try {
var cursor = db.rawQuery("SELECT * FROM tokens WHERE status=1 ORDER BY id DESC LIMIT 1", null)
if (cursor.count != 0) {
cursor.moveToFirst()
token.token = cursor.getString(cursor.getColumnIndex("token")).toString()
token.refresh_token = cursor.getString(cursor.getColumnIndex("refresh_token")).toString()
token.status = cursor.getString(cursor.getColumnIndex("status")).toInt()
}
cursor.close()
return token
} catch (e: SQLiteException) {
db?.execSQL(dbTokens)
} catch (e: Exception) {
e.printStackTrace()
}
return token
}
fun getUser(): UserModel {
val db = writableDatabase
var user = UserModel()
try {
var cursor = db.rawQuery("SELECT * FROM users WHERE status=1 ORDER BY id DESC LIMIT 1", null)
if (cursor.count != 0) {
cursor.moveToFirst()
user.uuid = cursor.getString(cursor.getColumnIndex("uuid")).toInt()
user.username = cursor.getString(cursor.getColumnIndex("username")).toString()
user.email = cursor.getString(cursor.getColumnIndex("email")).toString()
user.nsfw = cursor.getString(cursor.getColumnIndex("nsfw")).toBoolean()
user.followers = cursor.getString(cursor.getColumnIndex("followers")).toInt()
user.avatar = cursor.getString(cursor.getColumnIndex("avatar")).toString()
user.status = cursor.getString(cursor.getColumnIndex("status")).toInt()
}
cursor.close()
return user
} catch (e: SQLiteException) {
db?.execSQL(dbTokens)
} catch (e: Exception) {
e.printStackTrace()
}
return user
}
private fun closeTokens() {
val db = writableDatabase
db.execSQL("UPDATE tokens SET status=-1 WHERE 1")
}
private fun closeUsers() {
val db = writableDatabase
db.execSQL("UPDATE users SET status=-1 WHERE 1")
}
fun logout() {
closeUsers()
closeTokens()
}
}