package com.suyong.kakaobot; import android.os.Environment; import android.util.Log; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.mozilla.javascript.json.JsonParser; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; public class FileManager { private static final String PROJECT_DIRECTORY_PATH = "kakaobot"; private static File PROJECT_DIRECTORY = new File(Environment.getExternalStorageDirectory(), PROJECT_DIRECTORY_PATH); public static void init() { PROJECT_DIRECTORY.mkdirs(); } public static Type.Project getProject(String title) { Type.Project result = new Type.Project(); for(File file : PROJECT_DIRECTORY.listFiles()) { Type.Project data = getProjectFile(file); if (data.title.equals(title)) { result = data; return result; } } return result; } public static File getProjectFile(Type.Project project) { File result = null; for(File file : PROJECT_DIRECTORY.listFiles()) { Type.Project data = getProjectFile(new File(file, "data.json")); if (data.title.equals(project.title)) { result = file; return result; } } return result; } private static Type.Project getProjectFile(File file) { StringBuilder builder = new StringBuilder(); try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line; while((line = reader.readLine()) != null) { builder.append(line); } } catch(IOException err) {} Type.Project result = new Type.Project(); if(builder.toString() != null) { try { JSONObject object = new JSONObject(builder.toString()); result.type = object.getString("type").equals(Type.ProjectType.JS.toString()) ? Type.ProjectType.JS : Type.ProjectType.PYTHON; result.title = object.getString("title"); result.subtitle = object.getString("subtitle"); result.enable = object.getBoolean("enable"); } catch (JSONException e) { e.printStackTrace(); } } return result; } public static void createProject(Type.Project project) { JSONObject object = new JSONObject(); try { object.put("type", project.type.toString()); object.put("title", project.title); object.put("subtitle", project.subtitle); object.put("enable", project.enable); } catch (JSONException e) { e.printStackTrace(); } String str = object.toString(); Log.v("json", str); File root = new File(PROJECT_DIRECTORY, project.title); File file = new File(root, "data.json"); root.mkdirs(); try { file.createNewFile(); BufferedWriter writer = new BufferedWriter(new FileWriter(file)); writer.write(str); writer.close(); } catch (IOException e) { e.printStackTrace(); } } public static String getProjectScript(Type.Project project) { File file = new File(getProjectFile(project), "main." + project.type.toString()); StringBuilder builder = new StringBuilder(); try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line; while((line = reader.readLine()) != null) { builder.append(line); builder.append("\n"); } } catch (IOException e) { e.printStackTrace(); } return builder.toString(); } public static ArrayList<Type.Project> getProjectList() { ArrayList<Type.Project> result = new ArrayList<>(); for(File file : PROJECT_DIRECTORY.listFiles()) { result.add(getProjectFile(new File(file, "data.json"))); } return result; } public static File getProjectScriptFile(Type.Project project) { return new File(getProjectFile(project), "main." + project.type.toString()); } public static File getProjectDataFile(Type.Project project) { return new File(getProjectFile(project), "data.json"); } public static void saveData(Type.Project project, String key, Object value) { File root = getProjectFile(project); File data = new File(root, "data.json"); try { BufferedReader reader = new BufferedReader(new FileReader(data)); BufferedWriter writer = new BufferedWriter(new FileWriter(data)); String line; JSONObject json = new JSONObject(); while((line = reader.readLine()) != null) { JSONObject object = new JSONObject(line); if(object.has(key)) { object.put(key, value); json = object; break; } } writer.write(json.toString()); } catch(IOException err) {} catch (JSONException e) { e.printStackTrace(); } } public static Object readData(Type.Project project, String key) { File root = getProjectFile(project); File data = new File(root, "data.json"); try { BufferedReader reader = new BufferedReader(new FileReader(data)); BufferedWriter writer = new BufferedWriter(new FileWriter(data)); String line; JSONObject json = new JSONObject(); while((line = reader.readLine()) != null) { JSONObject object = new JSONObject(line); if(object.has(key)) { return object.get(key); } } writer.write(json.toString()); } catch(IOException err) {} catch (JSONException e) { e.printStackTrace(); } return null; } public static void delete(Type.Project project) { delete(getProjectFile(project)); } private static void delete(File file) { try { for(File f : file.listFiles()) { if (file.isDirectory()) { delete(f); } else { f.delete(); } } } catch (NullPointerException e) {} file.delete(); } }