not1mm 25.4.11.2__py3-none-any.whl → 25.4.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- not1mm/__main__.py +17 -0
- not1mm/data/main.ui +34 -0
- not1mm/lib/cwinterface.py +2 -2
- not1mm/lib/version.py +1 -1
- not1mm/plugins/cq_ww_cw.py +3 -1
- not1mm/test.py +34 -5
- {not1mm-25.4.11.2.dist-info → not1mm-25.4.12.dist-info}/METADATA +3 -1
- {not1mm-25.4.11.2.dist-info → not1mm-25.4.12.dist-info}/RECORD +12 -12
- {not1mm-25.4.11.2.dist-info → not1mm-25.4.12.dist-info}/WHEEL +0 -0
- {not1mm-25.4.11.2.dist-info → not1mm-25.4.12.dist-info}/entry_points.txt +0 -0
- {not1mm-25.4.11.2.dist-info → not1mm-25.4.12.dist-info}/licenses/LICENSE +0 -0
- {not1mm-25.4.11.2.dist-info → not1mm-25.4.12.dist-info}/top_level.txt +0 -0
not1mm/__main__.py
CHANGED
@@ -189,6 +189,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
189
189
|
current_widget = None
|
190
190
|
|
191
191
|
auto_cq = False
|
192
|
+
auto_cq_then = datetime.datetime.now()
|
192
193
|
auto_cq_time = datetime.datetime.now()
|
193
194
|
auto_cq_delay = 15000
|
194
195
|
|
@@ -226,6 +227,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
226
227
|
}
|
227
228
|
self.cw_entry.hide()
|
228
229
|
self.leftdot.hide()
|
230
|
+
self.cwprogressBar.hide()
|
229
231
|
self.rightdot.hide()
|
230
232
|
self.n1mm = N1MM()
|
231
233
|
self.ft8 = FT8Watcher()
|
@@ -2107,6 +2109,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
2107
2109
|
""""""
|
2108
2110
|
self.auto_cq = False
|
2109
2111
|
self.leftdot.hide()
|
2112
|
+
self.cwprogressBar.hide()
|
2110
2113
|
if self.cw is not None:
|
2111
2114
|
if self.cw.servertype == 1:
|
2112
2115
|
self.cw.sendcw("\x1b4")
|
@@ -2361,7 +2364,10 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
2361
2364
|
self.run_sp_buttons_clicked()
|
2362
2365
|
# self.make_button_blue(self.F1)
|
2363
2366
|
self.leftdot.show()
|
2367
|
+
self.cwprogressBar.setValue(100)
|
2368
|
+
self.cwprogressBar.show()
|
2364
2369
|
self.auto_cq = True
|
2370
|
+
self.auto_cq_then = datetime.datetime.now()
|
2365
2371
|
self.auto_cq_time = datetime.datetime.now() + datetime.timedelta(
|
2366
2372
|
milliseconds=self.auto_cq_delay
|
2367
2373
|
)
|
@@ -3813,7 +3819,18 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3813
3819
|
# This section has nothing to do with polling the radio
|
3814
3820
|
# It's here because it gets called often enough to be useful.
|
3815
3821
|
if self.auto_cq is True:
|
3822
|
+
total_duration = self.auto_cq_time - self.auto_cq_then
|
3823
|
+
elapsed_duration = datetime.datetime.now() - self.auto_cq_then
|
3824
|
+
if total_duration.total_seconds() > 0:
|
3825
|
+
percentage_complete = int(
|
3826
|
+
(elapsed_duration.total_seconds() / total_duration.total_seconds())
|
3827
|
+
* 100
|
3828
|
+
)
|
3829
|
+
percentage_complete = min(100, percentage_complete)
|
3830
|
+
self.cwprogressBar.setValue(100 - percentage_complete)
|
3831
|
+
|
3816
3832
|
if datetime.datetime.now() > self.auto_cq_time:
|
3833
|
+
self.auto_cq_then = datetime.datetime.now()
|
3817
3834
|
self.auto_cq_time = datetime.datetime.now() + datetime.timedelta(
|
3818
3835
|
milliseconds=self.auto_cq_delay
|
3819
3836
|
)
|
not1mm/data/main.ui
CHANGED
@@ -935,6 +935,40 @@
|
|
935
935
|
</property>
|
936
936
|
</widget>
|
937
937
|
</item>
|
938
|
+
<item>
|
939
|
+
<widget class="QProgressBar" name="cwprogressBar">
|
940
|
+
<property name="sizePolicy">
|
941
|
+
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
942
|
+
<horstretch>0</horstretch>
|
943
|
+
<verstretch>0</verstretch>
|
944
|
+
</sizepolicy>
|
945
|
+
</property>
|
946
|
+
<property name="minimumSize">
|
947
|
+
<size>
|
948
|
+
<width>0</width>
|
949
|
+
<height>0</height>
|
950
|
+
</size>
|
951
|
+
</property>
|
952
|
+
<property name="maximumSize">
|
953
|
+
<size>
|
954
|
+
<width>5</width>
|
955
|
+
<height>29</height>
|
956
|
+
</size>
|
957
|
+
</property>
|
958
|
+
<property name="value">
|
959
|
+
<number>50</number>
|
960
|
+
</property>
|
961
|
+
<property name="textVisible">
|
962
|
+
<bool>false</bool>
|
963
|
+
</property>
|
964
|
+
<property name="orientation">
|
965
|
+
<enum>Qt::Vertical</enum>
|
966
|
+
</property>
|
967
|
+
<property name="invertedAppearance">
|
968
|
+
<bool>false</bool>
|
969
|
+
</property>
|
970
|
+
</widget>
|
971
|
+
</item>
|
938
972
|
<item>
|
939
973
|
<widget class="QLabel" name="rightdot">
|
940
974
|
<property name="text">
|
not1mm/lib/cwinterface.py
CHANGED
@@ -66,9 +66,9 @@ class CW:
|
|
66
66
|
if texttosend:
|
67
67
|
if self.servertype == 2:
|
68
68
|
self._sendcw_xmlrpc(texttosend)
|
69
|
-
|
69
|
+
elif self.servertype == 1:
|
70
70
|
self._sendcw_udp(texttosend)
|
71
|
-
|
71
|
+
elif self.servertype == 3:
|
72
72
|
self._sendcwcat(texttosend)
|
73
73
|
|
74
74
|
def _sendcw_xmlrpc(self, texttosend):
|
not1mm/lib/version.py
CHANGED
not1mm/plugins/cq_ww_cw.py
CHANGED
@@ -38,7 +38,7 @@
|
|
38
38
|
|
39
39
|
import datetime
|
40
40
|
import logging
|
41
|
-
|
41
|
+
import time
|
42
42
|
from pathlib import Path
|
43
43
|
|
44
44
|
from PyQt6 import QtWidgets
|
@@ -496,6 +496,7 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
|
|
496
496
|
self.save_contact()
|
497
497
|
continue
|
498
498
|
self.process_function_key(button)
|
499
|
+
time.sleep(0.2)
|
499
500
|
else:
|
500
501
|
if self.current_widget == "callsign":
|
501
502
|
if len(self.callsign.text()) > 2:
|
@@ -521,6 +522,7 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
|
|
521
522
|
self.save_contact()
|
522
523
|
continue
|
523
524
|
self.process_function_key(button)
|
525
|
+
time.sleep(0.2)
|
524
526
|
|
525
527
|
|
526
528
|
def populate_history_info_line(self):
|
not1mm/test.py
CHANGED
@@ -1,8 +1,37 @@
|
|
1
|
-
|
2
|
-
""""""
|
3
|
-
...
|
1
|
+
import datetime
|
4
2
|
|
5
3
|
|
6
|
-
|
4
|
+
# Assume self.auto_cq_delay is defined (e.g., in milliseconds)
|
5
|
+
class SomeClass:
|
6
|
+
def __init__(self, auto_cq_delay_ms):
|
7
|
+
self.auto_cq_delay = auto_cq_delay_ms
|
7
8
|
|
8
|
-
|
9
|
+
|
10
|
+
# Example instantiation
|
11
|
+
instance = SomeClass(auto_cq_delay_ms=5000) # 5 seconds delay
|
12
|
+
|
13
|
+
|
14
|
+
then = datetime.datetime.now()
|
15
|
+
future = datetime.datetime.now() + datetime.timedelta(milliseconds=15000)
|
16
|
+
|
17
|
+
|
18
|
+
# Calculate the total duration between 'then' and 'future'
|
19
|
+
total_duration = future - then
|
20
|
+
|
21
|
+
while datetime.datetime.now() < future:
|
22
|
+
|
23
|
+
now = datetime.datetime.now()
|
24
|
+
# Calculate the elapsed duration between 'then' and 'now'
|
25
|
+
elapsed_duration = now - then
|
26
|
+
|
27
|
+
# Avoid division by zero if total_duration is zero (though unlikely in this scenario)
|
28
|
+
if total_duration.total_seconds() > 0:
|
29
|
+
# Calculate the percentage of the way 'now' is to 'future'
|
30
|
+
percentage_complete = (
|
31
|
+
elapsed_duration.total_seconds() / total_duration.total_seconds()
|
32
|
+
) * 100
|
33
|
+
print(f"Current time is {percentage_complete:.2f}% of the way to 'future'.")
|
34
|
+
else:
|
35
|
+
print(
|
36
|
+
"'future' is the same as or before 'then', so percentage cannot be calculated meaningfully."
|
37
|
+
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: not1mm
|
3
|
-
Version: 25.4.
|
3
|
+
Version: 25.4.12
|
4
4
|
Summary: NOT1MM Logger
|
5
5
|
Author-email: Michael Bridak <michael.bridak@gmail.com>
|
6
6
|
License: GPL-3.0-or-later
|
@@ -251,6 +251,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
251
251
|
|
252
252
|
## Recent Changes
|
253
253
|
|
254
|
+
- [25-4-12] Added an Auto CQ time to fire progress bar.
|
255
|
+
- [25-4-11-3] Fixed issue with winkeyer not sending multiple macros in ESM mode.
|
254
256
|
- [25-4-11-2] Fixed a crash.
|
255
257
|
- [25-4-11-1] Add clear buffer to winkeyer interface to stop sending.
|
256
258
|
- [25-4-11] Add Scandinavian Activity Contest
|
@@ -1,5 +1,5 @@
|
|
1
1
|
not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
not1mm/__main__.py,sha256=
|
2
|
+
not1mm/__main__.py,sha256=_sobv7fOxQw5gIM1Q2-fLSMn2EXSdOgki0PnZ2xTFGo,153631
|
3
3
|
not1mm/bandmap.py,sha256=-zu5slsuAm2GmeW8g3yvURzsuQxemwIQfw1HEq8xKHM,29920
|
4
4
|
not1mm/checkwindow.py,sha256=zEHlw40j6Wr3rvKbCQf2lcezCoiZqaBqEvBjQU5aKW0,7630
|
5
5
|
not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
|
@@ -9,7 +9,7 @@ not1mm/radio.py,sha256=_b-tSFuDLoBKnABxrsafGQu2p33U-KOubY7-qgLV2yg,5408
|
|
9
9
|
not1mm/ratewindow.py,sha256=PeFmmXYKA6ikR8AzWB6n5TS_1NoaHLocw4pSdySq_7A,6995
|
10
10
|
not1mm/rtc_service.py,sha256=axAwnCBuTr-QL0YwXtWvg9tjwhcFsiiEZFgFjOofX6k,2816
|
11
11
|
not1mm/statistics.py,sha256=YbXBCr8wtmXlF21ojgsh0jY_G-dnCApUFe87JZclZAI,7712
|
12
|
-
not1mm/test.py,sha256=
|
12
|
+
not1mm/test.py,sha256=BNhsSvLnNG5hN4pywIWnj4pUBI-wQYY4Ejfbl97knmw,1198
|
13
13
|
not1mm/vfo.py,sha256=3kdSfLHLHAGgSE8b8H9n-jFUg_5L7tvrZt_7YCkdsLo,8945
|
14
14
|
not1mm/voice_keying.py,sha256=HZImqC5NgnyW2nknNYQ3b7I8-6S_hxpq5G4RcIRXn_k,3005
|
15
15
|
not1mm/data/JetBrainsMono-ExtraLight.ttf,sha256=g5Hn7BPounWMGDj1a8zZcyKMz03HSqW__pUluRR7Evg,274144
|
@@ -33,7 +33,7 @@ not1mm/data/k6gte.not1mm-32.png,sha256=XdTsCa3xqwTfn26Ga7RwO_Vlbg_77RKkSc8bMxVcC
|
|
33
33
|
not1mm/data/k6gte.not1mm-64.png,sha256=6ku45Gq1g5ezh04F07osoKRtanb3e4kbx5XdIEh3N90,2925
|
34
34
|
not1mm/data/logwindow.ui,sha256=f7vULj96tHIQuR1nJMyvPHHcmVgzkhv9D1isyojsnFU,1458
|
35
35
|
not1mm/data/logwindowx.ui,sha256=CwpI-h7cI1yqyldH9quKftsdHL5lTyL9ABOcf80nfqc,1632
|
36
|
-
not1mm/data/main.ui,sha256
|
36
|
+
not1mm/data/main.ui,sha256=-JDQXOaxj8_7Wda9KT2rEM4YUjBs31CiT1Rjc_DBobM,64907
|
37
37
|
not1mm/data/new_contest.ui,sha256=Q8ZORq_9iRls5AJTroh1HAhEkTCOu02nBv9e9xXMOCU,25119
|
38
38
|
not1mm/data/not1mm.html,sha256=c9-mfjMwDt4f5pySUruz2gREW33CQ2_rCddM2z5CZQo,23273
|
39
39
|
not1mm/data/opon.ui,sha256=QDicqAk2lORG2UWsHa6jHlsGn6uzrrI2R4HSAocpPes,2258
|
@@ -101,7 +101,7 @@ not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,5
|
|
101
101
|
not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
102
102
|
not1mm/lib/about.py,sha256=sWycfGcruN3SaEe4JmaJ61K6D8Itq0WxpUYT-lEcmYM,416
|
103
103
|
not1mm/lib/cat_interface.py,sha256=BJvy-34ZyiN73kKNQcCzE4w6ll2O6Ue0uz01T_3sf1E,25204
|
104
|
-
not1mm/lib/cwinterface.py,sha256=
|
104
|
+
not1mm/lib/cwinterface.py,sha256=rKUnqljHQC_Iljq4TCmAgSPe49lWbKcfxg58cE8YX5Y,5177
|
105
105
|
not1mm/lib/database.py,sha256=-9iAPTXDGVUc3OfnZNZCaWRxg3u-qdJyO5jvSvrJQSk,49203
|
106
106
|
not1mm/lib/edit_contact.py,sha256=Ki9bGPpqyQQBB1cU8VIBDCal3lbXeQ6qxhzklmhE2_w,353
|
107
107
|
not1mm/lib/edit_macro.py,sha256=raKWBwsHInj5EUKmvyLQ6gqc3ZFDlstsD3xqoM4PC8E,517
|
@@ -118,7 +118,7 @@ not1mm/lib/plugin_common.py,sha256=D1OBjyLmX7zuSPqgTCmHwXzAKA12J_zTQItvyIem-4Y,1
|
|
118
118
|
not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
|
119
119
|
not1mm/lib/settings.py,sha256=mXffn8Xaj5KATPQinNBR0V5DbHWQPsRfh24_axWGYuk,15254
|
120
120
|
not1mm/lib/super_check_partial.py,sha256=hwT2NRwobu0PLDyw6ltmbmcAtGBD02CKGFbgGWjXMqA,2334
|
121
|
-
not1mm/lib/version.py,sha256=
|
121
|
+
not1mm/lib/version.py,sha256=atqnAZN-9H5r7AsrRXx2wU6Jo8y4lw4ILqxIBpKnWYk,48
|
122
122
|
not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
|
123
123
|
not1mm/plugins/10_10_fall_cw.py,sha256=oJh3JKqjOpnWElSlZpiQ631UnaOd8qra5s9bl_QoInk,14783
|
124
124
|
not1mm/plugins/10_10_spring_cw.py,sha256=p7dSDtbFK0e6Xouw2V6swYn3VFVgHKyx4IfRWyBjMZY,14786
|
@@ -143,7 +143,7 @@ not1mm/plugins/cq_160_ssb.py,sha256=9KKDmmapETEebm1azfEzUWk1NyW3TBnYtBlFIPZYHBs,
|
|
143
143
|
not1mm/plugins/cq_wpx_cw.py,sha256=F5lLuXumrviNHnNEk377OKeEJCnv_j9vnjHEcV70gFc,18249
|
144
144
|
not1mm/plugins/cq_wpx_rtty.py,sha256=WohxnrCIC2EF7hqLLcixJFAK505X-Z766L3DMVUf4sA,21068
|
145
145
|
not1mm/plugins/cq_wpx_ssb.py,sha256=mtUD0tQnraDHoCHIeuWpOD64my3Kni9mXVH5IF2QPL0,16816
|
146
|
-
not1mm/plugins/cq_ww_cw.py,sha256=
|
146
|
+
not1mm/plugins/cq_ww_cw.py,sha256=DQW6NtDGTaUWXmrXLn1nGAXnVGuCjzUddCnRNLmNZuw,18124
|
147
147
|
not1mm/plugins/cq_ww_rtty.py,sha256=2u3k4ofPh3S4B-BVlQtis-X4rwdx221WRf3hjHWPEyg,22549
|
148
148
|
not1mm/plugins/cq_ww_ssb.py,sha256=txeBfJ8rZCrAG2BWY-UmTH81ufRYbkeJJ6NpnV1eKKg,18055
|
149
149
|
not1mm/plugins/cwt.py,sha256=_bYlv6AMhfNVI7pChkSfEZ9amaIYhxu71qdmwgPTrKw,17594
|
@@ -178,9 +178,9 @@ not1mm/plugins/stew_perry_topband.py,sha256=3U-Dr28haBTqTaZWLiC1qHQBmLsLENDL-ihy
|
|
178
178
|
not1mm/plugins/ukeidx.py,sha256=0ABGW7_9Ui0Rgr8mkPBxOJokAIerM1a4-HWnl6VsnV8,19105
|
179
179
|
not1mm/plugins/weekly_rtty.py,sha256=C8Xs3Q5UgSYx-mFFar8BVARWtmqlyrbeC98Ubzb4UN8,20128
|
180
180
|
not1mm/plugins/winter_field_day.py,sha256=hmAMgkdqIXtnCNyUp8J9Bb8liN8wj10wps6ROuG-Bok,15284
|
181
|
-
not1mm-25.4.
|
182
|
-
not1mm-25.4.
|
183
|
-
not1mm-25.4.
|
184
|
-
not1mm-25.4.
|
185
|
-
not1mm-25.4.
|
186
|
-
not1mm-25.4.
|
181
|
+
not1mm-25.4.12.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
182
|
+
not1mm-25.4.12.dist-info/METADATA,sha256=2CaR_uTiFmy3n94pB5vwG4eRTjCO0iTgLAkVBU9C3rA,38276
|
183
|
+
not1mm-25.4.12.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
184
|
+
not1mm-25.4.12.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
|
185
|
+
not1mm-25.4.12.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
|
186
|
+
not1mm-25.4.12.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|