List log entries
authorEnrico Zini <enrico@enricozini.org>
Sat, 27 Mar 2010 21:23:09 +0000 (21:23 +0000)
committerEnrico Zini <enrico@enricozini.org>
Sat, 27 Mar 2010 21:23:09 +0000 (21:23 +0000)
README
src/log.vala
src/zavai.vala

diff --git a/README b/README
index 65bb847f6c2874ab15ff10a346575fbc3f0514bb..9538fabd93aced5ab6218d6994ac548a730cf144 100644 (file)
--- a/README
+++ b/README
@@ -194,7 +194,7 @@ using vala-dbus-binding-tool:
    if GPS time is more than 1 hour different than the system time, show a
    "SYNC" button that will sync it if pressed
  - log
-    - load log entry for showing it
+    + load log entry for showing it
     - write data to disk as log happens (to have at least partial logs if power
       is cut)
     - more detailed GPX data (dop, elev..)
index b8aac437363cb764d9cf6d0b448daa1ae3fc5590..84b0d2056922e5db9ae4bf0393367d29758409b8 100644 (file)
@@ -90,13 +90,15 @@ public class Log : Object
 {
     public string tag;
     public string title;
+    public bool acked;
     public List<LogEntry> entries;
     public List<TrackEntry> track;
 
-    public Log(string tag, string title)
+    public Log(string tag, string title, bool acked=false)
     {
         this.tag = tag;
         this.title = title;
+        this.acked = acked;
         entries = null;
         track = null;
     }
@@ -118,12 +120,16 @@ public class Log : Object
         if (entries == null) return;
 
         // Directory where we save the log
-        string dir = config.homedir + "/log-" + tag;
+        string dir;
+        if (acked)
+            dir = config.homedir + "/archive";
+        else
+            dir = config.homedir + "/log";
         DirUtils.create(dir, 0777);
 
         // First try with a plain name
         var t = Time.local(entries.data.ts);
-        string basename = dir + "/" + t.format("%Y%m%d-%H%M%S");
+        string basename = dir + "/" + t.format("%Y%m%d-%H%M%S") + "-" + tag;
 
         string pathname = basename + ".gpx";
 
@@ -361,6 +367,36 @@ public class Logger : Resource, Object
         return parser.result;
     }
 
+    protected size_t list_dir(string dir, ref List<string> res)
+    {
+        size_t count = 0;
+        var d = File.new_for_path(dir);
+        var enumerator = d.enumerate_children(FILE_ATTRIBUTE_STANDARD_NAME, 0, null);
+        FileInfo file_info;
+        while ((file_info = enumerator.next_file(null)) != null)
+        {
+            if (!file_info.get_name().has_suffix(".gpx")) continue;
+            res.append(file_info.get_name());
+            ++count;
+        }
+        return count;
+    }
+
+    public string[] list_entries(bool only_unacked=true)
+    {
+        size_t count = 0;
+        List<string> entries = new List<string>();
+        if (!only_unacked)
+            count += list_dir(config.homedir + "/archive", ref entries);
+        count += list_dir(config.homedir + "/log", ref entries);
+        string[] res = new string[count+1];
+        size_t cur = 0;
+        for (weak List<string> i = entries; i != null; i = i.next)
+            res[cur++] = i.data;
+        res[cur] = null;
+        return res;
+    }
+
     public void instant(string tag, string msg)
     {
         var log = new Log(tag, msg);
index d682e8273cd6b8587ab9747cd74a590e4ce0a7ff..29df675775917ad12bb4047c1e2c3fadd2cb73f8 100644 (file)
@@ -279,6 +279,12 @@ static int main (string[] args) {
 
     if (args.length > 2 && args[1] == "showlog")
     {
+        string[] z = zavai.log.log.list_entries(false);
+        for (int i = 0; z[i] != null; ++i)
+            stderr.printf("FALSE %s\n", z[i]);
+        z = zavai.log.log.list_entries(true);
+        for (int i = 0; z[i] != null; ++i)
+            stderr.printf("TRUE %s\n", z[i]);
         zavai.log.Log l = zavai.log.log.load(args[2]);
         l.dump();
         return 0;