show additional plugins in plugins dialog (closes #327)

This commit is contained in:
Philipp Schaefer
2013-05-28 09:34:35 +02:00
parent f9a8cd7ba6
commit e3e7268841
3 changed files with 69 additions and 43 deletions

View File

@ -397,7 +397,7 @@ public class IITC_Mobile extends Activity {
} }
} }
private void injectJS() { private void loadIITC() {
try { try {
iitc_view.getWebViewClient().loadIITC_JS(this); iitc_view.getWebViewClient().loadIITC_JS(this);
} catch (IOException e1) { } catch (IOException e1) {
@ -419,8 +419,7 @@ public class IITC_Mobile extends Activity {
// plugins are injected onPageFinished // plugins are injected onPageFinished
public void loadUrl(String url) { public void loadUrl(String url) {
url = addUrlParam(url); url = addUrlParam(url);
Log.d("iitcm", "injecting main-script..."); loadIITC();
injectJS();
iitc_view.loadUrl(url); iitc_view.loadUrl(url);
} }

View File

@ -1,5 +1,7 @@
package com.cradle.iitc_mobile; package com.cradle.iitc_mobile;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Scanner; import java.util.Scanner;
@ -7,6 +9,8 @@ import java.util.Scanner;
import android.app.Activity; import android.app.Activity;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.MenuItem; import android.view.MenuItem;
public class IITC_Settings extends Activity { public class IITC_Settings extends Activity {
@ -46,24 +50,36 @@ public class IITC_Settings extends Activity {
} }
if (s != null) if (s != null)
src = s.hasNext() ? s.next() : ""; src = s.hasNext() ? s.next() : "";
String header = src.substring(src.indexOf("==UserScript=="), String plugin_name = getPluginName(src);
src.indexOf("==/UserScript=="));
// remove new line comments and replace with space
// this way we get double spaces instead of newline + double slash
header = header.replace("\n//", " ");
// get a list of key-value...split on multiple spaces
String[] attributes = header.split(" +");
String plugin_name = "not found";
for (int j = 0; j < attributes.length; j++) {
// search for name and use the value
if (attributes[j].equals("@name"))
plugin_name = attributes[j + 1];
}
asset_list.add(plugin_name); asset_list.add(plugin_name);
// real value // real value
asset_values.add(asset_array[i]); asset_values.add(asset_array[i]);
} }
// load additional plugins from <storage-path>/IITC_Mobile/plugins/
String iitc_path = Environment.getExternalStorageDirectory().getPath()
+ "/IITC_Mobile/";
File directory = new File(iitc_path + "plugins/");
File[] files = directory.listFiles();
if (files != null) {
Scanner s = null;
String src = "";
for (int i = 0; i < files.length; ++i) {
try {
s = new Scanner(files[i]).useDelimiter("\\A");
} catch (FileNotFoundException e) {
e.printStackTrace();
Log.d("iitcm", "failed to parse file " + files[i]);
}
if (s != null)
src = s.hasNext() ? s.next() : "";
String plugin_name = getPluginName(src);
asset_list.add("[User] " + plugin_name);
// real value
asset_values.add(files[i].toString());
}
}
Bundle bundle = getIntent().getExtras(); Bundle bundle = getIntent().getExtras();
bundle.putStringArray("ASSETS", bundle.putStringArray("ASSETS",
(String[]) asset_list.toArray(new String[0])); (String[]) asset_list.toArray(new String[0]));
@ -76,6 +92,24 @@ public class IITC_Settings extends Activity {
.replace(android.R.id.content, settings).commit(); .replace(android.R.id.content, settings).commit();
} }
// parse header for @name of plugin
public String getPluginName(String src) {
String header = src.substring(src.indexOf("==UserScript=="),
src.indexOf("==/UserScript=="));
// remove new line comments and replace with space
// this way we get double spaces instead of newline + double slash
header = header.replace("\n//", " ");
// get a list of key-value...split on multiple spaces
String[] attributes = header.split(" +");
String plugin_name = "not found";
for (int j = 0; j < attributes.length; j++) {
// search for name and use the value
if (attributes[j].equals("@name"))
plugin_name = attributes[j + 1];
}
return plugin_name;
}
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {

View File

@ -71,18 +71,15 @@ public class IITC_WebViewClient extends WebViewClient {
// if developer mode are enabled, load all iitc script from external // if developer mode are enabled, load all iitc script from external
// storage // storage
Log.d("iitcm", "adding iitc main script");
if (sharedPref.getBoolean("pref_dev_checkbox", false)) { if (sharedPref.getBoolean("pref_dev_checkbox", false)) {
js = this.fileToString(iitc_path js = this.fileToString(iitc_path
+ "dev/total-conversion-build.user.js", false); + "dev/total-conversion-build.user.js", false);
if (js.equals("false")) { if (js.equals("false")) {
Toast.makeText( Toast.makeText( context, "File " + iitc_path +
context, "dev/total-conversion-build.user.js not found. " +
"File " "Disable developer mode or add iitc files to the dev folder.",
+ iitc_path Toast.LENGTH_LONG).show();
+ "dev/total-conversion-build.user.js not found. "
+ "Disable developer mode or add iitc files "
+ "to the dev folder.", Toast.LENGTH_LONG)
.show();
return; return;
} else { } else {
Toast.makeText(context, "Developer mode enabled", Toast.makeText(context, "Developer mode enabled",
@ -153,12 +150,19 @@ public class IITC_WebViewClient extends WebViewClient {
String[] plugin_array = plugin_list.toArray(new String[0]); String[] plugin_array = plugin_list.toArray(new String[0]);
for (int i = 0; i < plugin_list.size(); i++) { for (int i = 0; i < plugin_list.size(); i++) {
Log.d("iitcm", "adding plugin " + plugin_array[i]); // load default iitc plugins
if (dev_enabled) if (!plugin_array[i].startsWith(iitc_path)) {
js += this.removePluginWrapper(iitc_path + "dev/plugins/" Log.d("iitcm", "adding plugin " + plugin_array[i]);
+ plugin_array[i], false); if (dev_enabled)
else js += this.removePluginWrapper(iitc_path + "dev/plugins/"
js += this.removePluginWrapper("plugins/" + plugin_array[i], true); + plugin_array[i], false);
else
js += this.removePluginWrapper("plugins/" + plugin_array[i], true);
// load additional iitc plugins
} else {
Log.d("iitcm", "adding additional plugin " + plugin_array[i]);
js += this.removePluginWrapper(plugin_array[i], false);
}
} }
} }
@ -166,19 +170,6 @@ public class IITC_WebViewClient extends WebViewClient {
if (sharedPref.getBoolean("pref_user_loc", false)) if (sharedPref.getBoolean("pref_user_loc", false))
js += parseTrackingPlugin(dev_enabled); js += parseTrackingPlugin(dev_enabled);
// load additional plugins from <storage-path>/IITC-Mobile/plugins/
File directory = new File(iitc_path + "plugins/");
File[] files = directory.listFiles();
if (files != null) {
for (int i = 0; i < files.length; ++i) {
String add_js = "";
if ((add_js = this.removePluginWrapper(files[i].toString(), false)) != "") {
Log.d("iitcm",
"loading additional plugin " + files[i].toString());
js += add_js;
}
}
}
return js; return js;
} }
@ -281,6 +272,8 @@ public class IITC_WebViewClient extends WebViewClient {
if (url.contains("/css/common.css")) { if (url.contains("/css/common.css")) {
return new WebResourceResponse("text/css", "UTF-8", style); return new WebResourceResponse("text/css", "UTF-8", style);
} else if (url.contains("gen_dashboard.js")) { } else if (url.contains("gen_dashboard.js")) {
Log.d("iitcm", "replacing gen_dashboard.js with iitc script");
Log.d("iitcm", "injecting iitc...");
return this.iitcjs; return this.iitcjs;
} else if (url.contains("/css/ap_icons.css") } else if (url.contains("/css/ap_icons.css")
|| url.contains("/css/map_icons.css") || url.contains("/css/map_icons.css")