Skip to content

Commit 4193d14

Browse files
authored
[IJ Plugin] Fix pulling file from device not working on AS Koala (apollographql#5822)
1 parent cf6359f commit 4193d14

File tree

1 file changed

+10
-11
lines changed
  • intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/normalizedcache

1 file changed

+10
-11
lines changed

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/normalizedcache/PullFromDevice.kt

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package com.apollographql.ijplugin.normalizedcache
22

3+
import com.android.adblib.syncRecv
34
import com.android.ddmlib.AndroidDebugBridge
45
import com.android.ddmlib.IDevice
5-
import com.android.ddmlib.SyncService
66
import com.android.tools.idea.adb.AdbShellCommandsUtil
7+
import com.android.tools.idea.adblib.AdbLibApplicationService
8+
import com.android.tools.idea.adblib.ddmlibcompatibility.toDeviceSelector
79
import com.apollographql.ijplugin.util.execute
810
import com.apollographql.ijplugin.util.executeCatching
911
import com.apollographql.ijplugin.util.logd
1012
import com.apollographql.ijplugin.util.logw
1113
import java.io.File
14+
import java.nio.file.Paths
1215
import java.util.concurrent.TimeUnit
1316

1417
val isAndroidPluginPresent = try {
@@ -60,7 +63,7 @@ fun IDevice.getDatabaseList(packageName: String, databasesDir: String): Result<L
6063
return Result.success(result.output.filter { it.isDatabaseFileName() }.sorted())
6164
}
6265

63-
fun pullFile(device: IDevice, appPackageName: String, remoteDirName: String, remoteFileName: String): Result<File> {
66+
suspend fun pullFile(device: IDevice, appPackageName: String, remoteDirName: String, remoteFileName: String): Result<File> {
6467
val remoteFilePath = "$remoteDirName/$remoteFileName"
6568
val localFile = File.createTempFile(remoteFileName.substringBeforeLast(".") + "-tmp", ".db")
6669
logd("Pulling $remoteFilePath to ${localFile.absolutePath}")
@@ -76,7 +79,11 @@ fun pullFile(device: IDevice, appPackageName: String, remoteDirName: String, rem
7679
throw Exception("'copy' command failed")
7780
}
7881
try {
79-
device.syncService.pullFile(intermediateRemoteFilePath, localFile.absolutePath, NullSyncProgressMonitor)
82+
val adbLibSession = AdbLibApplicationService.instance.session
83+
val fileChannel = adbLibSession.channelFactory.createFile(Paths.get(localFile.absolutePath))
84+
fileChannel.use {
85+
adbLibSession.deviceServices.syncRecv(device.toDeviceSelector(), intermediateRemoteFilePath, fileChannel)
86+
}
8087
} finally {
8188
commandResult = shellCommandsUtil.execute("rm $intermediateRemoteFilePath")
8289
if (commandResult.isError) {
@@ -87,13 +94,5 @@ fun pullFile(device: IDevice, appPackageName: String, remoteDirName: String, rem
8794
}
8895
}
8996

90-
private object NullSyncProgressMonitor : SyncService.ISyncProgressMonitor {
91-
override fun isCanceled() = false
92-
override fun start(totalWork: Int) {}
93-
override fun startSubTask(name: String) {}
94-
override fun advance(work: Int) {}
95-
override fun stop() {}
96-
}
97-
9897
// See https://www.sqlite.org/tempfiles.html
9998
fun String.isDatabaseFileName() = isNotEmpty() && !endsWith("-journal") && !endsWith("-wal") && !endsWith("-shm")

0 commit comments

Comments
 (0)