/*
* Copyright (C) 2015-2016 Willi Ye <williye97@gmail.com>
*
* This file is part of Kernel Adiutor.
*
* Kernel Adiutor is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Kernel Adiutor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Kernel Adiutor. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.grarak.kerneladiutor.utils.root;
import com.grarak.kerneladiutor.utils.Utils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* Created by willi on 30.12.15.
*/
public class RootFile {
private final String mFile;
private RootUtils.SU mSU;
public RootFile(String file) {
mFile = file;
mSU = RootUtils.getSU();
}
public RootFile(String file, RootUtils.SU su) {
mFile = file;
mSU = su;
}
public String getName() {
return new File(mFile).getName();
}
public void mkdir() {
mSU.runCommand("mkdir -p '" + mFile + "'");
}
public RootFile mv(String newPath) {
mSU.runCommand("mv -f '" + mFile + "' '" + newPath + "'");
return new RootFile(newPath);
}
public void cp(String path) {
mSU.runCommand("cp -r '" + mFile + "' '" + path + "'");
}
public void write(String text, boolean append) {
String[] array = text.split("\\r?\\n");
if (!append) delete();
for (String line : array) {
mSU.runCommand("echo '" + line + "' >> " + mFile);
}
RootUtils.chmod(mFile, "755", mSU);
}
public String execute(String... arguments) {
StringBuilder args = new StringBuilder();
for (String arg : arguments) {
args.append(" \"").append(arg).append("\"");
}
return mSU.runCommand(mFile + args.toString());
}
public void delete() {
mSU.runCommand("rm -r '" + mFile + "'");
}
public List<String> list() {
List<String> list = new ArrayList<>();
String files = mSU.runCommand("ls '" + mFile + "/'");
if (files != null) {
// Make sure the files exists
for (String file : files.split("\\r?\\n")) {
if (file != null && !file.isEmpty() && Utils.existFile(mFile + "/" + file)) {
list.add(file);
}
}
}
return list;
}
public List<RootFile> listFiles() {
List<RootFile> list = new ArrayList<>();
String files = mSU.runCommand("ls '" + mFile + "/'");
if (files != null) {
// Make sure the files exists
for (String file : files.split("\\r?\\n")) {
if (file != null && !file.isEmpty() && Utils.existFile(mFile + "/" + file)) {
list.add(new RootFile(mFile.equals("/") ? mFile + file : mFile + "/" + file, mSU));
}
}
}
return list;
}
public boolean isDirectory() {
return "true".equals(mSU.runCommand("[ -d " + mFile + " ] && echo true"));
}
public RootFile getParentFile() {
return new RootFile(new File(mFile).getParent(), mSU);
}
public RootFile getRealPath() {
return new RootFile(mSU.runCommand("realpath \"" + mFile + "\""), mSU);
}
public boolean isEmpty() {
return "false".equals(mSU.runCommand("find '" + mFile + "' -mindepth 1 | read || echo false"));
}
public boolean exists() {
String output = mSU.runCommand("[ -e " + mFile + " ] && echo true");
return output != null && output.equals("true");
}
public String readFile() {
return mSU.runCommand("cat '" + mFile + "'");
}
@Override
public String toString() {
return mFile;
}
}