Skip to content

Commit

Permalink
feat(channelGroups): disallow creation of already existing groups
Browse files Browse the repository at this point in the history
  • Loading branch information
FineFindus authored and Bnyro committed Aug 20, 2023
1 parent 7f72a3e commit b2f3c8e
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ interface SubscriptionGroupsDao {
@Query("SELECT * FROM subscriptionGroups")
suspend fun getAll(): List<SubscriptionGroup>

@Query("SELECT EXISTS(SELECT * FROM subscriptionGroups WHERE name = :name)")
suspend fun exists(name: String): Boolean

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun createGroup(subscriptionGroup: SubscriptionGroup)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@ import com.github.libretube.R
import com.github.libretube.api.SubscriptionHelper
import com.github.libretube.api.obj.Subscription
import com.github.libretube.databinding.DialogEditChannelGroupBinding
import com.github.libretube.db.DatabaseHolder
import com.github.libretube.db.obj.SubscriptionGroup
import com.github.libretube.ui.adapters.SubscriptionGroupChannelsAdapter
import com.github.libretube.ui.models.SubscriptionsViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext

class EditChannelGroupSheet(
Expand All @@ -32,7 +34,7 @@ class EditChannelGroupSheet(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
): View {
binding = DialogEditChannelGroupBinding.inflate(layoutInflater)
binding.groupName.setText(group.name)

Expand Down Expand Up @@ -92,15 +94,25 @@ class EditChannelGroupSheet(

private fun updateConfirmStatus() {
with(binding) {
val isGroupNameBlank = groupName.text?.isBlank() == true
val name = groupName.text.toString()
groupName.error = getGroupNameError(name)

groupName.error = if (isGroupNameBlank) {
requireContext().getString(R.string.group_name_error)
} else {
null
}
confirm.isEnabled = groupName.error == null && group.channels.isNotEmpty()
}
}

confirm.isEnabled = !isGroupNameBlank && group.channels.isNotEmpty()
private fun getGroupNameError(name: String): String? {
if (name.isBlank()) {
return getString(R.string.group_name_error_empty)
}

val groupExists = runBlocking(Dispatchers.IO) {
DatabaseHolder.Database.subscriptionGroupsDao().exists(name)
}
if (groupExists) {
return getString(R.string.group_name_error_exists)
}

return null
}
}
3 changes: 2 additions & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,8 @@
<string name="channel_groups">Channel groups</string>
<string name="new_group">New</string>
<string name="group_name">Group name</string>
<string name="group_name_error">Please enter a name</string>
<string name="group_name_error_empty">Please enter a name</string>
<string name="group_name_error_exists">Please choose a name that is unique</string>
<string name="edit_group">Edit group</string>
<string name="play_automatically">Play automatically</string>
<string name="play_automatically_summary">Start playing video automatically when selecting</string>
Expand Down

0 comments on commit b2f3c8e

Please sign in to comment.