*
* the idea is nicked from geary.
*
+ * At present this serves from ~/gitlive/**** - that probably needs more thought..
+ *
+ *
*/
public errordomain FakeServerError {
FILE_DOES_NOT_EXIST
public static Gee.HashMap<string,FakeServerCache> cache;
- public static FakeServerCache factory(string fname)
+ public static FakeServerCache factory(string fname, string scheme)
{
if (cache == null) {
cache = new Gee.HashMap<string,FakeServerCache>();
}
+
// print ("CACHE look for ==%s==\n", fname);
+ if (scheme == "resources") {
+ return new FakeServerCache.from_resource(fname);
+ }
+
if (cache.has_key(fname)) {
print ("CACHE got %s\n", fname);
return cache.get(fname);
return el;
}
+
+
+
public FakeServerCache.with_data( string data )
{
this.fname = "/" + GLib.Checksum.compute_for_string(GLib.ChecksumType.MD5, data, data.length) + ".js";
}
+ public FakeServerCache.from_resource( string fname )
+ {
+
+
+
+ this.fname = fname;
+
+ var file = File.new_for_path ( BuilderApplication.configDirectory() + "/resources/" + fname);
+ if (!file.query_exists()) {
+ this.data = "".data;
+ this.content_type = "";
+ this.size = 0;
+ return;
+ }
+ try {
+ var info = file.query_info(
+ "standard::*",
+ FileQueryInfoFlags.NONE
+ );
+
+ this.content_type = info.get_content_type();
+ this.size = info.get_size();
+ uint8[] data;
+
+
+ GLib.FileUtils.get_data(file.get_path(), out data);
+ this.data = data;
+ } catch (Error e) {
+ this.data = "".data;
+ this.size = 0;
+ this.content_type = "";
+ return;
+ }
+
+
+ }
public FakeServerCache( string fname ) {
this.fname = fname;
-
+
var file = File.new_for_path ( GLib.Environment.get_home_dir() + "/gitlive" + fname);
if (!file.query_exists()) {
this.data = "".data;
this.size = 0;
return;
}
- var info = file.query_info(
- "standard::*",
- FileQueryInfoFlags.NONE
- );
- this.content_type = info.get_content_type();
- this.size = info.get_size();
- uint8[] data;
- size_t length;
try {
- GLib.FileUtils.get_data(file.get_path(), out data);
+ var info = file.query_info(
+ "standard::*",
+ FileQueryInfoFlags.NONE
+ );
+ this.content_type = info.get_content_type();
+ this.size = info.get_size();
+ uint8[] data;
+
+
+ GLib.FileUtils.get_data(file.get_path(), out data);
+ this.data = data;
} catch (Error e) {
this.data = "".data;
this.size = 0;
return;
}
- this.data = data;
+
print("FakeServerCache :%s, %s (%s/%d)\n", fname ,
this.content_type, this.size.to_string(), this.data.length);
{
this.view = wkview;
-
- //
-
-
- // Hook up signals.
-
- //this.view.resource_load_started.connect(on_resource_request_starting);
- //this.view.navigation_policy_decision_requested.connect(on_navigation_policy_decision_requested);
- //this.view.new_window_policy_decision_requested.connect(on_navigation_policy_decision_requested);
-
- //
+
var cx = WebKit.WebContext.get_default();
//var cx = this.view.get_context();
cx.register_uri_scheme("xhttp", serve);
+ cx.register_uri_scheme("resources", serve);
cx.set_cache_model (WebKit.CacheModel.DOCUMENT_VIEWER);
// these do not help for cross domain requests..
// request is URISchemeRequest
print("REQ: %s\n",request.get_path());
- var cdata = FakeServerCache.factory(request.get_path());
+ var cdata = FakeServerCache.factory(request.get_path() , request.get_scheme());
if (cdata.size < 1 ) {
print("Skip file missing = %s/gitlive%s\n", GLib.Environment.get_home_dir() , request.get_path());