public Project (string path) {
-
+
this.name = GLib.Path.get_basename(path); // default..
this.json_project_data = new Json.Object();
// dummy roo database...
this.initRooDatabase();
-
-
+
+
}
public void initRooDatabase()
{
this.roo_database = new Palete.RooDatabase.from_project(this);
}
-
-
+
+
public static void loadAll(bool force = false)
{
var dirname = GLib.Environment.get_home_dir() + "/.Builder";
var dir = File.new_for_path(dirname);
- if (!dir.query_exists()) {
+ if (!dir.query_exists()) {
dir.make_directory();
return;
}
try {
var file_enum = dir.enumerate_children(
- GLib.FileAttribute.STANDARD_DISPLAY_NAME,
+ GLib.FileAttribute.STANDARD_DISPLAY_NAME,
GLib.FileQueryInfoFlags.NONE,
null
);
-
-
+
+
FileInfo next_file;
while ((next_file = file_enum.next_file(null)) != null) {
- var fn = next_file.get_display_name();
+ var fn = next_file.get_display_name();
if (!Regex.match_simple("\\.json$", fn)) {
continue;
}
- factoryFromFile(dirname + "/" + fn);
+ factoryFromFile(dirname + "/" + fn);
}
- } catch(Error e) {
- print("oops - something went wrong scanning the projects\n");
+ } catch(Error e) {
+ GLib.warning("oops - something went wrong scanning the projects\n");
}
-
+
}
public static Gee.ArrayList<Project> allProjectsByName()
{
- var ret = new Gee.ArrayList<Project>();
- var iter = projects.map_iterator();
- while (iter.next()) {
- ret.add(iter.get_value());
- }
- // fixme -- sort...
- return ret;
+ var ret = new Gee.ArrayList<Project>();
+ var iter = projects.map_iterator();
+ while (iter.next()) {
+ ret.add(iter.get_value());
+ }
+ // fixme -- sort...
+ return ret;
}
-
+
+ public static Project getProject(string name)
+ {
+
+ var iter = projects.map_iterator();
+ while (iter.next()) {
+ if (iter.get_value().name == name) {
+ return iter.get_value();
+ }
+
+ }
+
+ return null;
+
+ }
+
+ public static string listAllToString()
+ {
+ var all = new Gee.ArrayList<Project>();
+
+ var fiter = projects.map_iterator();
+
+ while(fiter.next()) {
+ all.add(fiter.get_value());
+ }
+
+ all.sort((fa,fb) => {
+ return ((Project)fa).name.collate(((Project)fb).name);
+
+ });
+
+ var iter = all.list_iterator();
+ var ret = "ID\tName\tDirectory\n";
+ while (iter.next()) {
+ ret += "%s\t%s\t%s\n".printf(
+ iter.get().fn,
+ iter.get().name,
+ iter.get().firstPath()
+ );
+
+
+ }
+
+ return ret;
+
+ }
+
+
+
+ public static Project getProjectByHash(string fn)
+ {
+
+ var iter = projects.map_iterator();
+ while (iter.next()) {
+ if (iter.get_value().fn == fn) {
+ return iter.get_value();
+ }
+
+ }
+
+ return null;
+
+ }
+
// load project data from project file.
public static void factoryFromFile(string jsonfile)
{
- print("parse %s\n", jsonfile);
+ GLib.debug("parse %s", jsonfile);
var pa = new Json.Parser();
pa.load_from_file(jsonfile);
if (node == null || node.get_node_type () != Json.NodeType.OBJECT) {
- print("SKIP " + jsonfile + " - invalid format?\n");
+ GLib.debug("SKIP " + jsonfile + " - invalid format?");
return;
}
// might not exist?
if (obj.has_member("runhtml")) {
- proj.runhtml = obj.get_string_member("runhtml");
+ proj.runhtml = obj.get_string_member("runhtml");
}
// might not exist?
if (obj.has_member("base_template")) {
- proj.base_template = obj.get_string_member("base_template");
+ proj.base_template = obj.get_string_member("base_template");
}
// might not exist?
if (obj.has_member("rootURL")) {
- proj.rootURL = obj.get_string_member("rootURL");
+ proj.rootURL = obj.get_string_member("rootURL");
}
proj.name = obj.get_string_member("name");
});
proj.initRooDatabase();
+ GLib.debug("Add Project %s", proj.id);
+
projects.set(proj.id,proj);
// check to see if it's already loaded..
- var iter = projects.map_iterator();
+ var iter = projects.map_iterator();
while (iter.next()) {
if (iter.get_value().hasPath( path)) {
return iter.get_value();
throw new Error.INVALID_TYPE("invalid project type");
}
+
+
+
public static void remove(Project project)
{
// delete the file..
var dirname = GLib.Environment.get_home_dir() + "/.Builder";
-
+
FileUtils.unlink(dirname + "/" + project.fn + ".json");
projects.unset(project.id,null);
public void save()
{
// fixme..
-
+
if (this.fn.length < 1) {
// make the filename..
//var t = new DateTime.now_local ();
//var str = "%l:%l".printf(tv.tv_sec,tv.tv_usec);
var str = this.firstPath();
- this.fn = GLib.Checksum.compute_for_string(GLib.ChecksumType.MD5, str, str.length);
+ this.fn = GLib.Checksum.compute_for_string(GLib.ChecksumType.MD5, str, str.length);
}
- var dirname = GLib.Environment.get_home_dir() + "/.Builder";
- var s = this.toJSON(false);
+ var dirname = GLib.Environment.get_home_dir() + "/.Builder";
+ var s = this.toJSON(false);
FileUtils.set_contents(dirname + "/" + this.fn + ".json", s, s.length);
public string toJSON(bool show_all)
{
-
+
this.json_project_data.set_string_member("name", this.name);
this.json_project_data.set_string_member("fn", this.fn);
var fiter = this.files.map_iterator();
while (fiter.next()) {
- files.add_string_element (fiter.get_key());
+ files.add_string_element (fiter.get_key());
}
this.json_project_data.set_array_member("files", files);
return generator.to_data (null);
-
+
}
public string firstPath()
{
- var iter = this.paths.map_iterator();
- while (iter.next()) {
- return iter.get_key();
- }
+ var iter = this.paths.map_iterator();
+ while (iter.next()) {
+ return iter.get_key();
+ }
- return "";
+ return "";
}
public bool hasPath(string path)
{
- var iter = this.paths.map_iterator();
- while (iter.next()) {
- if (iter.get_key() == path) {
+ var iter = this.paths.map_iterator();
+ while (iter.next()) {
+ if (iter.get_key() == path) {
return true;
}
- }
+ }
- return false;
+ return false;
}
// returns the first path
public string getName()
{
- var iter = this.paths.map_iterator();
- while (iter.next()) {
- return GLib.Path.get_basename(iter.get_key());
- }
+ var iter = this.paths.map_iterator();
+ while (iter.next()) {
+ return GLib.Path.get_basename(iter.get_key());
+ }
- return "";
+ return "";
}
public Gee.ArrayList<JsRender.JsRender> sortedFiles()
while(fiter.next()) {
files.add(fiter.get_value());
}
- files.sort((fa,fb) => {
+ files.sort((fa,fb) => {
return ((JsRender.JsRender)fa).name.collate(((JsRender.JsRender)fb).name);
});
}
+
+ public string listAllFilesToString()
+ {
+ this.scanDirs();
+ var iter = this.sortedFiles().list_iterator();
+ var ret = "ID\tName\tDirectory\n";
+ while (iter.next()) {
+ ret += "%s\n".printf(
+
+ iter.get().name
+
+ );
+
+
+ }
+
+ return ret;
+
+ }
+
+
+
+
public JsRender.JsRender? getByName(string name)
{
-
+
+ var fiter = files.map_iterator();
+ while(fiter.next()) {
+
+ var f = fiter.get_value();
+
+
+ GLib.debug ("Project.getByName: %s ?= %s" ,f.name , name);
+ if (f.name == name) {
+ return f;
+ }
+ };
+ return null;
+ }
+ public JsRender.JsRender? getByPath(string path)
+ {
+
var fiter = files.map_iterator();
- while(fiter.next()) {
-
- var f = fiter.get_value();
-
-
- print ("Project.getByName: %s ?= %s\n" ,f.name , name);
- if (f.name == name) {
- return f;
- }
- };
- return null;
+ while(fiter.next()) {
+
+ var f = fiter.get_value();
+
+
+ //GLib.debug ("Project.getByName: %s ?= %s" ,f.name , name);
+ if (f.path == path) {
+ return f;
+ }
+ };
+ return null;
}
public JsRender.JsRender? getById(string id)
{
-
+
var fiter = files.map_iterator();
while(fiter.next()) {
-
+
var f = fiter.get_value();
//console.log(f.id + '?=' + id);
if (f.id == id) {
- return f;
+ return f;
}
- };
+ };
return null;
}
public JsRender.JsRender newFile (string name)
{
var ret = JsRender.JsRender.factory(this.xtype,
- this,
- this.firstPath() + "/" + name + ".bjs");
+ this,
+ this.firstPath() + "/" + name + ".bjs");
this.addFile(ret);
return ret;
}
public JsRender.JsRender loadFileOnly (string path)
{
- var xt = this.xtype;
- return JsRender.JsRender.factory(xt, this, path);
-
+ var xt = this.xtype;
+ return JsRender.JsRender.factory(xt, this, path);
+
}
public JsRender.JsRender create(string filename)
{
- var ret = this.loadFileOnly(filename);
- ret.save();
- this.addFile(ret);
- return ret;
-
+ var ret = this.loadFileOnly(filename);
+ ret.save();
+ this.addFile(ret);
+ return ret;
+
}
-
-
+
+
public void addFile(JsRender.JsRender pfile) { // add a single file, and trigger changed.
- this.files.set(pfile.path, pfile); // duplicate check?
- this.on_changed();
+ this.files.set(pfile.path, pfile); // duplicate check?
+ this.on_changed();
}
public void add(string path, string type)
{
- this.paths.set(path,type);
- //Seed.print(" type is '" + type + "'");
- if (type == "dir") {
- this.scanDir(path);
- // console.dump(this.files);
- }
- if (type == "file" ) {
-
- this.files.set(path,this.loadFileOnly( path ));
- }
- this.on_changed();
-
+ this.paths.set(path,type);
+ //Seed.print(" type is '" + type + "'");
+ if (type == "dir") {
+ this.scanDir(path);
+ // console.dump(this.files);
+ }
+ if (type == "file" ) {
+
+ this.files.set(path,this.loadFileOnly( path ));
+ }
+ this.on_changed();
+
}
public void scanDirs() // cached version
{
- if (this.is_scanned) {
+ if (this.is_scanned) {
return;
}
this.scanDirsForce();
- //console.dump(this.files);
-
+ //console.dump(this.files);
+
}
public void scanDirsForce()
{
this.is_scanned = true;
var iter = this.paths.map_iterator();
- while (iter.next()) {
+ while (iter.next()) {
//print("path: " + iter.get_key() + " : " + iter.get_value() +"\n");
- if (iter.get_value() != "dir") {
- continue;
- }
- this.scanDir(iter.get_key());
- }
- //console.dump(this.files);
-
+ if (iter.get_value() != "dir") {
+ continue;
+ }
+ this.scanDir(iter.get_key());
+ }
+ //console.dump(this.files);
+
}
- // list files.
+ // list files.
public void scanDir(string dir, int dp =0 )
{
- //dp = dp || 0;
- //print("Project.Base: Running scandir on " + dir +"\n");
- if (dp > 5) { // no more than 5 deep?
- return;
- }
- // this should be done async -- but since we are getting the proto up ...
-
- var subs = new GLib.List<string>();;
- var f = File.new_for_path(dir);
- try {
- var file_enum = f.enumerate_children(GLib.FileAttribute.STANDARD_DISPLAY_NAME, GLib.FileQueryInfoFlags.NONE, null);
-
-
- FileInfo next_file;
- while ((next_file = file_enum.next_file(null)) != null) {
- var fn = next_file.get_display_name();
-
-
- //print("trying" + dir + "/" + fn +"\n");
-
- if (fn[0] == '.') { // skip hidden
- continue;
- }
-
- if (FileUtils.test(dir + "/" + fn, GLib.FileTest.IS_DIR)) {
- subs.append(dir + "/" + fn);
- continue;
- }
-
- if (!Regex.match_simple("\\.bjs$", fn)) {
+ //dp = dp || 0;
+ //print("Project.Base: Running scandir on " + dir +"\n");
+ if (dp > 5) { // no more than 5 deep?
+ return;
+ }
+ // this should be done async -- but since we are getting the proto up ...
+
+ var subs = new GLib.List<string>();;
+ var f = File.new_for_path(dir);
+ try {
+ var file_enum = f.enumerate_children(GLib.FileAttribute.STANDARD_DISPLAY_NAME, GLib.FileQueryInfoFlags.NONE, null);
+
+
+ FileInfo next_file;
+ while ((next_file = file_enum.next_file(null)) != null) {
+ var fn = next_file.get_display_name();
+
+
+ //print("trying" + dir + "/" + fn +"\n");
+
+ if (fn[0] == '.') { // skip hidden
+ continue;
+ }
+
+ if (FileUtils.test(dir + "/" + fn, GLib.FileTest.IS_DIR)) {
+ subs.append(dir + "/" + fn);
+ continue;
+ }
+
+ if (!Regex.match_simple("\\.bjs$", fn)) {
//print("no a bjs\n");
- continue;
- }
- /*
- var parent = "";
- //if (dp > 0 ) {
-
- var sp = dir.split("/");
- var parent = "";
- for (var i = 0; i < sp.length; i++) {
-
- }
-
- /*
- sp = sp.splice(sp.length - (dp +1), (dp +1));
- parent = sp.join('.');
-
-
- if (typeof(_this.files[dir + '/' + fn]) != 'undefined') {
- // we already have it..
- _this.files[dir + '/' + fn].parent = parent;
- return;
- }
- */
- var xt = this.xtype;
+ continue;
+ }
+ /*
+ var parent = "";
+ //if (dp > 0 ) {
+
+ var sp = dir.split("/");
+ var parent = "";
+ for (var i = 0; i < sp.length; i++) {
+
+ }
+
+ /*
+ sp = sp.splice(sp.length - (dp +1), (dp +1));
+ parent = sp.join('.');
+
+
+ if (typeof(_this.files[dir + '/' + fn]) != 'undefined') {
+ // we already have it..
+ _this.files[dir + '/' + fn].parent = parent;
+ return;
+ }
+ */
+ var xt = this.xtype;
var el = JsRender.JsRender.factory(xt,this, dir + "/" + fn);
- this.files.set( dir + "/" + fn, el);
- // parent ??
-
-
- }
- } catch (Error e) {
- print("Project::scanDirs failed : " + e.message + "\n");
- } catch (GLib.Error e) {
- print("Project::scanDirs failed : " + e.message + "\n");
+ this.files.set( dir + "/" + fn, el);
+ // parent ??
+
+
+ }
+ } catch (Error e) {
+ GLib.warning("Project::scanDirs failed : " + e.message + "\n");
+ } catch (GLib.Error e) {
+ GLib.warning("Project::scanDirs failed : " + e.message + "\n");
}
for (var i = 0; i < subs.length(); i++) {
-
- this.scanDir(subs.nth_data(i), dp+1);
- }
-
+
+ this.scanDir(subs.nth_data(i), dp+1);
+ }
+
}
// wrapper around the javascript data...
public string get_string_member(string key) {