Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update drag and drop logic #117

Merged
merged 1 commit into from
Oct 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion desktop/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ dependencies {
implementation(project(":integration:server"))
implementation(project(":desktop:shared"))
implementation(project(":desktop:tray"))
implementation(project(":desktop:external-draggable"))
implementation(project(":desktop:custom-window-frame"))
implementation(project(":shared:app-utils"))
implementation(project(":shared:utils"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -674,16 +674,14 @@ class HomeComponent(
currentActiveDrops.update { parsedLinks }
}

fun onExternalFilesDraggedIn(getFilePaths: () -> List<String>) {
val filePaths = getFilePaths().map {
URI.create(it)
}
.mapNotNull {
runCatching { File(it.path) }.getOrNull()
}
fun onExternalFilesDraggedIn(getFilePaths: () -> List<File>) {
val filePaths = kotlin.runCatching { getFilePaths() }
.getOrNull()?.filter { it.length() <= 1024 * 1024 } ?: return
onExternalTextDraggedIn {
filePaths.first()
.readText()
filePaths
.firstOrNull()
?.readText()
.orEmpty()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import com.abdownloadmanager.desktop.ui.widget.Text
import androidx.compose.runtime.*
import com.abdownloadmanager.desktop.utils.externaldraggable.onExternalDrag
import androidx.compose.ui.*
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip
Expand All @@ -32,19 +31,24 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import com.abdownloadmanager.desktop.ui.widget.ActionButton
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.foundation.draganddrop.dragAndDropTarget
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsFocusedAsState
import androidx.compose.ui.draganddrop.DragAndDropEvent
import androidx.compose.ui.draganddrop.DragAndDropTarget
import androidx.compose.ui.draganddrop.awtTransferable
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalWindowInfo
import androidx.compose.ui.window.Dialog
import com.abdownloadmanager.desktop.ui.customwindow.*
import com.abdownloadmanager.desktop.ui.widget.menu.ShowOptionsInDropDown
import com.abdownloadmanager.desktop.utils.externaldraggable.DragData
import com.abdownloadmanager.utils.category.Category
import com.abdownloadmanager.utils.category.rememberIconPainter
import ir.amirab.util.compose.action.MenuItem
import java.awt.datatransfer.DataFlavor
import java.io.File


@Composable
Expand Down Expand Up @@ -162,27 +166,40 @@ fun HomePage(component: HomeComponent) {
Box(
Modifier
.fillMaxSize()
.onExternalDrag(
onDragStart = {
isDragging = true
it.availableDragData.get<DragData.Text>()?.also {
component.onExternalTextDraggedIn { it.readText() }
return@onExternalDrag
}
it.availableDragData.get<DragData.FilesList>()?.also {
//Caution FileList::readFiles sometimes throws exception
component.onExternalFilesDraggedIn { it.readFiles() }
return@onExternalDrag
}
.dragAndDropTarget(
shouldStartDragAndDrop = {
it.awtTransferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor) ||
it.awtTransferable.isDataFlavorSupported(DataFlavor.stringFlavor)
},
onDragExit = {
isDragging = false
component.onDragExit()
target = remember {
object : DragAndDropTarget {
override fun onStarted(event: DragAndDropEvent) {
isDragging = true
if (event.awtTransferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
component.onExternalTextDraggedIn { (event.awtTransferable.getTransferData(DataFlavor.stringFlavor) as String) }
return
}
if (event.awtTransferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
component.onExternalFilesDraggedIn {
(event.awtTransferable.getTransferData(DataFlavor.javaFileListFlavor) as List<File>)
}
return
}
}

override fun onEnded(event: DragAndDropEvent) {
isDragging = false
component.onDragExit()
}

override fun onDrop(event: DragAndDropEvent): Boolean {
isDragging = false
component.onDropped()
return true
}
}
}
) {
isDragging = false
component.onDropped()
}
)
) {
Column(
Modifier.alpha(
Expand Down
7 changes: 0 additions & 7 deletions desktop/external-draggable/build.gradle.kts

This file was deleted.

Loading