Bookmarks done(?)

This commit is contained in:
Marie 2022-10-23 19:29:31 +02:00 committed by Matthieu
parent a81808664a
commit 86e5ed818f
7 changed files with 36 additions and 39 deletions

View File

@ -11,6 +11,7 @@ import android.net.Uri
import android.text.method.LinkMovementMethod import android.text.method.LinkMovementMethod
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.Menu
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.* import android.widget.*
@ -317,11 +318,22 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
} }
} }
private suspend fun bookmarkPost(api: PixelfedAPI) { private suspend fun bookmarkPost(api: PixelfedAPI, db: AppDatabase, menu: Menu, bookmarked: Boolean) : Boolean? {
//Call the api function //Call the api function
status?.id?.let { id -> status?.id?.let { id ->
try { try {
if(bookmarked) {
api.bookmarkStatus(id) api.bookmarkStatus(id)
} else {
api.undoBookmarkStatus(id)
}
val user = db.userDao().getActiveUser()!!
db.homePostDao().bookmarkStatus(id, user.user_id, user.instance_uri, bookmarked)
db.publicPostDao().bookmarkStatus(id, user.user_id, user.instance_uri, bookmarked)
menu.setGroupVisible(R.id.post_more_menu_group_bookmark, !bookmarked)
menu.setGroupVisible(R.id.post_more_menu_group_unbookmark, bookmarked)
return bookmarked
} catch (exception: HttpException) { } catch (exception: HttpException) {
Toast.makeText( Toast.makeText(
binding.root.context, binding.root.context,
@ -336,30 +348,11 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
).show() ).show()
} }
} }
} return null
private suspend fun undoBookmarkPost(api: PixelfedAPI) {
//Call the api function
status?.id?.let { id ->
try {
api.undoBookmarkStatus(id)
} catch (exception: HttpException) {
Toast.makeText(
binding.root.context,
binding.root.context.getString(R.string.undobookmark_post_failed_error, exception.code()),
Toast.LENGTH_SHORT
).show()
} catch (exception: IOException) {
Toast.makeText(
binding.root.context,
binding.root.context.getString(R.string.undobookmark_post_failed_io_except),
Toast.LENGTH_SHORT
).show()
}
}
} }
private fun activateMoreButton(apiHolder: PixelfedAPIHolder, db: AppDatabase, lifecycleScope: LifecycleCoroutineScope){ private fun activateMoreButton(apiHolder: PixelfedAPIHolder, db: AppDatabase, lifecycleScope: LifecycleCoroutineScope){
var bookmarked: Boolean? = null
binding.statusMore.setOnClickListener { binding.statusMore.setOnClickListener {
PopupMenu(it.context, it).apply { PopupMenu(it.context, it).apply {
setOnMenuItemClickListener { item -> setOnMenuItemClickListener { item ->
@ -385,13 +378,13 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
} }
R.id.post_more_menu_bookmark -> { R.id.post_more_menu_bookmark -> {
lifecycleScope.launch { lifecycleScope.launch {
bookmarkPost(apiHolder.api ?: apiHolder.setToCurrentUser()) bookmarked = bookmarkPost(apiHolder.api ?: apiHolder.setToCurrentUser(), db, menu, true)
} }
true true
} }
R.id.post_more_menu_unbookmark -> { R.id.post_more_menu_unbookmark -> {
lifecycleScope.launch { lifecycleScope.launch {
undoBookmarkPost(apiHolder.api ?: apiHolder.setToCurrentUser()) bookmarked = bookmarkPost(apiHolder.api ?: apiHolder.setToCurrentUser(), db, menu, false)
} }
true true
} }
@ -483,9 +476,9 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
} }
} }
inflate(R.menu.post_more_menu) inflate(R.menu.post_more_menu)
if(status?.bookmarked == true) { if(bookmarked == true || status?.bookmarked == true) {
menu.setGroupVisible(R.id.post_more_menu_group_bookmark, false) menu.setGroupVisible(R.id.post_more_menu_group_bookmark, false)
} else { } else if(bookmarked == false || status?.bookmarked != true) {
menu.setGroupVisible(R.id.post_more_menu_group_unbookmark, false) menu.setGroupVisible(R.id.post_more_menu_group_unbookmark, false)
} }
if(status?.media_attachments.isNullOrEmpty()) { if(status?.media_attachments.isNullOrEmpty()) {

View File

@ -70,7 +70,7 @@ class ProfileFeedFragment : UncachedFeedFragment<Status>() {
bookmarks bookmarks
) )
) )
)["Profile", FeedViewModel::class.java] as FeedViewModel<Status> )[if(bookmarks) "Bookmarks" else "Profile", FeedViewModel::class.java] as FeedViewModel<Status>
launch() launch()
initSearch() initSearch()

View File

@ -196,7 +196,7 @@ interface PixelfedAPI {
@Path("id") statusId: String @Path("id") statusId: String
) : Status ) : Status
@POST("/api/v1/statuses/{id}/undobookmark") @POST("/api/v1/statuses/{id}/unbookmark")
suspend fun undoBookmarkStatus( suspend fun undoBookmarkStatus(
@Path("id") statusId: String @Path("id") statusId: String
) : Status ) : Status

View File

@ -21,8 +21,8 @@ interface UserDao {
@Update @Update
fun updateUser(user: UserDatabaseEntity) fun updateUser(user: UserDatabaseEntity)
@Query("UPDATE users SET accessToken = :accessToken, refreshToken = :refreshToken WHERE user_id = :id and instance_uri = :instance_uri") @Query("UPDATE users SET accessToken = :accessToken, refreshToken = :refreshToken WHERE user_id = :id and instance_uri = :instanceUri")
fun updateAccessToken(accessToken: String, refreshToken: String, id: String, instance_uri: String) fun updateAccessToken(accessToken: String, refreshToken: String, id: String, instanceUri: String)
@Query("SELECT * FROM users") @Query("SELECT * FROM users")
fun getAll(): List<UserDatabaseEntity> fun getAll(): List<UserDatabaseEntity>
@ -33,12 +33,12 @@ interface UserDao {
@Query("UPDATE users SET isActive=0") @Query("UPDATE users SET isActive=0")
fun deActivateActiveUsers() fun deActivateActiveUsers()
@Query("UPDATE users SET isActive=1 WHERE user_id=:id AND instance_uri=:instance_uri") @Query("UPDATE users SET isActive=1 WHERE user_id=:id AND instance_uri=:instanceUri")
fun activateUser(id: String, instance_uri: String) fun activateUser(id: String, instanceUri: String)
@Query("DELETE FROM users WHERE isActive=1") @Query("DELETE FROM users WHERE isActive=1")
fun deleteActiveUsers() fun deleteActiveUsers()
@Query("SELECT * FROM users WHERE user_id=:id AND instance_uri=:instance_uri") @Query("SELECT * FROM users WHERE user_id=:id AND instance_uri=:instanceUri")
fun getUserWithId(id: String, instance_uri: String): UserDatabaseEntity fun getUserWithId(id: String, instanceUri: String): UserDatabaseEntity
} }

View File

@ -18,4 +18,7 @@ interface HomePostDao: FeedContentDao<HomeStatusDatabaseEntity> {
@Query("DELETE FROM homePosts WHERE user_id=:userId AND instance_uri=:instanceUri AND id=:id") @Query("DELETE FROM homePosts WHERE user_id=:userId AND instance_uri=:instanceUri AND id=:id")
override suspend fun delete(id: String, userId: String, instanceUri: String) override suspend fun delete(id: String, userId: String, instanceUri: String)
@Query("UPDATE homePosts SET bookmarked=:bookmarked WHERE user_id=:id AND instance_uri=:instanceUri AND id=:statusId")
fun bookmarkStatus(id: String, instanceUri: String, statusId: String, bookmarked: Boolean)
} }

View File

@ -18,4 +18,7 @@ interface PublicPostDao: FeedContentDao<PublicFeedStatusDatabaseEntity> {
@Query("DELETE FROM publicPosts WHERE user_id=:userId AND instance_uri=:instanceUri AND id=:id") @Query("DELETE FROM publicPosts WHERE user_id=:userId AND instance_uri=:instanceUri AND id=:id")
override suspend fun delete(id: String, userId: String, instanceUri: String) override suspend fun delete(id: String, userId: String, instanceUri: String)
@Query("UPDATE homePosts SET bookmarked=:bookmarked WHERE user_id=:id AND instance_uri=:instanceUri AND id=:statusId")
fun bookmarkStatus(id: String, instanceUri: String, statusId: String, bookmarked: Boolean)
} }

View File

@ -254,10 +254,8 @@ For more info about Pixelfed, you can check here: https://pixelfed.org"</string>
<string name="mascot_description">Image showing a red panda, Pixelfed\'s mascot, using a phone</string> <string name="mascot_description">Image showing a red panda, Pixelfed\'s mascot, using a phone</string>
<string name="delete_post_failed_error">Could not delete the post, error %1$d</string> <string name="delete_post_failed_error">Could not delete the post, error %1$d</string>
<string name="delete_post_failed_io_except">Could not delete the post, check your connection?</string> <string name="delete_post_failed_io_except">Could not delete the post, check your connection?</string>
<string name="bookmark_post_failed_error">Could not bookmark the post, error %1$d</string> <string name="bookmark_post_failed_error">Could not (un)bookmark the post, error %1$d</string>
<string name="bookmark_post_failed_io_except">Could not bookmark the post, check your connection?</string> <string name="bookmark_post_failed_io_except">Could not (un)bookmark the post, check your connection?</string>
<string name="undobookmark_post_failed_error">Could not unbookmark the post, error %1$d</string>
<string name="undobookmark_post_failed_io_except">Could not unbookmark the post, check your connection?</string>
<!-- Error message when a selected file can not be found --> <!-- Error message when a selected file can not be found -->
<string name="file_not_found">File %1$s was not found</string> <string name="file_not_found">File %1$s was not found</string>