[file-history] move updateAlarm to FileHistoryRefresher

It is logical that a refresher does refresh, not the panel.
This commit is contained in:
Julia Beliaeva
2018-07-09 17:35:14 +03:00
parent 33f83a2373
commit be0beffd12
3 changed files with 53 additions and 35 deletions
@@ -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,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() {
}
}