mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-65719 Doesn't reconnect to task server (Pivotal tracker) after lost connection
This commit is contained in:
@@ -23,6 +23,7 @@ import com.intellij.ui.ColoredTreeCellRenderer;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.EventDispatcher;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.ConcurrentHashSet;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.Convertor;
|
||||
import com.intellij.util.xmlb.XmlSerializationException;
|
||||
@@ -111,7 +112,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
|
||||
|
||||
private final List<TaskRepository> myRepositories = new ArrayList<TaskRepository>();
|
||||
private final EventDispatcher<TaskListener> myDispatcher = EventDispatcher.create(TaskListener.class);
|
||||
private Set<TaskRepository> myBadRepositories = new HashSet<TaskRepository>();
|
||||
private Set<TaskRepository> myBadRepositories = new ConcurrentHashSet<TaskRepository>();
|
||||
|
||||
public TaskManagerImpl(Project project,
|
||||
WorkingContextManager contextManager,
|
||||
@@ -227,7 +228,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
|
||||
|
||||
@Override
|
||||
public List<Task> getIssues(String query) {
|
||||
List<Task> tasks = getIssuesFromRepositories(query, 50, 0);
|
||||
List<Task> tasks = getIssuesFromRepositories(query, 50, 0, true);
|
||||
synchronized (myIssueCache) {
|
||||
myTemporaryCache.clear();
|
||||
myTemporaryCache.putAll(ContainerUtil.assignKeys(tasks.iterator(), KEY_CONVERTOR));
|
||||
@@ -416,6 +417,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
|
||||
ProgressManager.getInstance().run(task);
|
||||
Exception e = task.myException;
|
||||
if (e == null) {
|
||||
myBadRepositories.remove(repository);
|
||||
Messages.showMessageDialog(myProject, "Connection is successful", "Connection", Messages.getInformationIcon());
|
||||
}
|
||||
else if (!(e instanceof ProcessCanceledException)) {
|
||||
@@ -634,7 +636,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
|
||||
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
List<Task> issues = getIssuesFromRepositories(null, myConfig.updateIssuesCount, 0);
|
||||
List<Task> issues = getIssuesFromRepositories(null, myConfig.updateIssuesCount, 0, false);
|
||||
|
||||
synchronized (myIssueCache) {
|
||||
myIssueCache.clear();
|
||||
@@ -665,14 +667,15 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
|
||||
});
|
||||
}
|
||||
|
||||
private List<Task> getIssuesFromRepositories(String request, int max, long since) {
|
||||
private List<Task> getIssuesFromRepositories(String request, int max, long since, boolean forceRequest) {
|
||||
List<Task> issues = new ArrayList<Task>();
|
||||
for (final TaskRepository repository : getAllRepositories()) {
|
||||
if (!repository.isConfigured() || myBadRepositories.contains(repository)) {
|
||||
if (!repository.isConfigured() || (!forceRequest && myBadRepositories.contains(repository))) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
Task[] tasks = repository.getIssues(request, max, since);
|
||||
myBadRepositories.remove(repository);
|
||||
ContainerUtil.addAll(issues, tasks);
|
||||
}
|
||||
catch (Exception e) {
|
||||
|
||||
Reference in New Issue
Block a user