mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[file-history] move updateAlarm to FileHistoryRefresher
It is logical that a refresher does refresh, not the panel.
This commit is contained in:
@@ -55,8 +55,10 @@ import com.intellij.ui.dualView.DualViewColumnInfo;
|
||||
import com.intellij.ui.dualView.TreeTableView;
|
||||
import com.intellij.ui.speedSearch.SpeedSearchUtil;
|
||||
import com.intellij.ui.table.TableView;
|
||||
import com.intellij.util.*;
|
||||
import com.intellij.util.concurrency.SequentialTaskExecutor;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import com.intellij.util.TreeItem;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.text.DateFormatUtil;
|
||||
import com.intellij.util.ui.ColumnInfo;
|
||||
@@ -78,8 +80,6 @@ import java.awt.datatransfer.StringSelection;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import static java.util.Comparator.comparing;
|
||||
import static java.util.Comparator.reverseOrder;
|
||||
@@ -88,7 +88,6 @@ import static java.util.Comparator.reverseOrder;
|
||||
* author: lesya
|
||||
*/
|
||||
public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton implements EditorColorsListener, CopyProvider {
|
||||
private static final ExecutorService ourExecutor = SequentialTaskExecutor.createSequentialApplicationPoolExecutor("File History Refresh");
|
||||
private static final String COMMIT_MESSAGE_TITLE = VcsBundle.message("label.selected.revision.commit.message");
|
||||
private static final String VCS_HISTORY_POPUP_ACTION_GROUP = "VcsHistoryInternalGroup.Popup";
|
||||
private static final String VCS_HISTORY_TOOLBAR_ACTION_GROUP = "VcsHistoryInternalGroup.Toolbar";
|
||||
@@ -172,35 +171,6 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton impleme
|
||||
if (isStaticEmbedded) {
|
||||
setIsStaticAndEmbedded(true);
|
||||
}
|
||||
|
||||
int delayMillis = 20_000;
|
||||
Alarm updateAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD, this);
|
||||
// todo react to event?
|
||||
updateAlarm.addRequest(new Runnable() {
|
||||
Future<?> lastTask;
|
||||
|
||||
public void run() {
|
||||
if (lastTask != null) {
|
||||
lastTask.cancel(false);
|
||||
}
|
||||
if (myVcs.getProject().isDisposed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
updateAlarm.cancelAllRequests();
|
||||
if (updateAlarm.isDisposed()) return;
|
||||
updateAlarm.addRequest(this, delayMillis);
|
||||
|
||||
if (!ApplicationManager.getApplication().isActive()) return;
|
||||
|
||||
lastTask = ourExecutor.submit(() -> {
|
||||
if (!updateAlarm.isDisposed() && myHistorySession.shouldBeRefreshed()) {
|
||||
ApplicationManager.getApplication().invokeLater(() -> myRefresherI.refresh(true));
|
||||
}
|
||||
});
|
||||
}
|
||||
}, delayMillis);
|
||||
|
||||
init();
|
||||
|
||||
chooseView();
|
||||
|
||||
@@ -15,13 +15,19 @@
|
||||
*/
|
||||
package com.intellij.openapi.vcs.history;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.vcs.AbstractVcs;
|
||||
import com.intellij.openapi.vcs.FilePath;
|
||||
import com.intellij.openapi.vcs.impl.VcsBackgroundableActions;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.concurrency.SequentialTaskExecutor;
|
||||
import com.intellij.vcs.history.VcsHistoryProviderEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
/**
|
||||
* Refreshes file history.
|
||||
*
|
||||
@@ -29,6 +35,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
* @author Kirill Likhodedov
|
||||
*/
|
||||
public class FileHistoryRefresher implements FileHistoryRefresherI {
|
||||
private static final ExecutorService ourExecutor = SequentialTaskExecutor.createSequentialApplicationPoolExecutor("File History Refresh");
|
||||
private final FileHistorySessionPartner mySessionPartner;
|
||||
private final VcsHistoryProvider myVcsHistoryProvider;
|
||||
private final FilePath myPath;
|
||||
@@ -58,6 +65,33 @@ public class FileHistoryRefresher implements FileHistoryRefresherI {
|
||||
myVcs = vcs;
|
||||
myStartingRevisionNumber = startingRevisionNumber;
|
||||
mySessionPartner = new FileHistorySessionPartner(vcsHistoryProvider, path, startingRevisionNumber, vcs, this);
|
||||
|
||||
int delayMillis = 20_000;
|
||||
Alarm updateAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD, mySessionPartner);
|
||||
updateAlarm.addRequest(new Runnable() {
|
||||
Future<?> lastTask;
|
||||
|
||||
public void run() {
|
||||
if (lastTask != null) {
|
||||
lastTask.cancel(false);
|
||||
}
|
||||
if (myVcs.getProject().isDisposed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
updateAlarm.cancelAllRequests();
|
||||
if (updateAlarm.isDisposed()) return;
|
||||
updateAlarm.addRequest(this, delayMillis);
|
||||
|
||||
if (!ApplicationManager.getApplication().isActive()) return;
|
||||
|
||||
lastTask = ourExecutor.submit(() -> {
|
||||
if (!updateAlarm.isDisposed() && mySessionPartner.shouldBeRefreshed()) {
|
||||
ApplicationManager.getApplication().invokeLater(() -> refresh(true));
|
||||
}
|
||||
});
|
||||
}
|
||||
}, delayMillis);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+15
-1
@@ -15,11 +15,13 @@
|
||||
*/
|
||||
package com.intellij.openapi.vcs.history;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.VcsInternalDataKeys;
|
||||
import com.intellij.openapi.actionSystem.DataProvider;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.MessageType;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.vcs.AbstractVcs;
|
||||
import com.intellij.openapi.vcs.FilePath;
|
||||
import com.intellij.openapi.vcs.VcsBundle;
|
||||
@@ -34,6 +36,7 @@ import com.intellij.util.BufferedListConsumer;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.ContentUtilEx;
|
||||
import com.intellij.vcsUtil.VcsUtil;
|
||||
import org.jetbrains.annotations.CalledInBackground;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -42,7 +45,7 @@ import java.util.List;
|
||||
|
||||
import static com.intellij.openapi.vcs.history.FileHistoryPanelImpl.sameHistories;
|
||||
|
||||
public class FileHistorySessionPartner implements VcsHistorySessionConsumer {
|
||||
public class FileHistorySessionPartner implements VcsHistorySessionConsumer, Disposable {
|
||||
|
||||
@NotNull private final AbstractVcs myVcs;
|
||||
@NotNull private final VcsHistoryProvider myVcsHistoryProvider;
|
||||
@@ -81,6 +84,8 @@ public class FileHistorySessionPartner implements VcsHistorySessionConsumer {
|
||||
consumerRunnable.run();
|
||||
}
|
||||
};
|
||||
|
||||
Disposer.register(myFileHistoryPanel, this);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -93,6 +98,11 @@ public class FileHistorySessionPartner implements VcsHistorySessionConsumer {
|
||||
return component == null ? null : VcsInternalDataKeys.FILE_HISTORY_REFRESHER.getData((DataProvider)component);
|
||||
}
|
||||
|
||||
@CalledInBackground
|
||||
public boolean shouldBeRefreshed() {
|
||||
return mySession.shouldBeRefreshed();
|
||||
}
|
||||
|
||||
public void acceptRevision(VcsFileRevision revision) {
|
||||
myLimitHistoryCheck.checkNumber();
|
||||
myBuffer.consumeOne(revision);
|
||||
@@ -165,4 +175,8 @@ public class FileHistorySessionPartner implements VcsHistorySessionConsumer {
|
||||
myFileHistoryPanel.finishRefresh();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user