ctjacobs / pyqso Goto Github PK
View Code? Open in Web Editor NEWPyQSO is a contact logging tool for amateur radio operators.
Home Page: http://christianjacobs.uk/pyqso
License: GNU General Public License v3.0
PyQSO is a contact logging tool for amateur radio operators.
Home Page: http://christianjacobs.uk/pyqso
License: GNU General Public License v3.0
It would be nice if it would be possible to add a dxcluster with different callsigns for the same url
Need to check compatibility of other libraries here too.
Without changing the format of the Date/Time data stored in the database, let the user choose how they want the Date/Time to be displayed. For example, if the user provides a formatting string like "%d %M %Y", PyQSO could display the date as "24 March 2014" (instead of "20140324", which is an example of how the Date is currently stored in the database).
Suggested by Paride Legovini.
Allow the user to define default values for fields, or perhaps re-use some details from the previous QSO.
Allow the user to specify their QTH in the Preferences and pin-point this location on the grey line map.
Based on feedback from Timo OH7JHA.
Hi,
thanks for other fix.
I like to use pyqso SOTA, so I'm looking for android version.
With https://github.com/kivy/python-for-android It should not be too difficult.
The hard work seems to be a new simplified gui, may be done with kivy.
You already have something planned, or I can try it, if I find the time?
In the Preferences dialog, let the user decide whether UTC or the local time is used.
Suggested by Paride Legovini.
Maybe it's a good idea to seperate gui and program logic via glade files.
try:
from gi.repository import Gtk
except:
print("GTK Not Available")
sys.exit(1)APPDIR = os.path.dirname(os.path.abspath(file))
class MyWindow(Gtk.Window):
def __init__(self): self.builder = Gtk.Builder() self.builder.add_from_file("assets/ui/main.glade") self.window = self.builder.get_object("windowMain")
...
Allow users to select one or more QSOs to copy/paste.
Once a new QSO is added, clear the fields and keep the Add Record dialog open so another (new) QSO can be entered afterwards. This should be an option in the Preferences. Useful if lots of QSOs are expected to be made in quick succession.
Based on feedback from Timo OH7JHA.
PyQSO must be able to correctly use configuration files created by older versions by handling any ConfigParser.NoOptionError
exceptions that occur as a result of new options being added.
When exporting records to an ADIF file, only markers are written. The actual record data is skipped.
This bug was spotted by Paride Legovini.
It would be nice to be able to bookmark DX clusters, or perhaps have a 'recently used' list. This will have to wait until after v0.2 is released.
Currently the slowest part of importing ADIF files seems to be the insertion of each record one-by-one into the sqlite database, with individual database commits. It would probably be faster to queue them up somehow and insert them all in one go.
Callsigns that contain "/" characters are not handled properly when performing callsign lookups. Callsigns may need to be stripped of any suffix (e.g. "/M") and/or prefix before performing a callsign lookup.
This bug was reported by Paride Legovini.
Is it possible to call Hamlib.Rig.get_mode() to fill mode ?
Currently users have to click the Ok
button to add (or apply changes to) the QSO to the log. Need to also let the user use the Return key to do this.
Add the option to display all callsigns in upper or lower case, regardless of how they were entered.
Suggested by Paride Legovini.
PyQSO automatically re-sizes the 'Notes' column, which is not convenient when large amounts of text are entered. It is best to let the user modify the width manually.
To help keep the user's home directory uncluttered, write configuration files to the ~/.config directory instead.
PyQSO fails to import ADIF records containing latin-1 characters (e.g. ä). The addition of new records may fail as well.
The patch below causes PyQSO to try and replace the latin-1 characters with UTF-8 ones. The ADIF records will then be added instead of being skipped. However, I think some characters may be lost that way. Supporting all the different character encoding schemes seems rather difficult - Anyone have any experience with this sort of thing?
Thanks to Timo OH7JHA for reporting this problem.
diff --git a/pyqso/adif.py b/pyqso/adif.py
index 96da451..d0a459d 100644
--- a/pyqso/adif.py
+++ b/pyqso/adif.py
@@ -251,7 +251,7 @@ class ADIF:
continue
else:
if( (r[field_name] != "NULL") and (r[field_name] != "") ):
- f.write("<%s:%d>%s\n" % (field_name.lower(), len(r[field_name]), r[field_name]))
+ f.write("<%s:%d>%s\n" % (field_name.lower(), len(r[field_name]), r[field_name].encode("utf-8")))
f.write("<eor>\n")
logging.debug("Finished writing records to the ADIF file.")
@@ -259,8 +259,9 @@ class ADIF:
except IOError as e:
logging.error("I/O error %d: %s" % (e.errno, e.strerror))
- except:
- logging.error("Unknown error occurred when writing the ADIF file.")
+ except Exception as e: # All other exceptions.
+ logging.error("An exception occurred when writing the ADIF file.")
+ logging.error(e)
return
diff --git a/pyqso/logbook.py b/pyqso/logbook.py
index 4f265ab..9d478ed 100644
--- a/pyqso/logbook.py
+++ b/pyqso/logbook.py
@@ -181,6 +181,7 @@ class Logbook(Gtk.Notebook):
self.db_disconnect() # Destroy any existing connections first.
self.connection = sqlite.connect(path)
self.connection.row_factory = sqlite.Row
+ self.connection.text_factory = lambda x: unicode(x, "utf-8", errors="replace")
except sqlite.Error as e:
# PyQSO can't connect to the database.
logging.exception(e)
Add a button to the 'Add/Edit Record' dialog which inserts the current date and time when clicked.
Suggested by Paride Legovini.
For using hamlib I must run python2,
Seems only some lib import and name change.
See attach, seems to work for me.
Warning !!! little tested
Before inserting one or more QSO records with executemany
, PyQSO currently assumes that the next row ID to be used will be max(rowid)+1. This is not always the case. Until the logbook is reloaded/refreshed, the incorrect row IDs are used which can cause problems when e.g. removing duplicate records.
Allow users to select one or more QSOs to copy/paste, delete or export in one go.
The MODES
list in adif.py
needs to be updated.
If I connect e.g. to dxfun.com:8000 via telnet and type 'help' I get this
HELP El comando HELP (AYUDA)
HELP existe para un cierto n�mero de comandos. La sintaxis es:HELP
Donde es el nombre del comando de cual quieres ayuda.
Todos los comandos pueden ser abreviados, SHOW/DX puede ser
abreviado con SH/DX, ANNOUNCE puede acortarse en AN, etc.Busca con el comando APROPOS que chequea el fichero
completo de ayuda por la que especifiques y te dar
una lista de comandos que luego podr�s mirar con HELP.
In PyQSO I get no response. It seems to be a problem with multi line responses, because I can see 'normal' notifications like 'pls set your qth' etc.
Add more docstrings throughout the codebase, and specify :returns:
, :param:
, etc in rst format. Maybe autogenerate the function docs and add to the PyQSO Read the Docs page?
Maybe it's possible to add a connection to fldigi
https://fedorahosted.org/fldigi/wiki/Documentation/HOWTO/xmlrpc
Join the Date and Time fields to allow QSOs to be sorted in the correct chronological order. Currently, QSOs can be ordered by date, but not both date and time. This suggestion was made by Paride Legovini.
I think this should be done only at the PyQSO user interface level, not at database level.
It would be nice, if you could implement, that it is possible to send a command to a dxcluster via enter/return key.
In preparation for the v0.3 release of PyQSO, the documentation will need updating. This includes descriptions of new features, and new screenshots following improvements to the user interface.
Support for the Cabrillo format has so far been the most common feature request for PyQSO. It will be added in a future release.
I didn't have all the prereq's installed when I first ran this program. It loaded ok but I couldn't create a new DB (see #20). Anyway once I installed basemap, I get the following exception on load:
$ pyqso
Traceback (most recent call last):
File "/usr/local/bin/pyqso", line 40, in <module>
from pyqso.toolbox import *
File "/usr/local/lib/python2.7/dist-packages/pyqso/toolbox.py", line 25, in <module>
from pyqso.grey_line import *
File "/usr/local/lib/python2.7/dist-packages/pyqso/grey_line.py", line 28, in <module>
from mpl_toolkits.basemap import Basemap
File "/usr/lib/pymodules/python2.7/mpl_toolkits/basemap/__init__.py", line 31, in <module>
from mpl_toolkits.axes_grid1 import make_axes_locatable
File "/usr/lib/pymodules/python2.7/mpl_toolkits/axes_grid1/__init__.py", line 4, in <module>
from axes_grid import Grid, ImageGrid, AxesGrid
File "/usr/lib/pymodules/python2.7/mpl_toolkits/axes_grid1/axes_grid.py", line 3, in <module>
import matplotlib.pyplot as plt
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 93, in <module>
_backend_selection()
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 87, in _backend_selection
if gobject.MainLoop().is_running():
File "/usr/lib/python2.7/dist-packages/gi/__init__.py", line 62, in __getattr__
raise AttributeError(_static_binding_error)
AttributeError: When using gi.repository you must not import static modules like "gobject". Please change all occurrences of "import gobject" to "from gi.repository import GObject". See: https://bugzilla.gnome.org/show_bug.cgi?id=709183
Frankly, this looks like a Basemap bug if anything but I wasn't able to track it down.
Use Sphinx to generate the documentation, instead of pdfLaTeX. This offers a much nicer way of documenting the code, and allows the documentation to be generated and hosted on e.g. readthedocs.org.
Add a page to the documentation containing a list of keyboard shortcuts.
Perhaps a graph of QSOs against time?
The unit tests for ADIF functionality should be more thorough and also use an sqlite3.Row object, not just a Python dictionary.
Add the option of combining COMMENT
and NOTES
fields when importing ADIF files.
Thanks to WA0EIR for the suggestion.
Add support for the SAT_NAME, SAT_MODE and PROP_MODE ADIF fields for the purposes of satellite QSO logging.
I just cloned this repo and am running it for the first time. When I choose Open or Create I was given an open dialog but had no option to create a new SQL database from scratch so I was unable to make my first logbook. Am I missing something?
When connected to a DX cluster, a BEL character (ASCII value of 7) may be present at the end of each line received from the Telnet server. This should either be filtered out or handled gracefully.
If the frequency is specified, autocomplete the band field (using a list of frequency ranges or perhaps using the formula wave_length = speed_of_light/frequency).
Suggested by Paride Legovini.
Mock the responses from the Telnet server for testing purposes, using unittest.mock
.
Add the option of showing where a given station is in the world. Need to handle the special case where a callsign is being used in a different country, e.g. PA/MYCALL.
The 'Import Log' dialog should include the valid ADIF file extensions as well as an "All Files" option.
This suggestion was made by Paride Legovini.
The Summary page currently just shows the total number of logs in the logbook. In addition to this, it would be useful to have the total number of QSOs made.
It would be great to give users the option of using alternative sources to perform callsign lookups.
Hi, new ham here.
Any reason to not open last logbook by default ?
If not, I like :
73, IU2HDS
Let the user decide which unit of frequency (e.g. kHz, MHz) is used to display data in the Frequency field.
In the database, all Frequency values will still be stored in MHz.
Suggested by Paride Legovini.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.