From 8b19fb390cfcdb36b34e1326cf1e5be393b5bc9c Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Sat, 16 Aug 2014 14:31:42 +0400 Subject: [PATCH] bundle introduction course to PyCharm Edu --- python/edu/build/pycharm_edu_build.gant | 8 ++- .../resources/META-INF/plugin.xml | 7 ++ .../resources/courses/introduction_course.zip | Bin 0 -> 82983 bytes .../python/edu/StudyInitialConfigurator.java | 67 ++++++++++++++++++ 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 python/edu/learn-python/resources/courses/introduction_course.zip create mode 100644 python/edu/learn-python/src/com/jetbrains/python/edu/StudyInitialConfigurator.java diff --git a/python/edu/build/pycharm_edu_build.gant b/python/edu/build/pycharm_edu_build.gant index b4dea814d177..58b04d7f2ed1 100644 --- a/python/edu/build/pycharm_edu_build.gant +++ b/python/edu/build/pycharm_edu_build.gant @@ -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) diff --git a/python/edu/learn-python/resources/META-INF/plugin.xml b/python/edu/learn-python/resources/META-INF/plugin.xml index a2d3246f3f1a..d6e2e5b6cd76 100644 --- a/python/edu/learn-python/resources/META-INF/plugin.xml +++ b/python/edu/learn-python/resources/META-INF/plugin.xml @@ -31,6 +31,13 @@ + + + com.jetbrains.python.edu.StudyInitialConfigurator + + + + diff --git a/python/edu/learn-python/resources/courses/introduction_course.zip b/python/edu/learn-python/resources/courses/introduction_course.zip new file mode 100644 index 0000000000000000000000000000000000000000..af5094a595d7ac3e09f7ed4751d623f55719e80a GIT binary patch literal 82983 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 UjWx->?=$#2I1o0~Z<7D}Keu-kEdT%j literal 0 HcmV?d00001 diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInitialConfigurator.java b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInitialConfigurator.java new file mode 100644 index 000000000000..34776f3fabd2 --- /dev/null +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInitialConfigurator.java @@ -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"); + } + +}