/* * 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 limitedwip.watchdog.components; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.components.AbstractProjectComponent; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import limitedwip.common.LimitedWipCheckin; import limitedwip.common.TimerComponent; import limitedwip.common.settings.LimitedWIPSettings; import limitedwip.common.settings.LimitedWipConfigurable; import limitedwip.watchdog.Watchdog; public class WatchdogComponent extends AbstractProjectComponent { private Watchdog watchdog; private TimerComponent timer; private IdeAdapter ideAdapter; public WatchdogComponent(Project project) { super(project); timer = ApplicationManager.getApplication().getComponent(TimerComponent.class); } @Override public void projectOpened() { LimitedWIPSettings settings = ServiceManager.getService(LimitedWIPSettings.class); final ChangeSizeCalculator changeSizeCalculator = new ChangeSizeCalculator(myProject); ideAdapter = new IdeAdapter(myProject, changeSizeCalculator); watchdog = new Watchdog(ideAdapter).init(convert(settings)); timer.addListener(new TimerComponent.Listener() { @Override public void onUpdate(final int seconds) { ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { // Project can be closed (disposed) during handover between timer thread and EDT. if (myProject.isDisposed()) return; watchdog.onTimer(seconds); changeSizeCalculator.onTimer(); } }, ModalityState.any()); } }, myProject); LimitedWipConfigurable.registerSettingsListener(myProject, new LimitedWipConfigurable.Listener() { @Override public void onSettingsUpdate(LimitedWIPSettings settings) { watchdog.onSettings(convert(settings)); } }); LimitedWipCheckin.registerListener(myProject, new LimitedWipCheckin.Listener() { @Override public void onSuccessfulCheckin(boolean allFileAreCommitted) { watchdog.onCommit(); } }); } public int currentChangeListSize() { return ideAdapter.currentChangeListSizeInLines().value; } public void toggleSkipNotificationsUntilCommit() { watchdog.toggleSkipNotificationsUntilCommit(); } public void skipNotificationsUntilCommit(boolean value) { watchdog.skipNotificationsUntilCommit(value); } private static Watchdog.Settings convert(LimitedWIPSettings settings) { return new Watchdog.Settings( settings.watchdogEnabled, settings.maxLinesInChange, settings.notificationIntervalInSeconds(), settings.showRemainingChangesInToolbar ); } }