1
1
package com.apollographql.ijplugin.normalizedcache
2
2
3
+ import com.android.adblib.syncRecv
3
4
import com.android.ddmlib.AndroidDebugBridge
4
5
import com.android.ddmlib.IDevice
5
- import com.android.ddmlib.SyncService
6
6
import com.android.tools.idea.adb.AdbShellCommandsUtil
7
+ import com.android.tools.idea.adblib.AdbLibApplicationService
8
+ import com.android.tools.idea.adblib.ddmlibcompatibility.toDeviceSelector
7
9
import com.apollographql.ijplugin.util.execute
8
10
import com.apollographql.ijplugin.util.executeCatching
9
11
import com.apollographql.ijplugin.util.logd
10
12
import com.apollographql.ijplugin.util.logw
11
13
import java.io.File
14
+ import java.nio.file.Paths
12
15
import java.util.concurrent.TimeUnit
13
16
14
17
val isAndroidPluginPresent = try {
@@ -60,7 +63,7 @@ fun IDevice.getDatabaseList(packageName: String, databasesDir: String): Result<L
60
63
return Result .success(result.output.filter { it.isDatabaseFileName() }.sorted())
61
64
}
62
65
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 > {
64
67
val remoteFilePath = " $remoteDirName /$remoteFileName "
65
68
val localFile = File .createTempFile(remoteFileName.substringBeforeLast(" ." ) + " -tmp" , " .db" )
66
69
logd(" Pulling $remoteFilePath to ${localFile.absolutePath} " )
@@ -76,7 +79,11 @@ fun pullFile(device: IDevice, appPackageName: String, remoteDirName: String, rem
76
79
throw Exception (" 'copy' command failed" )
77
80
}
78
81
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
+ }
80
87
} finally {
81
88
commandResult = shellCommandsUtil.execute(" rm $intermediateRemoteFilePath " )
82
89
if (commandResult.isError) {
@@ -87,13 +94,5 @@ fun pullFile(device: IDevice, appPackageName: String, remoteDirName: String, rem
87
94
}
88
95
}
89
96
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
-
98
97
// See https://www.sqlite.org/tempfiles.html
99
98
fun String.isDatabaseFileName () = isNotEmpty() && ! endsWith(" -journal" ) && ! endsWith(" -wal" ) && ! endsWith(" -shm" )
0 commit comments