/***
Copyright (c) 2012-2013 Samuele Rini
This program 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.
This program 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 this program. If not, see http://www.gnu.org/licenses
***
https://github.com/dentex/ytdownloader/
https://sourceforge.net/projects/ytdownloader/
***
Different Licenses and Credits where noted in code comments.
*/
package dentex.youtube.downloader.utils;
import java.io.IOException;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.util.Log;
import com.impressionapps.vdownload.R;
import dentex.youtube.downloader.YTD;
public class Json {
static String DEBUG_TAG = "Json";
public static void addEntryToJsonFile(Context context, String id, String type, String ytId, int pos, String status,
String path, String filename, String basename, String audioExt, String size, boolean forceCopy) {
// parse existing/init new JSON
String previousJson = Json.readJsonDashboardFile(context);
// create new "complex" object
JSONObject mO = null;
JSONObject jO = new JSONObject();
try {
mO = new JSONObject(previousJson);
JSONObject obj = mO.optJSONObject(id);
if (obj != null) {
if (forceCopy) {
String newId = String.valueOf(System.currentTimeMillis());
Utils.logger("v", "Copying existent ID " + id + " into " + newId, DEBUG_TAG);
id = newId;
} else {
Utils.logger("v", "Updating existent ID " + id, DEBUG_TAG);
}
} else {
Utils.logger("v", "Addind new ID " + id, DEBUG_TAG);
}
if (status.equals(YTD.ctx.getResources().getString(R.string.json_status_completed)))
status = YTD.JSON_DATA_STATUS_COMPLETED;
if (status.equals(YTD.ctx.getResources().getString(R.string.json_status_in_progress)))
status = YTD.JSON_DATA_STATUS_IN_PROGRESS;
if (status.equals(YTD.ctx.getResources().getString(R.string.json_status_failed)))
status = YTD.JSON_DATA_STATUS_FAILED;
if (status.equals(YTD.ctx.getResources().getString(R.string.json_status_paused)))
status = YTD.JSON_DATA_STATUS_PAUSED;
if (status.equals(YTD.ctx.getResources().getString(R.string.json_status_imported)))
status = YTD.JSON_DATA_STATUS_IMPORTED;
jO.put(YTD.JSON_DATA_TYPE, type);
jO.put(YTD.JSON_DATA_YTID, ytId);
jO.put(YTD.JSON_DATA_POS, pos);
jO.put(YTD.JSON_DATA_STATUS, status);
jO.put(YTD.JSON_DATA_PATH, path);
jO.put(YTD.JSON_DATA_FILENAME, filename);
jO.put(YTD.JSON_DATA_BASENAME, basename);
jO.put(YTD.JSON_DATA_AUDIO_EXT, audioExt);
jO.put(YTD.JSON_DATA_SIZE, size);
mO.put(id, jO);
} catch (JSONException e1) {
Log.e(DEBUG_TAG, "JSONException @ addEntryToJsonFile");
}
// generate string from the object
String jsonString = null;
try {
jsonString = mO.toString(4);
// write back JSON file
Utils.logger("v", "-> " + jsonString, DEBUG_TAG);
Utils.writeToFile(YTD.JSON_FILE, jsonString);
} catch (JSONException e1) {
Log.e(DEBUG_TAG, "JSONException @ addEntryToJsonFile");
} catch (NullPointerException e1) {
Log.e(DEBUG_TAG, "NPE @ addEntryToJsonFile");
}
}
public static void removeEntryFromJsonFile(Context context, String id) {
String previousJson = Json.readJsonDashboardFile(context);
JSONObject mO = null;
try {
Utils.logger("v", "Removing ID " + id, DEBUG_TAG);
mO = new JSONObject(previousJson);
mO.remove(id);
} catch (JSONException e1) {
Log.e(DEBUG_TAG, "JSONException @ addEntryToJsonFile");
}
String jsonString = null;
try {
jsonString = mO.toString(4);
// write back JSON file
Utils.logger("v", "-> " + jsonString, DEBUG_TAG);
Utils.writeToFile(YTD.JSON_FILE, jsonString);
} catch (JSONException e1) {
Log.e(DEBUG_TAG, "JSONException @ removeEntryFromJsonFile");
} catch (NullPointerException e1) {
Log.e(DEBUG_TAG, "NPE @ removeEntryFromJsonFile");
}
}
public static String readJsonDashboardFile(Context context) {
String jsonString = null;
if (YTD.JSON_FILE.exists()) {
try {
jsonString = Utils.readFromFile(YTD.JSON_FILE);
} catch (IOException e1) {
jsonString = "{}";
Log.e(DEBUG_TAG, "JSONException @ addEntryToJsonFile");
}
} else {
jsonString = "{}";
}
return jsonString;
}
}