package fr.adrienbrault.idea.symfony2plugin.webDeployment;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import fr.adrienbrault.idea.symfony2plugin.Settings;
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
import fr.adrienbrault.idea.symfony2plugin.webDeployment.utils.RemoteWebServerUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Timer;
import java.util.TimerTask;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class WebDeploymentProjectComponent implements ProjectComponent {
private Project project;
public WebDeploymentProjectComponent(Project project) {
this.project = project;
}
public void initComponent() {
}
public void disposeComponent() {
}
@NotNull
public String getComponentName() {
return "WebDeploymentProjectComponent";
}
public void projectOpened() {
if(!WebDeploymentUtil.isEnabled(project)) {
return;
}
// remote file downloader
if(Settings.getInstance(project).remoteDevFileScheduler) {
Symfony2ProjectComponent.getLogger().info("Starting Symfony webDeployment background scheduler");
DumbService.getInstance(project).smartInvokeLater(() -> new Timer().schedule(new MyTimerTask(), 1000, 300000));
}
}
public void projectClosed() {
if(RemoteWebServerUtil.STORAGE_INSTANCES.containsKey(project)) {
RemoteWebServerUtil.STORAGE_INSTANCES.remove(project);
}
}
private class MyTimerTask extends TimerTask {
@Override
public void run() {
if(!RemoteWebServerUtil.hasConfiguredRemoteFile(project)) {
return;
}
DumbService.getInstance(project).smartInvokeLater(() -> new Task.Backgroundable(project, "Symfony: Remote File Download", false) {
@Override
public void run(@NotNull ProgressIndicator indicator) {
Symfony2ProjectComponent.getLogger().info("Running background webDeployment dev download");
RemoteWebServerUtil.collectRemoteFiles(project);
}
}.queue());
}
}
}