import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
+import com.intellij.openapi.util.ThrowableComputable;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
private final List<SettingsListener> myListeners = ContainerUtil.newArrayList();
public StepicUser myUser;
private List<CourseInfo> myCourses = new ArrayList<>();
- private List<Integer> myEnrolledCoursesIds = new ArrayList<>();
+ private List<Integer> myEnrolledCoursesIds = new ArrayList<>();
protected CourseInfo mySelectedCourseInfo;
public void setCourses(List<CourseInfo> courses) {
public boolean isLoggedIn() {
return myUser != null && !StringUtil.isEmptyOrSpaces(myUser.getPassword()) && !StringUtil.isEmptyOrSpaces(myUser.getEmail());
}
-
+
public void setEnrolledCoursesIds(@NotNull final List<Integer> coursesIds) {
myEnrolledCoursesIds = coursesIds;
}
final Course course = getCourse(project);
if (course == null) {
LOG.warn("Course is null");
+ Messages.showWarningDialog("Some problems occurred while creating the course", "Error in Course Creation");
return;
}
final File courseDirectory = StudyUtils.getCourseDirectory(project, course);
StudyTaskManager.getInstance(project).setCourse(course);
ApplicationManager.getApplication().runWriteAction(() -> {
- StudyGenerator.createCourse(course, baseDir, courseDirectory, project);
- course.setCourseDirectory(courseDirectory.getAbsolutePath());
- VirtualFileManager.getInstance().refreshWithoutFileWatcher(true);
- StudyProjectComponent.getInstance(project).registerStudyToolWindow(course);
- openFirstTask(course, project);
- });
+ StudyGenerator.createCourse(course, baseDir, courseDirectory, project);
+ course.setCourseDirectory(courseDirectory.getAbsolutePath());
+ VirtualFileManager.getInstance().refreshWithoutFileWatcher(true);
+ StudyProjectComponent.getInstance(project).registerStudyToolWindow(course);
+ openFirstTask(course, project);
+ });
}
@Nullable
protected Course getCourse(@NotNull final Project project) {
+
final File courseFile = new File(new File(OUR_COURSES_DIR, mySelectedCourseInfo.getName()), EduNames.COURSE_META_FILE);
if (courseFile.exists()) {
return readCourseFromCache(courseFile, false);
return readCourseFromCache(adaptiveCourseFile, true);
}
}
- final Course course = EduStepicConnector.getCourse(project, mySelectedCourseInfo);
- if (course != null) {
- flushCourse(project, course);
- course.initCourse(false);
- }
- return course;
+ return ProgressManager.getInstance().runProcessWithProgressSynchronously(new ThrowableComputable<Course, RuntimeException>() {
+ @Override
+ public Course compute() throws RuntimeException {
+ ProgressManager.getInstance().getProgressIndicator().setIndeterminate(true);
+ return execCancelable(() -> {
+
+ final Course course = EduStepicConnector.getCourse(project, mySelectedCourseInfo);
+ if (course != null) {
+ flushCourse(project, course);
+ course.initCourse(false);
+ }
+ return course;
+ });
+ }
+ }, "Creating Course", true, project);
}
@Nullable
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.ui.MessageType;
+import com.intellij.openapi.ui.popup.Balloon;
+import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
+import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
public static final String PYTHON27 = "python27";
public static final String PYTHON3 = "python3";
private static final Logger LOG = Logger.getInstance(EduAdaptiveStepicConnector.class);
+ private static final int CONNECTION_TIMEOUT = 60 * 1000;
@Nullable
public static Task getNextRecommendation(@NotNull final Project project, @NotNull Course course) {
.build();
final HttpGet request = new HttpGet(uri);
setHeaders(request, EduStepicNames.CONTENT_TYPE_APPL_JSON);
+ setTimeout(request);
final CloseableHttpResponse response = client.execute(request);
final StatusLine statusLine = response.getStatusLine();
}
catch (IOException e) {
LOG.warn(e.getMessage());
+
+ final String connectionMessages = "Connection problems, Please, try again";
+ final Balloon balloon =
+ JBPopupFactory.getInstance().createHtmlTextBalloonBuilder(connectionMessages, MessageType.ERROR, null)
+ .createBalloon();
+ ApplicationManager.getApplication().invokeLater(() -> {
+ if (StudyUtils.getSelectedEditor(project) != null) {
+ StudyUtils.showCheckPopUp(project, balloon);
+ }
+ });
+
}
catch (URISyntaxException e) {
LOG.warn(e.getMessage());
return null;
}
+ private static void setTimeout(HttpGet request) {
+ final RequestConfig requestConfig = RequestConfig.custom()
+ .setConnectionRequestTimeout(CONNECTION_TIMEOUT)
+ .setConnectTimeout(CONNECTION_TIMEOUT)
+ .setSocketTimeout(CONNECTION_TIMEOUT)
+ .build();
+ request.setConfig(requestConfig);
+ }
+
+ private static void setTimeout(HttpPost request) {
+ final RequestConfig requestConfig = RequestConfig.custom()
+ .setConnectionRequestTimeout(CONNECTION_TIMEOUT)
+ .setConnectTimeout(CONNECTION_TIMEOUT)
+ .setSocketTimeout(CONNECTION_TIMEOUT)
+ .build();
+ request.setConfig(requestConfig);
+ }
+
private static void viewAllSteps(CloseableHttpClient client, int lessonId) throws URISyntaxException, IOException {
final URI unitsUrl = new URIBuilder(EduStepicNames.UNITS).addParameter(EduNames.LESSON, String.valueOf(lessonId)).build();
final StepicWrappers.UnitContainer unitContainer = getFromStepic(unitsUrl.toString(), StepicWrappers.UnitContainer.class);
post.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON));
final CloseableHttpClient client = getHttpClient(project);
setHeaders(post, EduStepicNames.CONTENT_TYPE_APPL_JSON);
+ setTimeout(post);
try {
final CloseableHttpResponse execute = client.execute(post);
return execute.getStatusLine().getStatusCode() == HttpStatus.SC_CREATED;
new StepicWrappers.SubmissionToPostWrapper(String.valueOf(attemptId), language, text);
final HttpPost httpPost = new HttpPost(EduStepicNames.STEPIC_API_URL + EduStepicNames.SUBMISSIONS);
setHeaders(httpPost, EduStepicNames.CONTENT_TYPE_APPL_JSON);
+ setTimeout(httpPost);
try {
httpPost.setEntity(new StringEntity(new Gson().toJson(submissionToPostWrapper)));
}
.build();
final HttpGet httpGet = new HttpGet(submissionURI);
setHeaders(httpGet, EduStepicNames.CONTENT_TYPE_APPL_JSON);
+ setTimeout(httpGet);
final CloseableHttpResponse httpResponse = client.execute(httpGet);
final String entity = EntityUtils.toString(httpResponse.getEntity());
wrapper = new Gson().fromJson(entity, StepicWrappers.ResultSubmissionWrapper.class);
final CloseableHttpClient client = getHttpClient(project);
setHeaders(post, EduStepicNames.CONTENT_TYPE_APPL_JSON);
+ setTimeout(post);
final CloseableHttpResponse httpResponse = client.execute(post);
final String entity = EntityUtils.toString(httpResponse.getEntity());
final StepicWrappers.AttemptContainer container =