]> ToastFreeware Gitweb - gregoa/zavai.git/blobdiff - src/log.vala
Update number of log entries when they change
[gregoa/zavai.git] / src / log.vala
index b8aac437363cb764d9cf6d0b448daa1ae3fc5590..2bbb5d40c3651d95e3af922896acdc0cd459be78 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";
 
@@ -306,6 +312,8 @@ public class Logger : Resource, Object
 {
     protected List<Log> logs;
 
+    public signal void entries_changed();
+
     public Logger()
     {
         logs = null;
@@ -349,6 +357,7 @@ public class Logger : Resource, Object
         pop(log);
         log.save();
         if (logs == null) end_trace();
+        entries_changed();
     }
 
     public Log load(string fname)
@@ -361,6 +370,29 @@ public class Logger : Resource, Object
         return parser.result;
     }
 
+    public delegate bool EntriesVisitor(string dir, string name);
+
+
+    protected void list_dir(string dir, EntriesVisitor visitor)
+    {
+        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;
+            if (!visitor(dir, file_info.get_name()))
+                break;
+        }
+    }
+
+    public void list_entries(EntriesVisitor visitor, bool only_unacked=true)
+    {
+        if (!only_unacked)
+            list_dir(config.homedir + "/archive", visitor);
+        list_dir(config.homedir + "/log", visitor);
+    }
+
     public void instant(string tag, string msg)
     {
         var log = new Log(tag, msg);