blob: 5557e4e7e8c80a8db233e714b5e151d3717e20a9 [file] [log] [blame]
/*
* Copyright 2016 The Bazel Authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.idea.blaze.base.scope.scopes;
import com.google.idea.blaze.base.scope.BlazeContext;
import com.google.idea.blaze.base.scope.BlazeScope;
import com.google.idea.blaze.base.scope.output.PrintOutput;
import com.google.idea.blaze.base.scope.output.StatusOutput;
import com.intellij.openapi.project.Project;
import com.intellij.ui.SystemNotifications;
import org.jetbrains.annotations.NotNull;
/** Notifies the user with a system notification when the scope ends. */
public class NotificationScope implements BlazeScope {
private static final long NOTIFICATION_THRESHOLD_MS = 0;
@NotNull private Project project;
@NotNull private final String notificationName;
@NotNull private final String notificationTitle;
@NotNull private final String notificationText;
@NotNull private final String notificationErrorText;
private long startTime;
public NotificationScope(
@NotNull Project project,
@NotNull String notificationName,
@NotNull String notificationTitle,
@NotNull String notificationText,
@NotNull String notificationErrorText) {
this.project = project;
this.notificationName = notificationName;
this.notificationTitle = notificationTitle;
this.notificationText = notificationText;
this.notificationErrorText = notificationErrorText;
}
@Override
public void onScopeBegin(@NotNull BlazeContext context) {
startTime = System.currentTimeMillis();
}
@Override
public void onScopeEnd(@NotNull BlazeContext context) {
if (project.isDisposed()) {
return;
}
if (context.isCancelled()) {
context.output(new StatusOutput(notificationName + " cancelled"));
return;
}
long duration = System.currentTimeMillis() - startTime;
if (duration < NOTIFICATION_THRESHOLD_MS) {
return;
}
String notificationText =
!context.hasErrors() ? this.notificationText : this.notificationErrorText;
SystemNotifications.getInstance().notify(notificationName, notificationTitle, notificationText);
if (context.hasErrors()) {
context.output(PrintOutput.error(notificationName + " failed"));
}
}
}