Fix contacts and channels export payload

This commit is contained in:
Marcus Kida 2026-02-18 21:47:20 +01:00
parent 3881780dbe
commit 854577e04c

View file

@ -305,43 +305,41 @@
.replace(/'/g, "'"); .replace(/'/g, "'");
} }
function buildChannel(alias, slot, colorCode, txHz, rxHz) { function formatFreq(mhz) {
return parseFloat(mhz).toFixed(6);
}
function buildChannel(alias, slot, colorCode, txFreq, rxFreq) {
var slotName = slot === "SLOT1" ? "1" : "2"; var slotName = slot === "SLOT1" ? "1" : "2";
return ' <set name="ConventionalPersonality" alias="' + escapeXml(alias) + '" key="DGTLCONV6PT25">\n' + return ' <set name="ConventionalPersonality" alias="' + escapeXml(alias) + '" key="DGTLCONV6PT25">\n' +
' <field name="CP_PERSTYPE" Name="Digital">DGTLCONV6PT25</field>\n' + ' <field name="CP_PERSTYPE" Name="Digital">DGTLCONV6PT25</field>\n' +
' <field name="CP_CNVPERSALIAS">' + escapeXml(alias) + '</field>\n' + ' <field name="CP_CNVPERSALIAS">' + escapeXml(alias) + '</field>\n' +
' <field name="CP_SLTASSGMNT" Name="' + slotName + '">' + slot + '</field>\n' + ' <field name="CP_SLTASSGMNT" Name="' + slotName + '">' + slot + '</field>\n' +
' <field name="CP_COLORCODE">' + colorCode + '</field>\n' + ' <field name="CP_COLORCODE">' + colorCode + '</field>\n' +
' <field name="CP_TXFREQ">' + txHz + '</field>\n' + ' <field name="CP_TXFREQ">' + txFreq + '</field>\n' +
' <field name="CP_RXFREQ">' + rxHz + '</field>\n' + ' <field name="CP_RXFREQ">' + rxFreq + '</field>\n' +
' <field name="CP_TXINHXPLEN" Name="Color Code Free">MTCHCLRCD</field>\n' + ' <field name="CP_TXINHXPLEN" Name="Color Code Free">MTCHCLRCD</field>\n' +
' <field name="CP_TOT">180</field>\n' + ' <field name="CP_TOT">180</field>\n' +
' </set>\n'; ' </set>\n';
} }
function generateCpsXml(repeaters, talkgroups) { function generateCpsXml(repeaters, talkgroups) {
var channels = ""; var channels = "";
repeaters.forEach(function (r) { repeaters.forEach(function (r) {
var txHz = Math.round(r.freq_tx * 1000000); var txFreq = formatFreq(r.freq_tx);
var rxHz = Math.round(r.freq_rx * 1000000); var rxFreq = formatFreq(r.freq_rx);
var cc = r.color_code; var cc = r.color_code;
talkgroups.forEach(function (tg) { talkgroups.forEach(function (tg) {
var slot = tg.slot === "1" ? "SLOT1" : "SLOT2"; var slot = tg.slot === "1" ? "SLOT1" : "SLOT2";
var alias = tg.name.substring(0, 16); var alias = tg.name.substring(0, 16);
channels += buildChannel(alias, slot, cc, txHz, rxHz); channels += buildChannel(alias, slot, cc, txFreq, rxFreq);
}); });
}); });
return '<?xml version="1.0" encoding="utf-8" standalone="yes"?>\n' + return '<?xml version="1.0" encoding="utf-8" standalone="yes"?>\n' +
"<config>\n" + "<config>\n" +
' <category name="Zone">\n' + ' <collection name="ZoneItems">\n' +
' <set name="Zone" alias="DMRmap">\n' +
' <field name="ZP_ZONEALIAS">DMRmap</field>\n' +
' <field name="ZP_ZONETYPE" Name="Normal">NORMAL</field>\n' +
' <collection name="ZoneItems">\n' +
channels + channels +
" </collection>\n" + " </collection>\n" +
" </set>\n" +
" </category>\n" +
"</config>"; "</config>";
} }
@ -539,11 +537,11 @@
var name = ("TG" + tg.id + " " + (tg.name || "")).trim().substring(0, 16); var name = ("TG" + tg.id + " " + (tg.name || "")).trim().substring(0, 16);
var row = name + ",False,,," + var row = name + ",False,,," +
"False,,," + "False,,," +
"False,,,,,," + "False,,,,,,," +
"False,,,,,,,,," + "False,,,,,,,,," +
"False," + tg.id + ",Regular,False,No Style,Repetitive,Group Call,False," + "False," + tg.id + ",Regular,False,No Style,Repetitive,Group Call,False," +
"False,,Regular,False,No Style,Repetitive,Group Call," + "False,,,,,,," +
"False,,No Style"; "False,,";
rows.push(row); rows.push(row);
}); });
return rows.join("\r\n"); return rows.join("\r\n");