/* * Protocoder * A prototyping platform for Android devices * * Victor Diaz Barrales victormdb@gmail.com * * Copyright (C) 2014 Victor Diaz * Copyright (C) 2013 Motorola Mobility LLC * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software * is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ package org.protocoderrunner.apprunner.api; import android.app.Activity; import android.os.FileObserver; import net.lingala.zip4j.exception.ZipException; import org.protocoderrunner.apidoc.annotation.APIMethod; import org.protocoderrunner.apidoc.annotation.APIParam; import org.protocoderrunner.apprunner.AppRunnerSettings; import org.protocoderrunner.apprunner.PInterface; import org.protocoderrunner.apprunner.ProtocoderScript; import org.protocoderrunner.apprunner.api.other.PSqLite; import org.protocoderrunner.apprunner.api.other.ProtocoderNativeArray; import org.protocoderrunner.project.ProjectManager; import org.protocoderrunner.sensors.WhatIsRunning; import org.protocoderrunner.utils.FileIO; import java.io.File; public class PFileIO extends PInterface { String TAG = "PFileIO"; private FileObserver fileObserver; public PFileIO(Activity a) { super(a); WhatIsRunning.getInstance().add(this); } @ProtocoderScript @APIMethod(description = "Create a directory", example = "") @APIParam(params = { "dirName" }) public void createDir(String name) { File file = new File(AppRunnerSettings.get().project.getStoragePath() + File.separator + name); file.mkdirs(); } @ProtocoderScript @APIMethod(description = "Delete a filename", example = "") @APIParam(params = { "fileName" }) public void delete(String name) { FileIO.deleteFileDir(ProjectManager.getInstance().getCurrentProject().getStoragePath(), name); } @ProtocoderScript @APIMethod(description = "Save an array with text into a file", example = "") @APIParam(params = { "fileName", "lines[]" }) public void saveStrings(String fileName, String[] lines) { FileIO.saveStrings(fileName, lines); } @ProtocoderScript @APIMethod(description = "Save a String into a file", example = "") @APIParam(params = { "fileName", "lines[]" }) public void saveString(String fileName, String line) { String[] lines = { line }; FileIO.saveStrings(fileName, lines); } @ProtocoderScript @APIMethod(description = "Append an array of text into a file", example = "") @APIParam(params = { "fileName", "lines[]" }) public void appendString(String fileName, String[] lines) { FileIO.appendStrings(fileName, lines); } @ProtocoderScript @APIMethod(description = "Append a String into a file", example = "") @APIParam(params = { "fileName", "line" }) public void appendString(String fileName, String line) { String[] lines = { line }; FileIO.appendStrings(fileName, lines); } @ProtocoderScript @APIMethod(description = "Load the Strings of a text file into an array", example = "") @APIParam(params = { "fileName" }) public String[] loadStrings(String fileName) { return FileIO.loadStrings(fileName); } @ProtocoderScript @APIMethod(description = "List all the files in the directory", example = "") @APIParam(params = { "url" }) public ProtocoderNativeArray listFiles(String url) { return listFiles(url, ""); } @ProtocoderScript @APIMethod(description = "List all the files with a given extension", example = "") @APIParam(params = { "fileName" }) public ProtocoderNativeArray listFiles(String url, String filter) { File files[] = FileIO.listFiles(url, filter); ProtocoderNativeArray filesNativeArray = new ProtocoderNativeArray(files.length); for (int i = 0; i < files.length; i++) { filesNativeArray.addPE(i, files[i].getName()); } return filesNativeArray; } @ProtocoderScript @APIMethod(description = "Open a sqlite database", example = "") @APIParam(params = { "filename" }) public PSqLite openSqlLite(String db) { return new PSqLite(a.get(), db); } public interface addZipUnzipCB { void event(); } @ProtocoderScript @APIMethod(description = "Zip a file/folder into a zip", example = "") @APIParam(params = { "folder", "filename" }) public void zip(String path, final String fDestiny, final addZipUnzipCB callbackfn) { final String fOrigin = ProjectManager.getInstance().getCurrentProject().getStoragePath() + "/" + path; Thread t = new Thread(new Runnable() { @Override public void run() { try { FileIO.zipFolder(fOrigin, fDestiny); } catch (Exception e) { e.printStackTrace(); } callbackfn.event(); } }); t.start(); } @ProtocoderScript @APIMethod(description = "Unzip a file into a folder", example = "") @APIParam(params = { "zipFile", "folder" }) public void unzip(final String src, final String dst, final addZipUnzipCB callbackfn) { final String projectPath = ProjectManager.getInstance().getCurrentProject().getStoragePath(); Thread t = new Thread(new Runnable() { @Override public void run() { try { FileIO.unZipFile(projectPath + "/" + src, projectPath + "/" + dst); } catch (ZipException e) { e.printStackTrace(); } } }); t.start(); } public interface FileObserverCB { public void event(String action, String data); } @ProtocoderScript @APIMethod(description = "Observer file changes in a folder", example = "") @APIParam(params = { "path", "function(action, file" }) public void observeFolder(String path, final FileObserverCB callback) { fileObserver = new FileObserver(ProjectManager.getInstance().getCurrentProject().getStoragePath() + "/" + path, FileObserver.CREATE | FileObserver.MODIFY | FileObserver.DELETE) { @Override public void onEvent(int event, String file) { if ((FileObserver.CREATE & event) != 0) { callback.event("create", file); } else if ((FileObserver.DELETE & event) != 0) { callback.event("delete", file); } else if ((FileObserver.MODIFY & event) != 0) { callback.event("modify", file); } } }; fileObserver.startWatching(); } public void stop() { if (fileObserver != null) { fileObserver.stopWatching(); fileObserver = null; } } }