diff --git a/CHANGELOG.md b/CHANGELOG.md index de78ba1..b44a92e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ The first release is [3.0.0] because this is actually the third major version (c ## [Unreleased] ### Added +- The software version displayed has now a `.Dev` appended when running from script (_e.g._ 3.1.0.Dev) to differentiate from an actual binary executable. The `.Dev` thus implies that the + running version of the software could not correspond to a particular release. +- The `*.spec` files files can be executed without copying the source code in + their folder. +- Add a link to the GitHub repository in the action bar. - Add support for signals with multiple-value acf ([#9](https://github.com/AresValley/Artemis/pull/9)). This breaks the backward compatibility because the database changed structure. ### Fixed diff --git a/README.md b/README.md index 5e210c9..63e677c 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,8 @@ In short, ARTEMIS is a signals hunter software and a useful aid for radio listen - [Run the software](#Run-the-software) - [Run from binary](#Run-from-binary) - - [Run from source code](#Run-from-source-code-OS-independent) + - [Run from source code](#Run-from-source-code) + - [Compile from source code](#Compile-from-source-code) - [Database](#database) - [Syntax](#syntax) - [Multiple Items fields (Location, Modulation)](#multiple-items-fields-location-modulation) @@ -49,6 +50,9 @@ pip install -r requirements.txt --user python3 artemis.py ``` +### Compile from source code +If you want to compile Artemis yourself from the source code follow the instructions in the [spec_files/README](spec_files/README.md) file. + ## Database The database (db.csv) is directly extracted from sigidwiki.com with a DB parser and reworked to a standard format defined as follow. Artemis DB is a human-readable csv file where the delimiter is the character `*` (Asterisk, Unicode: U+002A). The new entry (separation between signals) is the End Of Line (EOL) escape sequence `\n`. Every signal is directly connected to spectra and audio sample stored in **Spectra** and **Audio** folders, respectively. Every signal is composed of 12 columns: diff --git a/spec_files/Linux/Artemis.spec b/spec_files/Linux/Artemis.spec index 7a14277..7100c0a 100644 --- a/spec_files/Linux/Artemis.spec +++ b/spec_files/Linux/Artemis.spec @@ -1,13 +1,20 @@ # -*- mode: python -*- +import glob +import os + + block_cipher = None -import glob, os -data_file = [(f, '.') for f in glob.glob('*.[pu][yi]') if f != "artemis.py"] -data_file.append(('cacert.pem', '.')) +SRC_PATH = "../../src/" -a = Analysis(['artemis.py'], +data_file = [ + (f, '.') for f in glob.glob(SRC_PATH + '*.[pu][yi]') + if f.split('/')[-1] != "artemis.py" +].append((SRC_PATH + 'cacert.pem', '.')) + +a = Analysis([SRC_PATH + 'artemis.py'], # noqa: 821 pathex=[os.getcwd()], binaries=[], datas=data_file, @@ -19,9 +26,10 @@ a = Analysis(['artemis.py'], win_private_assemblies=False, cipher=block_cipher, noarchive=False) -pyz = PYZ(a.pure, a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, +pyz = PYZ(a.pure, # noqa: 821 + a.zipped_data, + cipher=block_cipher) +exe = EXE(pyz, # noqa: 821 a.scripts, a.binaries, a.zipfiles, diff --git a/spec_files/Linux/Artemis_onedir.spec b/spec_files/Linux/Artemis_onedir.spec index ff4700b..29c09b9 100644 --- a/spec_files/Linux/Artemis_onedir.spec +++ b/spec_files/Linux/Artemis_onedir.spec @@ -1,13 +1,20 @@ # -*- mode: python -*- +import glob +import os + + block_cipher = None -import glob, os -data_file = [(f, '.') for f in glob.glob('*.[pu][yi]') if f != "artemis.py"] -data_file.append(('cacert.pem', '.')) +SRC_PATH = "../../src/" -a = Analysis(['artemis.py'], +data_file = [ + (f, '.') for f in glob.glob(SRC_PATH + '*.[pu][yi]') + if f.split('/')[-1] != "artemis.py" +].append((SRC_PATH + 'cacert.pem', '.')) + +a = Analysis([SRC_PATH + 'artemis.py'], # noqa: 821 pathex=[os.getcwd()], binaries=[], datas=data_file, @@ -19,9 +26,10 @@ a = Analysis(['artemis.py'], win_private_assemblies=False, cipher=block_cipher, noarchive=False) -pyz = PYZ(a.pure, a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, +pyz = PYZ(a.pure, # noqa: 821 + a.zipped_data, + cipher=block_cipher) +exe = EXE(pyz, # noqa: 821 a.scripts, [], exclude_binaries=True, @@ -31,7 +39,7 @@ exe = EXE(pyz, strip=False, upx=True, console=False) -coll = COLLECT(exe, +coll = COLLECT(exe, # noqa: 821 a.binaries, a.zipfiles, a.datas, diff --git a/spec_files/README.md b/spec_files/README.md index 0cb2564..8412c63 100644 --- a/spec_files/README.md +++ b/spec_files/README.md @@ -6,7 +6,7 @@ ## ARTEMIS 3 .SPEC FILES -Artemis 3 .spec files are used by the package **pyinstaller** (https://www.pyinstaller.org/) to build a single standalone executable (or a one-dir package). The extreme versatility of this package is the fact that every external dependency is already embedded into the bundle. The interpreter of Python 3 is also included. +Artemis 3 .spec files are used by the package **pyinstaller** (https://www.pyinstaller.org/) to build a single standalone executable (or a one-dir package). Every external dependency is already embedded into the bundle. The interpreter of Python 3 is also included. ## Requirements - Python 3.7.0+ @@ -15,37 +15,24 @@ Artemis 3 .spec files are used by the package **pyinstaller** (https://www.pyins **IMPORTANT:** *To generate the standalone and the one-dir package, you must use an operating system that coincides with the target one (pyinstaller doesn't allow cross-compilation).* ## Package Building (standalone aka one-file, high portability, **suggested**) -1. Download a fresh copy of the git repository. -2. Choose the target OS in `spec_files` folder and copy the whole content (except the Artemis_onedir.spec file) into `src` -3. Open a terminal into `src` and run: +1. Download/clone the git repository. +2. In the `spec_files/` folder open a terminal and type ``` pyinstaller Artemis.spec ``` -4. Copy the `src/themes` folder into `src/dist`. -5. The ready-to-use compiled software is now present into `src/dist` folder. +3. An Artemis executable should be produced in the `dist/` folder. The `build/` folder + can be deleted. ## Package Building (one-dir, shorter startup time, low portability) -1. Download a fresh copy of the git repository. -2. Choose the target OS in `spec_files` folder and copy the whole content (except the Artemis.spec file) into `src` -3. Open a terminal into `src` and run: +1. Download/clone the git repository. +2. In the `spec_files/` folder open a terminal and type ``` pyinstaller Artemis_onedir.spec ``` -4. Copy the `src/themes` folder into `src/dist/Artemis`. -5. The ready-to-use compiled software is now present into `src/dist` folder as a bundle. All the libraries are clearly present. +3. An Artemis executable should be produced in `dist/Artemis/`. The `build/` can + be deleted. -## License -This program (ARTEMIS 3, 2014-2019) is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with this program. If not, see: www.gnu.org/licenses - -## Thanks -* **Marco Dalla Tiezza** - *Artemis I-II developer, DB parsing, Website* -* [**Alessandro Ceccato**](https://github.com/alessandro90 "GitHub profile") - *Artemis III lead developer* -* **Paolo Romani (IZ1MLL)** - *Lead β Tester, RF specialist* -* **Carl Colena** - *Sigidwiki admin, β Tester, Signals expert* -* **Marco Bortoli** - *macOS deployment, β Tester* -* **Pierpaolo Pravatto** - *Wiki page, β Tester* -* **Francesco Capostagno, Luca, Pietro** - *β Tester* +You can save a copy of the executable in a folder of you choice. At startup it will ask you to download +the database and also warn you that the `themes` folder is missing. To avoid this, +copy `src/Data` and `src/themes` in the folder containing the executable. diff --git a/spec_files/Windows/Artemis_onedir.spec b/spec_files/Windows/Artemis_onedir.spec index fa7599b..1605901 100644 --- a/spec_files/Windows/Artemis_onedir.spec +++ b/spec_files/Windows/Artemis_onedir.spec @@ -1,13 +1,20 @@ # -*- mode: python -*- +import glob +import os + + block_cipher = None -import glob,os -data_file = [(f, '.') for f in glob.glob('*.[pu][yi]') if f != "artemis.py"] -data_file.append(('cacert.pem', '.')) +SRC_PATH = "../../src/" -a = Analysis(['artemis.py'], +data_file = [ + (f, '.') for f in glob.glob(SRC_PATH + '*.[pu][yi]') + if f.split('/')[-1] != "artemis.py" +].append((SRC_PATH + 'cacert.pem', '.')) + +a = Analysis(SRC_PATH + ['artemis.py'], # noqa: 821 pathex=[os.getcwd()], binaries=[], datas=data_file, @@ -19,9 +26,10 @@ a = Analysis(['artemis.py'], win_private_assemblies=False, cipher=block_cipher, noarchive=False) -pyz = PYZ(a.pure, a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, +pyz = PYZ(a.pure, # noqa: 821 + a.zipped_data, + cipher=block_cipher) +exe = EXE(pyz, # noqa: 821 a.scripts, [], exclude_binaries=True, @@ -30,8 +38,9 @@ exe = EXE(pyz, bootloader_ignore_signals=False, strip=False, upx=True, - console=False , icon='Artemis3.ico') -coll = COLLECT(exe, + console=False, + icon='Artemis3.ico') +coll = COLLECT(exe, # noqa: 821 a.binaries, a.zipfiles, a.datas, diff --git a/spec_files/Windows/artemis.spec b/spec_files/Windows/artemis.spec index c1c9c33..869eae8 100644 --- a/spec_files/Windows/artemis.spec +++ b/spec_files/Windows/artemis.spec @@ -1,13 +1,20 @@ # -*- mode: python -*- +import glob +import os + + block_cipher = None -import glob,os -data_file = [(f, '.') for f in glob.glob('*.[pu][yi]') if f != "artemis.py"] -data_file.append(('cacert.pem', '.')) +SRC_PATH = "../../src/" -a = Analysis(['artemis.py'], +data_file = [ + (f, '.') for f in glob.glob(SRC_PATH + '*.[pu][yi]') + if f.split('/')[-1] != "artemis.py" +].append((SRC_PATH + 'cacert.pem', '.')) + +a = Analysis([SRC_PATH + 'artemis.py'], # noqa: 821 pathex=[os.getcwd()], binaries=[], datas=data_file, @@ -19,9 +26,10 @@ a = Analysis(['artemis.py'], win_private_assemblies=False, cipher=block_cipher, noarchive=False) -pyz = PYZ(a.pure, a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, +pyz = PYZ(a.pure, # noqa: 821 + a.zipped_data, + cipher=block_cipher) +exe = EXE(pyz, # noqa: 821 a.scripts, a.binaries, a.zipfiles, @@ -33,4 +41,5 @@ exe = EXE(pyz, strip=False, upx=True, runtime_tmpdir=None, - console=False , icon='Artemis3.ico') + console=False, + icon='Artemis3.ico') diff --git a/spec_files/macOS/Artemis.spec b/spec_files/macOS/Artemis.spec index e446e61..ce6eaac 100644 --- a/spec_files/macOS/Artemis.spec +++ b/spec_files/macOS/Artemis.spec @@ -1,13 +1,20 @@ # -*- mode: python -*- +import glob +import os + + block_cipher = None -import glob, os -data_file = [(f, '.') for f in glob.glob('*.[pu][yi]') if f != "artemis.py"] -data_file.append(('themes','./themes')) -data_file.append(('cacert.pem', '.')) -a = Analysis(['artemis.py'], +SRC_PATH = "../../src/" + +data_file = [ + (f, '.') for f in glob.glob(SRC_PATH + '*.[pu][yi]') + if f.split('/')[-1] != "artemis.py" +].extend(((SRC_PATH + 'cacert.pem', '.'), ('themes', './themes'))) + +a = Analysis([SRC_PATH + 'artemis.py'], # noqa: 821 pathex=[os.getcwd()], binaries=[], datas=data_file, @@ -19,9 +26,10 @@ a = Analysis(['artemis.py'], win_private_assemblies=False, cipher=block_cipher, noarchive=False) -pyz = PYZ(a.pure, a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, +pyz = PYZ(a.pure, # noqa: 821 + a.zipped_data, + cipher=block_cipher) +exe = EXE(pyz, # noqa: 821 a.scripts, [], exclude_binaries=True, @@ -30,15 +38,15 @@ exe = EXE(pyz, bootloader_ignore_signals=False, strip=False, upx=True, - console=False ) -coll = COLLECT(exe, + console=False) +coll = COLLECT(exe, # noqa: 821 a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name='Artemis') -app = BUNDLE(coll, +app = BUNDLE(coll, # noqa: 821 name='Artemis.app', icon='Artemis3.icns', bundle_identifier=None) diff --git a/src/artemis.py b/src/artemis.py index 65eec88..fc06d96 100644 --- a/src/artemis.py +++ b/src/artemis.py @@ -43,7 +43,14 @@ from utilities import (checksum_ok, # import default_imgs_rc -__VERSION__ = "3.0.1" +__LATEST_VERSION__ = "3.0.1" + +if hasattr(sys, '_MEIPASS'): + __VERSION__ = __LATEST_VERSION__ +else: + __VERSION__ = __LATEST_VERSION__ + ".Dev" + + qt_creator_file = resource_path("artemis.ui") Ui_MainWindow, _ = uic.loadUiType(qt_creator_file) @@ -78,6 +85,9 @@ class Artemis(QMainWindow, Ui_MainWindow): self.action_rtl_sdr_com.triggered.connect( lambda: webbrowser.open(Constants.RTL_SDL_LINK) ) + self.action_github.triggered.connect( + lambda: webbrowser.open(Constants.GITHUB_REPO) + ) self.db = None self.current_signal_name = '' self.signal_names = [] diff --git a/src/artemis.ui b/src/artemis.ui index 7297fdc..22684cf 100644 --- a/src/artemis.ui +++ b/src/artemis.ui @@ -9520,6 +9520,7 @@ QSlider::handle:horizontal { + @@ -9572,6 +9573,11 @@ QSlider::handle:horizontal { RTL-SDR.com + + + GitHub + + diff --git a/src/constants.py b/src/constants.py index 30bc4b7..6e4f0ec 100644 --- a/src/constants.py +++ b/src/constants.py @@ -114,6 +114,7 @@ class Constants: ADD_SIGNAL_LINK = "https://www.sigidwiki.com/index.php/Special:FormEdit/Signal/?preload=Signal_Identification_Wiki:Signal_form_preload_text" FORUM_LINK = "https://aresvalley.com/community/" ARESVALLEY_LINK = "https://aresvalley.com/" + GITHUB_REPO = "https://github.com/AresValley/Artemis" RTL_SDL_LINK = "https://www.rtl-sdr.com/" UPDATING_STR = "Updating..." ACF_DOCS = "https://aresvalley.com/documentation/" diff --git a/unused_installation_scripts/README.md b/unused_installation_scripts/README.md index 0c598f6..321e18f 100644 --- a/unused_installation_scripts/README.md +++ b/unused_installation_scripts/README.md @@ -60,19 +60,3 @@ This folder contains a third option to run Artemis 3 on your pc. The method of i > ### MacOS: > > 1. To Be Completed... - -## License -This program (ARTEMIS 3, 2014-2019) is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with this program. If not, see: www.gnu.org/licenses - -## Thanks -* **Marco Dalla Tiezza** - *Artemis I-II developer, DB parsing, Website* -* [**Alessandro Ceccato**](https://github.com/alessandro90 "GitHub profile") - *Artemis III lead developer* -* **Paolo Romani (IZ1MLL)** - *Lead β Tester, RF specialist* -* **Carl Colena** - *Sigidwiki admin, β Tester, Signals expert* -* **Marco Bortoli** - *macOS deployment, β Tester* -* **Pierpaolo Pravatto** - *Wiki page, β Tester* -* **Francesco Capostagno, Luca, Pietro** - *β Tester*