From 7fc138fdf9bbc4ddfb651860ffd584f607d7fda1 Mon Sep 17 00:00:00 2001 From: Sebastian Delmont Date: Mon, 3 Jan 2022 13:07:16 -0500 Subject: [PATCH] Working and Calling in Wanted Column --- .../lib/roster/processRosterFiltering.js | 6 ++ package.nw/lib/roster/processRosterHunting.js | 22 ++++++ package.nw/lib/roster/renderRoster.js | 18 ----- package.nw/lib/roster/rosterColumns.js | 69 ++++++++++++------- package.nw/lib/style_roster.css | 2 +- 5 files changed, 74 insertions(+), 43 deletions(-) diff --git a/package.nw/lib/roster/processRosterFiltering.js b/package.nw/lib/roster/processRosterFiltering.js index 3595946..3530741 100644 --- a/package.nw/lib/roster/processRosterFiltering.js +++ b/package.nw/lib/roster/processRosterFiltering.js @@ -378,6 +378,12 @@ function processRosterFiltering(callRoster, rosterSettings) } } } + + if (callObj.shouldAlert == false && rosterSettings.onlyHits == true && callObj.qrz == false) + { + tx = false + } + entry.tx = tx; } } diff --git a/package.nw/lib/roster/processRosterHunting.js b/package.nw/lib/roster/processRosterHunting.js index 7f7b7cf..22ac975 100644 --- a/package.nw/lib/roster/processRosterHunting.js +++ b/package.nw/lib/roster/processRosterHunting.js @@ -139,6 +139,27 @@ function processRosterHunting(callRoster, rosterSettings) continue; } + // Special Calls + if (callObj.DEcall.match("^[A-Z][0-9][A-Z](/w+)?$")) + { + callObj.style.call = "class='oneByOne'"; + } + + // Entries currently calling or being called by us + if (callObj.DEcall == window.opener.g_instances[callObj.instance].status.DXcall) + { + if (window.opener.g_instances[callObj.instance].status.TxEnabled == 1) + { + callObj.hunting.call = "calling"; + callObj.style.call = "class='dxCalling'"; + } + else + { + callObj.hunting.call = "caller"; + callObj.style.call = "class='dxCaller'"; + } + } + // Hunting for callsigns if (huntCallsign.checked == true) { @@ -203,6 +224,7 @@ function processRosterHunting(callRoster, rosterSettings) if (huntQRZ.checked == true && callObj.qrz == true) { callObj.callFlags.calling = true + callObj.hunting.qrz = "hunted"; shouldAlert = true; callObj.reason.push("qrz"); } diff --git a/package.nw/lib/roster/renderRoster.js b/package.nw/lib/roster/renderRoster.js index 1e7ffa7..289d988 100644 --- a/package.nw/lib/roster/renderRoster.js +++ b/package.nw/lib/roster/renderRoster.js @@ -116,24 +116,6 @@ function renderRoster(callRoster, rosterSettings) { let callObj = visibleCallList[x].callObj; - // TODO: This is filtering - if (callObj.shouldAlert == false && rosterSettings.onlyHits == true && callObj.qrz == false) - { continue; } - - if (callObj.DEcall.match("^[A-Z][0-9][A-Z](/w+)?$")) - { callObj.style.call = "class='oneByOne'"; } - if (callObj.DEcall == window.opener.g_instances[callObj.instance].status.DXcall) - { - if (window.opener.g_instances[callObj.instance].status.TxEnabled == 1) - { - callObj.style.call = "class='dxCalling'"; - } - else - { - callObj.style.call = "class='dxCaller'"; - } - } - worker += g_rosterSettings.compact ? renderCompactRosterRow(callObj) : renderNormalRosterRow(rosterColumns, callObj) } diff --git a/package.nw/lib/roster/rosterColumns.js b/package.nw/lib/roster/rosterColumns.js index ee27df8..5c93854 100644 --- a/package.nw/lib/roster/rosterColumns.js +++ b/package.nw/lib/roster/rosterColumns.js @@ -388,16 +388,16 @@ const ROSTER_COLUMNS = { }, Wanted: { - compare: getterSimpleComparer((elem) => wantedColumnSort(elem.callObj)), + compare: (a, b) => wantedColumnComparer(a.callObj, b.callObj), tableData: (callObj) => ({ class: "wantedCol", - title: wantedColumnParts(callObj).join("\n"), - html: wantedColumnParts(callObj).join(", ") + title: wantedColumnParts(callObj).map(entry => `• ${entry}`).join("\n"), + html: wantedColumnParts(callObj).join(" - ", { html: true }) }) } } -WANTED_ORDER = ["cont", "cqz", "ituz", "dxcc", "state", "grid", "cnty", "wpx", "call", "oams"]; +WANTED_ORDER = ["call", "qrz", "cont", "dxcc", "cqz", "ituz", "state", "grid", "cnty", "wpx", "oams"]; WANTED_LABELS = { cont: "Continent", cqz: "CQ Zone", @@ -411,43 +411,64 @@ WANTED_LABELS = { oams: "OAMS" } -function wantedColumnParts(callObj) +function wantedColumnParts(callObj, options) { + options = options || {}; + if (!callObj.hunting) return []; let parts = []; + WANTED_ORDER.forEach(field => { let wanted = callObj.hunting[field]; - if (wanted == "hunted" && field == "oams") { parts.push("OAMS User"); } - else if (wanted == "hunted") { parts.push(`New ${WANTED_LABELS[field]}`); } + if (wanted == "calling" || wanted == "caller") { parts.push("Calling"); } + else if (wanted == "hunted" && field == "qrz") { parts.push("QRZ"); } + else if (wanted == "hunted" && field == "oams") { parts.push("OAMS User"); } + else if (wanted == "hunted") { parts.push(`${options.html ? "" : ""}New ${WANTED_LABELS[field]}${options.html ? "" : ""}`); } else if (wanted == "worked") { parts.push(`Worked ${WANTED_LABELS[field]}`); } else if (wanted == "mixed") { parts.push(`${callObj.band} ${WANTED_LABELS[field]}`); } else if (wanted == "mixed-worked") { parts.push(`${callObj.band} ${WANTED_LABELS[field]}`); parts.push(`Worked ${WANTED_LABELS[field]}`); } else if (wanted == "worked-and-mixed") { parts.push(`Worked ${callObj.band} ${WANTED_LABELS[field]}`); } }) + if (parts[0] == "Calling" && parts[1] == "Calling") + { + parts.shift(); parts.shift(); + parts.unshift("Working"); + } + return parts; } -function wantedColumnSort(callObj) +function wantedColumnWeighter(callObj, field) { - if (!callObj.hunting) return 0; + let wanted = callObj.hunting[field]; - let weight = 0; - WANTED_ORDER.forEach(field => - { - let wanted = callObj.hunting && callObj.hunting[field]; - - if (wanted == "hunted") { weight = weight + 5; } - else if (wanted == "worked") { weight = weight + 4; } - else if (wanted == "mixed") { weight = weight + 3; } - else if (wanted == "mixed-worked") { weight = weight + 2; } - else if (wanted == "worked-and-mixed") { weight = weight + 1; } - - weight = weight * 10; // make room for the next level of wanted order - }) - - return -weight; // return negative values because we want to sort in reverse order by default + // We use negative numbers so that sorting is "reversed" by default, placing most interesting items up top. + if (wanted == "calling" || wanted == "caller") return -10; + else if (wanted == "hunted") return -5; + else if (wanted == "worked") return -4; + else if (wanted == "mixed") return -3; + else if (wanted == "mixed-worked") return -2; + else if (wanted == "worked-and-mixed") return -1; + else return 0; +} + +function wantedColumnComparer(a, b) +{ + if (!a.hunting) return 1; + if (!b.hunting) return -1; + + for (const index in WANTED_ORDER) + { + const field = WANTED_ORDER[index]; + const aWeight = wantedColumnWeighter(a, field); + const bWeight = wantedColumnWeighter(b, field); + + if (aWeight < bWeight) return 1; + if (aWeight > bWeight) return -1; + } + return 0; } diff --git a/package.nw/lib/style_roster.css b/package.nw/lib/style_roster.css index ea83640..5b76980 100644 --- a/package.nw/lib/style_roster.css +++ b/package.nw/lib/style_roster.css @@ -560,7 +560,7 @@ table.rosterTable thead th:first-child { } .wantedCol { - max-width: 90px; + max-width: 160px; overflow: hidden; text-overflow: ellipsis;