mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge branch 'master' of git.labs.intellij.net:idea/community
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.openapi.vfs.impl.http;
|
||||
|
||||
import com.intellij.openapi.util.AsyncResult;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -34,4 +35,7 @@ public interface RemoteFileInfo {
|
||||
RemoteFileState getState();
|
||||
|
||||
void cancelDownloading();
|
||||
|
||||
@NotNull
|
||||
AsyncResult<VirtualFile> download();
|
||||
}
|
||||
|
||||
+45
-3
@@ -19,10 +19,11 @@ import com.intellij.openapi.application.Result;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.util.AsyncResult;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VfsBundle;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -142,7 +143,7 @@ public class RemoteFileInfoImpl implements RemoteContentProvider.DownloadingCall
|
||||
|
||||
VirtualFile localFile = new WriteAction<VirtualFile>() {
|
||||
@Override
|
||||
protected void run(final Result<VirtualFile> result) {
|
||||
protected void run(@NotNull final Result<VirtualFile> result) {
|
||||
final VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(localIOFile);
|
||||
if (file != null) {
|
||||
file.refresh(false, false);
|
||||
@@ -234,7 +235,7 @@ public class RemoteFileInfoImpl implements RemoteContentProvider.DownloadingCall
|
||||
myCancelled.set(true);
|
||||
if (myPrevLocalFile != null) {
|
||||
myLocalVirtualFile = myPrevLocalFile;
|
||||
myLocalFile = VfsUtil.virtualToIoFile(myLocalVirtualFile);
|
||||
myLocalFile = VfsUtilCore.virtualToIoFile(myLocalVirtualFile);
|
||||
myState = RemoteFileState.DOWNLOADED;
|
||||
myErrorMessage = null;
|
||||
}
|
||||
@@ -291,4 +292,45 @@ public class RemoteFileInfoImpl implements RemoteContentProvider.DownloadingCall
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public AsyncResult<VirtualFile> download() {
|
||||
synchronized (myLock) {
|
||||
switch (getState()) {
|
||||
case DOWNLOADING_NOT_STARTED:
|
||||
startDownloading();
|
||||
return createDownloadedCallback(this);
|
||||
case DOWNLOADING_IN_PROGRESS:
|
||||
return createDownloadedCallback(this);
|
||||
case DOWNLOADED:
|
||||
return new AsyncResult.Done<VirtualFile>(myLocalVirtualFile);
|
||||
|
||||
case ERROR_OCCURRED:
|
||||
default:
|
||||
return new AsyncResult.Rejected<VirtualFile>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static AsyncResult<VirtualFile> createDownloadedCallback(@NotNull RemoteFileInfo remoteFileInfo) {
|
||||
final AsyncResult<VirtualFile> callback = new AsyncResult<VirtualFile>();
|
||||
remoteFileInfo.addDownloadingListener(new FileDownloadingAdapter() {
|
||||
@Override
|
||||
public void fileDownloaded(VirtualFile localFile) {
|
||||
callback.setDone(localFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void errorOccurred(@NotNull String errorMessage) {
|
||||
callback.reject(errorMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void downloadingCancelled() {
|
||||
callback.setRejected();
|
||||
}
|
||||
});
|
||||
return callback;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user