From dfc016b15482638d1c05e4d9e141fb18209a160c Mon Sep 17 00:00:00 2001
From: Sebastian <sebastian@sebastians-site.de>
Date: Fri, 28 Feb 2025 19:22:11 +0100
Subject: [PATCH] Added updates for DMR ids

---
 MMDVMHost/module.nix | 55 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)

diff --git a/MMDVMHost/module.nix b/MMDVMHost/module.nix
index 0e72c94..da7ba44 100644
--- a/MMDVMHost/module.nix
+++ b/MMDVMHost/module.nix
@@ -40,6 +40,10 @@ in
       default = "/dev/ttyUSB0";
     };
 
+    dmr-id-url = mkOption {
+      type = types.str;
+      default = "https://database.radioid.net/static/user.csv";
+    };
   };
 
 
@@ -67,6 +71,10 @@ in
         RuntimeDirectory = "MMDVMHost";
       };
       script = ''
+        if [ ! -e /var/lib/mmdvm/DMRIds.dat ]; then
+          touch /var/lib/mmdvm/DMRIds.dat
+        fi
+
         if [ ! -e /var/lib/mmdvm/firmware-version ]; then
           touch /var/lib/mmdvm/firmware-version
         fi
@@ -78,6 +86,53 @@ in
         exec ${cfg.host_package}/bin/MMDVMHost ${cfg.config-file}
       '';
     };
+
+    systemd.paths.mmdvm_dmr_ids = {
+      after = [ "mmdvm_host.service" ];
+      wantedBy = [ "multi-user.target" ];
+      pathConfig = {
+        PathModified = "/var/lib/mmdvm/DMRIds.dat";
+        Unit = "mmdvm_host_restart.service";
+      };
+    };
+
+    systemd.services.mmdvm_host_restart = {
+      wantedBy = [ "multi-user.target" ];
+      description = "MMDVMHost restart service";
+      serviceConfig = {
+        Type = "oneshot";
+      };
+      script = ''
+        ${pkgs.systemd}/bin/systemctl restart "mmdvm_host.service"
+      '';
+    };
+
+    systemd.services.dmr_id_update = {
+      wants = [ "network.target" ];
+      after = [ "network.target" ];
+      description = "Update DMR ids";
+      startAt = "02:00:00";
+      serviceConfig = {
+        Type = "oneshot";
+        User = cfg.user;
+        Group = cfg.group;
+      };
+
+      script = ''
+        ${pkgs.curl}/bin/curl "${cfg.dmr-id-url}" | \
+          ${pkgs.gnused}/bin/sed -e 's/\t//g' | ${pkgs.gawk}/bin/awk -F"," '/,/{gsub(/ /, "", $2); printf "%s\t%s\t%s\n", $1, $2, $3}' | \
+          ${pkgs.gnused}/bin/sed -e 's/\(.\) .*/\1/g' > /var/lib/mmdvm/DMRIds.tmp
+
+        NUMOFLINES=$(${pkgs.coreutils}/bin/wc -l /var/lib/mmdvm/DMRIds.tmp | ${pkgs.gawk}/bin/awk '{print $1}')
+        if [ $NUMOFLINES -gt 1 ]
+        then
+           mv /var/lib/mmdvm//DMRIds.tmp /var/lib/mmdvm/DMRIds.dat
+        else
+           rm /var/lib/mmdvm//DMRIds.tmp 
+        fi
+      '';
+    };
+
   };
 
 }