Fix bug IR-350.
authorMike Taylor <mike@indexdata.com>
Thu, 11 Dec 2014 12:33:50 +0000 (12:33 +0000)
committerMike Taylor <mike@indexdata.com>
Thu, 11 Dec 2014 12:33:50 +0000 (12:33 +0000)
Newly created records now get an auto-generated UDB, "irspy-NUMBER".

lib/ZOOM/IRSpy.pm

index fe1984c..5e6519f 100644 (file)
@@ -1,4 +1,3 @@
-
 package ZOOM::IRSpy;
 
 use 5.008;
@@ -366,10 +365,13 @@ sub _rewrite_irspy_record {
 }
 
 
-my $_reliabilityField = {
+my $_specialFields = {
     reliability => [ reliability => 0,
-                     "Calculated reliability of server",
-                     "e:serverInfo/e:reliability" ],
+                    "Calculated reliability of server",
+                    "e:serverInfo/e:reliability" ],
+    udb => [ udb => 0,
+            "Access Name (Unique DB)",
+            "e:databaseInfo/i:udb" ],
 };
 
 sub _rewrite_zeerex_record {
@@ -378,7 +380,12 @@ sub _rewrite_zeerex_record {
     # Add reliability score
     my $xc = irspy_xpath_context($rec);
     my($nok, $nall, $percent) = calc_reliability_stats($xc);
-    modify_xml_document($xc, $_reliabilityField, { reliability => $percent });
+    modify_xml_document($xc, $_specialFields, { reliability => $percent });
+
+    if (!defined $oldid) {
+       # New record: generate a UDB for it.
+       modify_xml_document($xc, $_specialFields, { udb => _next_udb() });
+    }
 
     my $p = $conn->package();
     $p->option(action => "specialUpdate");
@@ -407,6 +414,19 @@ sub _rewrite_zeerex_record {
 }
 
 
+sub _next_udb {
+    use IndexData::Utils::PersistentCounter;
+
+    my $file = $ENV{IRSPY_COUNTER_FILE}
+       or die "no IRSPY_COUNTER_FILE in environment";
+    my $counter = new IndexData::Utils::PersistentCounter($file)
+       or die "can't open counter file '$file': $!";
+    my $val = $counter->next()
+       or die "can't get counter value from '$file': $!";
+    return "irspy-$val";
+}
+
+
 sub _delete_record {
     my($conn, $id) = @_;