bundle introduction course to PyCharm Edu

This commit is contained in:
Ekaterina Tuzova
2014-08-16 14:31:42 +04:00
parent 317b7304fb
commit 8b19fb390c
4 changed files with 81 additions and 1 deletions
+7 -1
View File
@@ -132,6 +132,8 @@ target('default': "Build artifacts") {
exclude(name: "intentionDescriptions")
exclude(name: "tips/**/*")
exclude(name: "tips")
exclude(name: "courses")
exclude(name: "courses/*")
}
zipSources(home, paths.artifacts)
@@ -205,7 +207,11 @@ public layoutEducational(String classesPath, Set usedJars) {
private layoutPlugins(layouts) {
dir("plugins") {
layouts.layoutPlugin("learn-python")
layouts.layoutPlugin("learn-python") {
dir("courses") {
fileset(dir: "$pythonEduHome/learn-python/resources/courses")
}
}
}
layouts.layoutCommunityPlugins(ch)
@@ -31,6 +31,13 @@
</component>
</project-components>
<application-components>
<component>
<implementation-class>com.jetbrains.python.edu.StudyInitialConfigurator</implementation-class>
<headless-implementation-class/>
</component>
</application-components>
<actions>
<action id="CheckAction" class="com.jetbrains.python.edu.actions.StudyCheckAction" text="check"
description="Runs tests for current tasks" icon="/icons/icon.jpg">
@@ -0,0 +1,67 @@
package com.jetbrains.python.edu;
import com.intellij.codeInsight.CodeInsightSettings;
import com.intellij.ide.RecentProjectsManagerBase;
import com.intellij.ide.ui.UISettings;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.project.ex.ProjectManagerEx;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.platform.templates.github.ZipUtil;
import com.intellij.util.PathUtil;
import com.intellij.util.messages.MessageBus;
import org.jetbrains.annotations.NonNls;
import java.io.File;
import java.io.IOException;
@SuppressWarnings({"UtilityClassWithoutPrivateConstructor", "UtilityClassWithPublicConstructor"})
public class StudyInitialConfigurator {
private static final Logger LOG = Logger.getInstance(StudyInitialConfigurator.class.getName()
);
@NonNls private static final String CONFIGURED = "StudyPyCharm.InitialConfiguration";
/**
* @noinspection UnusedParameters
*/
public StudyInitialConfigurator(MessageBus bus,
UISettings uiSettings,
CodeInsightSettings codeInsightSettings,
final PropertiesComponent propertiesComponent,
FileTypeManager fileTypeManager,
final ProjectManagerEx projectManager,
RecentProjectsManagerBase recentProjectsManager) {
if (!propertiesComponent.getBoolean(CONFIGURED, false)) {
final File file = new File(getCoursesRoot(), "introduction_course.zip");
final File newCourses = new File(PathManager.getConfigPath(), "courses");
try {
FileUtil.createDirectory(newCourses);
String fileName = file.getName();
String unzippedName = fileName.substring(0, fileName.indexOf("."));
File courseDir = new File(newCourses, unzippedName);
ZipUtil.unzip(null, courseDir, file, null, null, true);
}
catch (IOException e) {
LOG.warn("Couldn't copy bundled courses " + e);
}
}
}
public static File getCoursesRoot() {
@NonNls String jarPath = PathUtil.getJarPathForClass(StudyInitialConfigurator.class);
if (jarPath.endsWith(".jar")) {
final File jarFile = new File(jarPath);
File pluginBaseDir = jarFile.getParentFile();
return new File(pluginBaseDir, "courses");
}
return new File(jarPath , "courses");
}
}