Skip to content

Commit

Permalink
1.0.12
Browse files Browse the repository at this point in the history
- Fix user status not updating
- Fix current user status not being registered
- Fix crash when chats are updated
- Fix images not loading sometimes
- Fix user status appearing on group chats that share the username of a friend
- Fix crash when backing out of the file manager with no files selected on gallery upload
  • Loading branch information
Troplo committed Nov 17, 2023
1 parent ce499f1 commit b73dd38
Show file tree
Hide file tree
Showing 10 changed files with 122 additions and 87 deletions.
15 changes: 8 additions & 7 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ android {
applicationId = "com.troplo.privateuploader"
minSdk = 28
targetSdk = 34
versionCode = 11
versionName = "1.0.11"
versionCode = 12
versionName = "1.0.12"
multiDexEnabled = true
buildConfigField("String", "SERVER_URL", "\"https://privateuploader.com\"")
buildConfigField("String", "BUILD_TIME", "\"${DateFormat.getDateTimeInstance().format(System.currentTimeMillis())}\"")
Expand Down Expand Up @@ -87,6 +87,7 @@ android {
}

dependencies {
implementation("com.github.skydoves:landscapist-glide:2.2.13-SNAPSHOT")
implementation("com.apollographql.apollo3:apollo-runtime:3.8.2")
// Firebase
implementation(platform("com.google.firebase:firebase-bom:32.1.1"))
Expand All @@ -108,18 +109,18 @@ dependencies {
implementation("io.sentry:sentry-android:6.23.0")
implementation("io.sentry:sentry-compose-android:6.23.0")
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-alpha03")
implementation("io.coil-kt:coil-gif:2.4.0")
implementation("io.coil-kt:coil-compose:2.4.0")
implementation("com.github.X1nto:OverlappingPanelsCompose:1.2.0")
implementation("io.coil-kt:coil:2.3.0")
implementation("com.github.jeziellago:compose-markdown:0.3.3")
implementation("com.github.bumptech.glide:compose:1.0.0-alpha.1")
implementation("com.github.bumptech.glide:compose:1.0.0-beta01")
implementation("com.squareup.retrofit2:retrofit:2.10.0-SNAPSHOT")
implementation("com.squareup.retrofit2:converter-moshi:2.10.0-SNAPSHOT")
implementation("com.squareup.moshi:moshi:1.12.0")
implementation("com.squareup.moshi:moshi-kotlin:1.12.0")
implementation("com.github.bumptech.glide:glide:4.16.0-SNAPSHOT")
implementation("com.github.bumptech.glide:glide:5.0.0-rc01")
implementation("com.squareup.okhttp3:logging-interceptor:4.9.1")
implementation("io.coil-kt:coil:2.3.0")
implementation("io.coil-kt:coil-compose:2.4.0")
implementation("io.coil-kt:coil-gif:2.4.0")
implementation("androidx.core:core-ktx:1.10.1")
implementation("com.google.code.gson:gson:2.10.1")
implementation("com.squareup.retrofit2:converter-gson:2.10.0-SNAPSHOT")
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/java/com/troplo/privateuploader/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,11 @@ class MainActivity : ComponentActivity() {

public fun upload(files: List<UploadTarget>, deleteOnceFinished: Boolean = true, context: Context = this) {
Log.d("TPU.Upload", "Uploading ${files.size} files")

if(!files.any()) {
return
}

if(deleteOnceFinished) {
UploadStore.uploads = files.toMutableStateList()
}
Expand Down
38 changes: 32 additions & 6 deletions app/src/main/java/com/troplo/privateuploader/api/SocketHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ object SocketHandler {

private var chatSocket: Socket? = null
private var gallerySocket: Socket? = null
private var userSocket: Socket? = null
private var friendsSocket: Socket? = null
private var trackedUsersSocket: Socket? = null

private var manager: Manager? = null
val gson = Gson()
Expand All @@ -47,9 +50,15 @@ object SocketHandler {
manager = Manager(URI(baseUrl), options)
chatSocket = manager!!.socket("/chat", options)
gallerySocket = manager!!.socket("/gallery", options)
if(gallerySocket != null) {
gallerySocket?.open()
}
userSocket = manager!!.socket("/user", options)
friendsSocket = manager!!.socket("/friends", options)
trackedUsersSocket = manager!!.socket("/trackedUsers", options)

gallerySocket?.open()
userSocket?.open()
friendsSocket?.open()
trackedUsersSocket?.open()

if (chatSocket != null) {
chatSocket?.open()
if (platform !== "android_kotlin_background_service") {
Expand Down Expand Up @@ -101,9 +110,14 @@ object SocketHandler {
}
Log.d("MessageStore", "Unread; $unread, Chat: $chat")
if(chat != null) {
val index = ChatStore.chats.indexOfFirst { it.id == chat.id }
ChatStore.chats.removeAt(index)
ChatStore.chats.add(0, chat.copy(unread = unread))
val modifiedChats = ChatStore.chats.toMutableList()
val index = modifiedChats.indexOfFirst { it.id == chat.id }
if (index != -1) {
modifiedChats.removeAt(index)
modifiedChats.add(0, chat.copy(unread = unread))
ChatStore.chats.clear()
ChatStore.chats.addAll(modifiedChats)
}
}
}
chatSocket?.on("typing") { it ->
Expand Down Expand Up @@ -156,6 +170,18 @@ object SocketHandler {
return gallerySocket
}

fun getUserSocket(): Socket? {
return userSocket
}

fun getFriendsSocket(): Socket? {
return friendsSocket
}

fun getTrackedUsersSocket(): Socket? {
return trackedUsersSocket
}

fun closeSocket() {
chatSocket?.disconnect()
chatSocket = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ object FriendStore {

fun initializeFriends() {
try {
val socket = SocketHandler.getSocket()
socket?.off("userStatus")
val socket = SocketHandler.getFriendsSocket();
val tracked = SocketHandler.getTrackedUsersSocket()
tracked?.off("userStatus")
socket?.off("friendRequest")

CoroutineScope(
Expand All @@ -32,26 +33,32 @@ object FriendStore {
}
}

Log.d("FriendStore", "initialized")

socket?.on("userStatus") { it ->
tracked?.on("userStatus") { it ->
val jsonArray = it[0] as JSONObject
val payload = jsonArray.toString()
Log.d("TPU.Untagged", payload)
Log.d("FriendStore.UserStatus", payload)
val status = SocketHandler.gson.fromJson(payload, StatusPayload::class.java)
val friend = friends.value.find { it.otherUser?.id == status.id }

Log.d("FriendStore.UserStatus", "friend: $friend")

if (friend != null) {
friends.value = friends.value.minus(friend).plus(
friend.copy(
otherUser = friend.otherUser?.copy(
status = status.status ?: "offline",
status = status.status?.lowercase() ?: "offline",
platforms = status.platforms
)
)
)
} else if (status.id == UserStore.user.value?.id) {
Log.d("FriendStore.UserStatus", "updating current user status")
UserStore.user.value = UserStore.user.value?.copy(
status = status.status ?: "offline",
status = status.status?.lowercase() ?: "offline",
storedStatus = if (status.status?.lowercase() === "offline") "invisible" else status.status?.lowercase()
?: "offline",
platforms = status.platforms
)
}
Expand Down Expand Up @@ -87,7 +94,13 @@ object FriendStore {
fun updateFriendNickname(name: String, userId: Int) {
friends.value = friends.value.map {
if (it.otherUser?.id == userId) {
it.copy(otherUser = it.otherUser?.copy(nickname = it.otherUser?.nickname?.copy(nickname = name)))
it.copy(
otherUser = it.otherUser?.copy(
nickname = it.otherUser?.nickname?.copy(
nickname = name
)
)
)
} else {
it
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ fun ChatItem(
icon = {
UserAvatar(
avatar = chat.icon ?: chat.recipient?.avatar,
username = chatName
username = chat.recipient?.username ?: chatName,
showStatus = chat.recipient != null
)
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ package com.troplo.privateuploader.components.chat

import android.content.Intent
import android.net.Uri
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
Expand All @@ -29,18 +27,16 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import coil.compose.rememberAsyncImagePainter
import coil.request.ImageRequest
import coil.size.Size
import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi
import com.skydoves.landscapist.ImageOptions
import com.skydoves.landscapist.glide.GlideImage
import com.troplo.privateuploader.api.TpuFunctions
import com.troplo.privateuploader.api.imageLoader
import com.troplo.privateuploader.api.stores.UserStore
import com.troplo.privateuploader.components.chat.dialogs.ImageDialog
import com.troplo.privateuploader.data.model.Embed
import kotlinx.coroutines.Dispatchers

@OptIn(ExperimentalGlideComposeApi::class)
@Composable
Expand Down Expand Up @@ -76,22 +72,18 @@ fun Embed(embed: Embed) {
if (expand.value) {
ImageDialog(url ?: "", embed.data.upload?.name ?: "unknown.png", expand)
}
Image(
contentDescription = "Embed image (no alt text)",
painter = rememberAsyncImagePainter(
ImageRequest.Builder(LocalContext.current)
.dispatcher(Dispatchers.IO)
.data(data = url)
.apply(block = fun ImageRequest.Builder.() {
size(Size.ORIGINAL)
}).build(), imageLoader = imageLoader(LocalContext.current, false)
),

GlideImage(
imageModel = { url },
modifier = Modifier
.fillMaxWidth()
.fillMaxSize()
.height(if (embed.data.height!! > 300) 300.dp else embed.data.height.dp)
.clickable {
expand.value = true
}
},
imageOptions = ImageOptions(
contentScale = ContentScale.FillWidth
)
)

}
Expand Down Expand Up @@ -149,7 +141,9 @@ fun Embed(embed: Embed) {

else -> {
Card(
modifier = Modifier.width(300.dp).heightIn(0.dp, 200.dp)
modifier = Modifier
.width(300.dp)
.heightIn(0.dp, 200.dp)
) {
Text(
text = "The version of TPUvNATIVE you are using does not yet support the embed type ${embed.type}!",
Expand All @@ -160,7 +154,9 @@ fun Embed(embed: Embed) {
}
} else {
Card(
modifier = Modifier.width(300.dp).heightIn(0.dp, 200.dp)
modifier = Modifier
.width(300.dp)
.heightIn(0.dp, 200.dp)
) {
Box(
modifier = Modifier.fillMaxSize(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,16 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.core.net.toUri
import coil.compose.rememberAsyncImagePainter
import coil.request.ImageRequest
import coil.size.Size
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestOptions
import com.skydoves.landscapist.ImageOptions
import com.skydoves.landscapist.glide.GlideImage
import com.troplo.privateuploader.api.imageLoader
import com.troplo.privateuploader.components.core.InteractionDialog
import com.troplo.privateuploader.components.core.ZoomableBox
Expand All @@ -34,24 +39,17 @@ fun ImageDialog(url: String, name: String, open: MutableState<Boolean>) {
open = open,
content = {
ZoomableBox {
Image(
painter = rememberAsyncImagePainter(
ImageRequest.Builder(LocalContext.current)
.dispatcher(Dispatchers.IO)
.data(data = url)
.apply(block = fun ImageRequest.Builder.() {
size(Size.ORIGINAL)
}).build(), imageLoader = imageLoader(LocalContext.current, false)
GlideImage(
imageModel = { url },
imageOptions = ImageOptions(
contentScale = ContentScale.FillWidth
),
modifier = Modifier.fillMaxSize().graphicsLayer(
scaleX = scale,
scaleY = scale,
translationX = offsetX,
translationY = offsetY
),
contentDescription = name,
modifier = Modifier
.fillMaxSize()
.graphicsLayer(
scaleX = scale,
scaleY = scale,
translationX = offsetX,
translationY = offsetY
)
)
}
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.troplo.privateuploader.components.core

import android.util.Log
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.border
Expand Down Expand Up @@ -32,6 +33,9 @@ import androidx.compose.ui.unit.dp
import coil.compose.rememberAsyncImagePainter
import coil.request.ImageRequest
import coil.size.Size
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestOptions
import com.skydoves.landscapist.glide.GlideImage
import com.troplo.privateuploader.api.TpuFunctions
import com.troplo.privateuploader.api.imageLoader
import com.troplo.privateuploader.api.stores.FriendStore
Expand Down Expand Up @@ -94,19 +98,15 @@ fun UserAvatar(
}
if(fakeStatus != null) friend?.otherUser?.status = fakeStatus
if (avatar != null) {
Image(
contentDescription = "User profile picture",
painter = rememberAsyncImagePainter(
ImageRequest.Builder(LocalContext.current)
.dispatcher(Dispatchers.IO)
.data(data = TpuFunctions.image(avatar, null, 512, 512))
.apply {
size(Size.ORIGINAL)
}
.build(),
imageLoader = imageLoader(LocalContext.current),
contentScale = ContentScale.FillWidth
),
Log.d("UserAvatar", "avatar: ${ TpuFunctions.image(avatar, null, 512, 512)}")
GlideImage(
imageModel = { TpuFunctions.image(avatar, null, 512, 512) },
requestOptions = {
RequestOptions()
.override(512, 512)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.centerCrop()
},
modifier = Modifier
.clip(CircleShape)
.background(if (fake) MaterialTheme.colorScheme.surface else Color.Transparent)
Expand Down
Loading

0 comments on commit b73dd38

Please sign in to comment.