Skip to content

Commit

Permalink
Merge pull request #21 from osik2000/20-add-all-info-on-trickrecordsc…
Browse files Browse the repository at this point in the history
…reen

20 add all info on trickrecordscreen
  • Loading branch information
osik2000 committed Dec 24, 2023
2 parents 3df4a0b + dfa71e4 commit 7b74440
Show file tree
Hide file tree
Showing 10 changed files with 329 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,4 @@ data class TrickInfo (
val difficulty: String = "",
val category: String = "",
val photoUrl: String = "",
) {
companion object {
var chosenOne = mutableStateOf(TrickInfo())
}
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ data class TrickRecord(
val favoriteCounter: MutableIntState = mutableIntStateOf(0),
val usersWhoLiked: MutableList<String> = mutableListOf(),
val likeCounter: MutableIntState = mutableIntStateOf(0),
val usersWhoDisiked: MutableList<String> = mutableListOf(),
val usersWhoDisliked: MutableList<String> = mutableListOf(),
val dislikeCounter: MutableIntState = mutableIntStateOf(0),
) {

Expand All @@ -33,13 +33,17 @@ data class TrickRecord(
favoriteCounter = trickRecord.favoriteCounter.intValue.toString(),
usersWhoLiked = trickRecord.usersWhoLiked,
likeCounter = trickRecord.likeCounter.intValue.toString(),
usersWhoDisiked = trickRecord.usersWhoDisiked,
usersWhoDisliked = trickRecord.usersWhoDisliked,
dislikeCounter = trickRecord.dislikeCounter.intValue.toString(),
)
}
companion object {
val whileAdding = mutableStateOf(false)
val trimmedVideoPath = mutableStateOf("")
var localFileUri = mutableStateOf("")
var chosenTitle = mutableStateOf("")
var chosenDescription = mutableStateOf("")
var chosenTrickInfo = mutableStateOf(TrickInfo())
}
}

Expand All @@ -54,9 +58,9 @@ data class TrickRecordDTO(
val usersWhoSetAsFavorite: MutableList<String> = mutableListOf(),
var favoriteCounter: String = "0",
val usersWhoLiked: MutableList<String> = mutableListOf(),
val likeCounter: String = "0",
val usersWhoDisiked: MutableList<String> = mutableListOf(),
val dislikeCounter: String = "0",
var likeCounter: String = "0",
val usersWhoDisliked: MutableList<String> = mutableListOf(),
var dislikeCounter: String = "0",
) {
fun toTrickRecord(trickRecordDTO: TrickRecordDTO = this): TrickRecord {
return TrickRecord(
Expand All @@ -71,7 +75,7 @@ data class TrickRecordDTO(
favoriteCounter = mutableIntStateOf(Integer.valueOf(trickRecordDTO.favoriteCounter)),
usersWhoLiked = trickRecordDTO.usersWhoLiked,
likeCounter = mutableIntStateOf(Integer.valueOf(trickRecordDTO.likeCounter)),
usersWhoDisiked = trickRecordDTO.usersWhoDisiked,
usersWhoDisliked = trickRecordDTO.usersWhoDisliked,
dislikeCounter = mutableIntStateOf(Integer.valueOf(trickRecordDTO.dislikeCounter)),
)
}
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/kotlin/pl/pawelosinski/skatefreak/model/User.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ data class User(
var nickname: String = "",
var city: String = "",
var favoriteTrickRecords: MutableList<String> = mutableListOf(),
var likedTrickRecords: MutableList<String> = mutableListOf(),
var dislikedTrickRecords: MutableList<String> = mutableListOf(),
var accountType: String = "",
var isPublic: Boolean = true
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,160 @@ class DatabaseService {
}
}

fun setLikeStatusOnTrickRecord(
trickRecord: TrickRecordDTO,
onSuccess: (String) -> Unit = {}
) {
val userID = loggedUser.value.firebaseId
val userLikeRef = database.getReference("users/$userID/likedTrickRecords")
val trickRecordRef =
database.getReference("tricks/records/${trickRecord.id}")

if (trickRecord.usersWhoLiked.contains(userID) && loggedUser.value.likedTrickRecords.contains(
trickRecord.id
)
) {
Log.d(
"DataService",
"Trick record already liked. Removing this one from liked"
)
loggedUser.value.likedTrickRecords.remove(trickRecord.id)
userLikeRef.setValue(loggedUser.value.likedTrickRecords).addOnSuccessListener {
Log.d("DataService", "Trick record removed from liked. (userLikeRef)")
trickRecord.usersWhoLiked.remove(userID)
trickRecord.likeCounter = (Integer.valueOf(trickRecord.likeCounter) - 1).toString()
trickRecordRef.setValue(trickRecord)
.addOnSuccessListener {
Log.d(
"DataService",
"Trick record removed from liked. (trickRecordusersWhoLikedRef)"
)
onSuccess("Cofnięto Łapkę w górę.")
}.addOnFailureListener {
Log.e(
"DataService",
"Trick has not been removed from liked (trickRecordusersWhoLikedRef)",
it
)
}
}.addOnFailureListener {
Log.e(
"DataService",
"Trick has not been removed from liked (userLikeRef)",
it
)
}
} else {
Log.d(
"DataService",
"Adding Like to trick record. (trickRecordusersWhoLikedRef)"
)
loggedUser.value.likedTrickRecords.add(trickRecord.id)
userLikeRef.setValue(loggedUser.value.likedTrickRecords).addOnSuccessListener {
Log.d("DataService", "Added trick to like. (trickRecordusersWhoLikedRef)")
trickRecord.usersWhoLiked.add(userID)
trickRecord.likeCounter = (Integer.valueOf(trickRecord.likeCounter) + 1).toString()
trickRecordRef.setValue(trickRecord)
.addOnSuccessListener {
Log.d(
"DataService",
"Trick record added to liked. (trickRecordusersWhoLikedRef)"
)
onSuccess("Polubiono klip.")
}.addOnFailureListener {
Log.e(
"DataService",
"Trick has not been added to liked (trickRecordusersWhoLikedRef)",
it
)
}
}.addOnFailureListener {
Log.e(
"DataService",
"Trick has not been added to liked (userLikeRef)",
it
)
}
}
}

fun setDislikeStatusOnTrickRecord(
trickRecord: TrickRecordDTO,
onSuccess: (String) -> Unit = {}
) {
val userID = loggedUser.value.firebaseId
val userDislikeRef = database.getReference("users/$userID/dislikedTrickRecords")
val trickRecordRef =
database.getReference("tricks/records/${trickRecord.id}")

if (trickRecord.usersWhoDisliked.contains(userID) && loggedUser.value.dislikedTrickRecords.contains(
trickRecord.id
)
) {
Log.d(
"DataService",
"Trick record already disliked. Removing this one from disliked"
)
loggedUser.value.dislikedTrickRecords.remove(trickRecord.id)
userDislikeRef.setValue(loggedUser.value.dislikedTrickRecords).addOnSuccessListener {
Log.d("DataService", "Trick record removed from disliked. (userDislikeRef)")
trickRecord.usersWhoDisliked.remove(userID)
trickRecord.dislikeCounter = (Integer.valueOf(trickRecord.dislikeCounter) - 1).toString()
trickRecordRef.setValue(trickRecord)
.addOnSuccessListener {
Log.d(
"DataService",
"Trick record removed from disliked. (trickRecordusersWhoDislikedRef)"
)
onSuccess("Cofnięto Łapkę w dół.")
}.addOnFailureListener {
Log.e(
"DataService",
"Trick has not been removed from disliked (trickRecordusersWhoDislikedRef)",
it
)
}
}.addOnFailureListener {
Log.e(
"DataService",
"Trick has not been removed from disliked (userDislikeRef)",
it
)
}
} else {
Log.d(
"DataService",
"Adding dislike to trick record. (trickRecordusersWhoDislikedRef)"
)
loggedUser.value.dislikedTrickRecords.add(trickRecord.id)
userDislikeRef.setValue(loggedUser.value.dislikedTrickRecords).addOnSuccessListener {
Log.d("DataService", "Added trick to like. (trickRecordusersWhoDislikedRef)")
trickRecord.usersWhoDisliked.add(userID)
trickRecord.dislikeCounter = (Integer.valueOf(trickRecord.dislikeCounter) + 1).toString()
trickRecordRef.setValue(trickRecord)
.addOnSuccessListener {
Log.d(
"DataService",
"Trick record added to disliked. (trickRecordusersWhoDislikedRef)"
)
onSuccess("Oddano łapke w dół.")
}.addOnFailureListener {
Log.e(
"DataService",
"Trick has not been added to disliked (trickRecordusersWhoDislikedRef)",
it
)
}
}.addOnFailureListener {
Log.e(
"DataService",
"Trick has not been added to disliked (userDislikeRef)",
it
)
}
}
}


fun uploadUserAvatar(
userID: String,
Expand Down Expand Up @@ -317,7 +471,7 @@ class DatabaseService {
}
}

fun uploadTrickRecord(record: TrickRecord, onSuccess: () -> Unit = {}, onFail: () -> Unit = {}) {
fun uploadTrickRecord(record: TrickRecord, onSuccess: (TrickRecord) -> Unit = {}, onFail: () -> Unit = {}) {
val recordDTO = record.toDTO()
val localFile = recordDTO.videoUrl
val databaseReference = database.getReference("your_collection_name")
Expand All @@ -336,7 +490,7 @@ class DatabaseService {
recordDTO.videoUrl = videoUrl
myRef.setValue(recordDTO).addOnSuccessListener {
Log.d("DataService", "Trick record saved successfully.")
onSuccess()
onSuccess(recordDTO.toTrickRecord())
}.addOnFailureListener {
Log.e("DataService", "Error writing data", it)
onFail()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import pl.pawelosinski.skatefreak.local.firebaseAuthService
import pl.pawelosinski.skatefreak.local.loggedUser
import pl.pawelosinski.skatefreak.model.TrickInfo
import pl.pawelosinski.skatefreak.model.TrickRecord
import pl.pawelosinski.skatefreak.model.User
import pl.pawelosinski.skatefreak.repository.UserRepository
import pl.pawelosinski.skatefreak.service.LoginScreen
Expand Down Expand Up @@ -184,6 +186,14 @@ fun BottomNavigationBar() {
ChooseTrickInfoScreen(navController = navController)
}
composable(Screens.AddRecord.route) {
if(!TrickRecord.whileAdding.value){
TrickRecord.whileAdding.value = false
TrickRecord.chosenTitle.value = ""
TrickRecord.chosenDescription.value = ""
TrickRecord.localFileUri.value = ""
TrickRecord.trimmedVideoPath.value = ""
TrickRecord.chosenTrickInfo.value = TrickInfo()
}
AddRecordScreen(navController = navController)
}
composable(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import androidx.compose.foundation.layout.height
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.FavoriteBorder
import androidx.compose.material.icons.filled.ThumbDownAlt
import androidx.compose.material.icons.filled.ThumbDownOffAlt
import androidx.compose.material.icons.filled.ThumbUpAlt
import androidx.compose.material.icons.filled.ThumbUpOffAlt
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
Expand Down Expand Up @@ -36,6 +38,12 @@ fun FooterUserAction(modifier: Modifier, trickRecord: TrickRecord) {
var isFavorite by remember {
mutableStateOf(loggedUser.value.favoriteTrickRecords.contains(trickRecord.id))
}
var isLiked by remember {
mutableStateOf(loggedUser.value.likedTrickRecords.contains(trickRecord.id))
}
var isDisliked by remember {
mutableStateOf(loggedUser.value.dislikedTrickRecords.contains(trickRecord.id))
}
Log.d("FooterUserAction", "trickid: ${trickRecord.id} isFavorite: $isFavorite")

Column(
Expand All @@ -58,22 +66,73 @@ fun FooterUserAction(modifier: Modifier, trickRecord: TrickRecord) {
}

)

Log.d("FooterUserAction", "trickid: ${trickRecord.id} isFavorite: $isFavorite")
Log.d("FooterUserAction", "TrickRecord.usernamesWhoLiked (${trickRecord.usersWhoSetAsFavorite.size}): ${trickRecord.usersWhoSetAsFavorite}")
Log.d("FooterUserAction", "TrickRecord.usernamesWhoSetAsFavorite (${trickRecord.usersWhoSetAsFavorite.size}): ${trickRecord.usersWhoSetAsFavorite}")
}
)

Spacer(modifier = Modifier.height(10.dp))

UserAction(
icon = Icons.Default.ThumbUpOffAlt,
name = "LikeTrickRecord",
icon = if (isLiked) Icons.Default.ThumbUpAlt else Icons.Default.ThumbUpOffAlt,
colored = isLiked,
color = MaterialTheme.colorScheme.primary,
onClick = {
databaseService.setLikeStatusOnTrickRecord(
trickRecord = trickRecord.toDTO(),
onSuccess = {
myToast(context = context, message = it)
isLiked = !isLiked
trickRecord.likeCounter.intValue += if (isLiked) 1 else -1
Log.d("FooterUserAction", "usernames who liked ${trickRecord.usersWhoLiked}")
if(isDisliked) {
databaseService.setDislikeStatusOnTrickRecord(
trickRecord = trickRecord.toDTO(),
onSuccess = {
myToast(context = context, message = it)
isDisliked = !isDisliked
trickRecord.dislikeCounter.intValue -= 1
Log.d("FooterUserAction", "usernames who disliked ${trickRecord.usersWhoDisliked}")
})
}
}
)
Log.d("FooterUserAction", "trickid: ${trickRecord.id} isLiked: $isLiked")
Log.d("FooterUserAction", "TrickRecord.usernamesWhoLiked (${trickRecord.usersWhoLiked.size}): ${trickRecord.usersWhoLiked}")
}
)

Spacer(modifier = Modifier.height(10.dp))

UserAction(
icon = Icons.Default.ThumbDownOffAlt,
name = "DislikeTrickRecord",
icon = if (isDisliked) Icons.Default.ThumbDownAlt else Icons.Default.ThumbDownOffAlt,
colored = isDisliked,
color = MaterialTheme.colorScheme.primary,
onClick = {
databaseService.setDislikeStatusOnTrickRecord(
trickRecord = trickRecord.toDTO(),
onSuccess = {
myToast(context = context, message = it)
isDisliked = !isDisliked
trickRecord.dislikeCounter.intValue += if (isDisliked) 1 else -1
Log.d("FooterUserAction", "usernames who disliked ${trickRecord.usersWhoDisliked}")
if(isLiked) {
databaseService.setLikeStatusOnTrickRecord(
trickRecord = trickRecord.toDTO(),
onSuccess = {
myToast(context = context, message = it)
isLiked = !isLiked
trickRecord.likeCounter.intValue -= 1
Log.d("FooterUserAction", "usernames who liked ${trickRecord.usersWhoLiked}")
})
}
}
)
Log.d("FooterUserAction", "trickid: ${trickRecord.id} isDisliked: $isDisliked")
Log.d("FooterUserAction", "TrickRecord.usernamesWhoLiked (${trickRecord.usersWhoDisliked.size}): ${trickRecord.usersWhoDisliked}")
}
)
}
}
Loading

0 comments on commit 7b74440

Please sign in to comment.