Compare commits
29 Commits
revised-ne
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a87dd69a01 | ||
|
|
79737c82cf | ||
|
|
2d773118fd | ||
|
|
7c6fc179a1 | ||
|
|
2513f5d1e5 | ||
|
|
32a9ecddbf | ||
|
|
f2f5c1dc3d | ||
|
|
f67ee9bc92 | ||
|
|
7a696451f0 | ||
|
|
ff91da3c20 | ||
|
|
53a7a1dda2 | ||
|
|
c229f51945 | ||
|
|
2cbeec6af3 | ||
|
|
463a532c27 | ||
|
|
a3bc1b0c59 | ||
|
|
ccc6e99a7f | ||
|
|
b8e6075aa0 | ||
|
|
ddb952b894 | ||
|
|
76bcbac60a | ||
|
|
319b11e77c | ||
|
|
5f513b1c76 | ||
|
|
36648e08cc | ||
|
|
d61caa1ada | ||
|
|
6fdd36b548 | ||
|
|
6213e8b1ca | ||
|
|
d0bfbe40d7 | ||
|
|
ebda950c87 | ||
|
|
c803a72489 | ||
|
|
70758ea8bd |
4
.github/workflows/linux.yml
vendored
@@ -6,7 +6,7 @@ on:
|
|||||||
artemis_version:
|
artemis_version:
|
||||||
description: 'Version'
|
description: 'Version'
|
||||||
required: true
|
required: true
|
||||||
default: '4.0.0'
|
default: '4.1.0'
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -19,7 +19,7 @@ jobs:
|
|||||||
- name: Setup python
|
- name: Setup python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: '3.12'
|
||||||
|
|
||||||
- name: Build and package
|
- name: Build and package
|
||||||
run: sh ./building/Linux/build_linux.sh
|
run: sh ./building/Linux/build_linux.sh
|
||||||
|
|||||||
6
.github/workflows/macOS.yml
vendored
@@ -6,12 +6,12 @@ on:
|
|||||||
artemis_version:
|
artemis_version:
|
||||||
description: 'Version'
|
description: 'Version'
|
||||||
required: true
|
required: true
|
||||||
default: '4.0.0'
|
default: '4.1.0'
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-macos-x86_64:
|
build-macos-x86_64:
|
||||||
runs-on: macos-11
|
runs-on: macos-12
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -19,7 +19,7 @@ jobs:
|
|||||||
- name: Setup python
|
- name: Setup python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: '3.12'
|
||||||
|
|
||||||
- name: Build and package
|
- name: Build and package
|
||||||
run: sh ./building/macOS/build_macos.sh
|
run: sh ./building/macOS/build_macos.sh
|
||||||
|
|||||||
4
.github/workflows/windows.yml
vendored
@@ -6,7 +6,7 @@ on:
|
|||||||
artemis_version:
|
artemis_version:
|
||||||
description: 'Version'
|
description: 'Version'
|
||||||
required: true
|
required: true
|
||||||
default: '4.0.0'
|
default: '4.1.0'
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -19,7 +19,7 @@ jobs:
|
|||||||
- name: Setup python
|
- name: Setup python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: '3.12'
|
||||||
|
|
||||||
- name: Build and package
|
- name: Build and package
|
||||||
run: ./building/Windows/build_windows.ps1
|
run: ./building/Windows/build_windows.ps1
|
||||||
|
|||||||
32
CHANGELOG.md
@@ -5,14 +5,40 @@
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [4.1.0] - 2024-10-20
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Created a setting panel for the audio player
|
||||||
|
- Selection of the audio output device. Closes [#4](https://github.com/AresValley/Artemis/issues/4)
|
||||||
|
- Added the following (advanced) products to the space weather module. Closes [#53](https://github.com/AresValley/Artemis/issues/53):
|
||||||
|
- Sun Synoptic Analysis (SAS)
|
||||||
|
- GOES Solar Ultraviolet Imager (SUVI), all wavelenght (94 Å, 131 Å, 171 Å, 195 Å, 284 Å, 304 Å)
|
||||||
|
- GOES Thematic Map (from SUVI)
|
||||||
|
- Large Angle and Spectrometric Coronagraph (LASCO), both C2/C3 range for optical imaging of the Sun’s corona
|
||||||
|
- Helioseismic and Magnetic Imager (HMI): Magnetogram, Intensitygram, Dopplergram
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed margins for downloader window
|
||||||
|
|
||||||
|
## [4.0.5] - 2024-06-15
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- Possibility to navigate Artemis just with the keyboard [#50](https://github.com/AresValley/Artemis/issues/50)
|
- Possibility to navigate Artemis just with the keyboard [#50](https://github.com/AresValley/Artemis/issues/50)
|
||||||
|
- **Windows:** automatic updates have been implemented. When a software update is available, Artemis will download the new version and install the updates automatically
|
||||||
|
- Multiple sigID databases can be conserved. In the case of autoload, the latest local version will be loaded
|
||||||
|
- Added creation date and DB version in DB manager window
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- Improved readability of labels for filter ranges for frequency, bandwidth, and ACF
|
- Improved readability of labels for filter ranges for frequency, bandwidth, and ACF
|
||||||
|
- Improved Update manager and Downloader functionalities
|
||||||
|
- OS-dependent temporary folders are now used for database download and Artemis updates
|
||||||
|
- The logic for searching the last sigID database has changed now the discriminant is no longer the folder name but is reported as a signature in the database itself (-1 in the editable field; see documentation)
|
||||||
|
- Old sigID databases are not deleted anymore when a new version is downloaded. This is to avoid removing databases with user changes or additions
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- Added a database load check to avoid (non critical) exceptions when applying filters without having loaded a database.
|
- Added a database load check to avoid (noncritical) exceptions when applying filters without having loaded a database.
|
||||||
|
- Fixed a potential issue involving the forcible closure of the downloader window, but the downloader instance keeps running
|
||||||
|
- With the new logic in the latest sigID database search, manually imported sigID databases are officially recognized as proper ones
|
||||||
|
|
||||||
## [4.0.3] - 2024-06-10
|
## [4.0.3] - 2024-06-10
|
||||||
|
|
||||||
@@ -109,7 +135,9 @@ First release.
|
|||||||
|
|
||||||
|
|
||||||
<!-- Links definitions -->
|
<!-- Links definitions -->
|
||||||
[Unreleased]: https://github.com/AresValley/Artemis/compare/v4.0.3...HEAD
|
[Unreleased]: https://github.com/AresValley/Artemis/compare/v4.1.0...HEAD
|
||||||
|
[4.1.0]: https://github.com/AresValley/Artemis/compare/v4.0.5...v4.1.0
|
||||||
|
[4.0.5]: https://github.com/AresValley/Artemis/compare/v4.0.3...v4.0.5
|
||||||
[4.0.3]: https://github.com/AresValley/Artemis/compare/v4.0.1...v4.0.3
|
[4.0.3]: https://github.com/AresValley/Artemis/compare/v4.0.1...v4.0.3
|
||||||
[4.0.1]: https://github.com/AresValley/Artemis/compare/v3.2.4...v4.0.1
|
[4.0.1]: https://github.com/AresValley/Artemis/compare/v3.2.4...v4.0.1
|
||||||
[3.2.4]: https://github.com/AresValley/Artemis/compare/v3.2.1...v3.2.4
|
[3.2.4]: https://github.com/AresValley/Artemis/compare/v3.2.1...v3.2.4
|
||||||
|
|||||||
@@ -6,13 +6,16 @@
|
|||||||
|
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
|

|
||||||

|

|
||||||

|

|
||||||
|

|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
**Artemis** is a software designed to assist **radio frequency (RF) signal identification and storage**. It simplifies real-time spectrum analysis by leveraging one of the most extensive and community-driven databases, containing nearly **500 recognized signals**. This comprehensive software solution allows users to collect RF signals with specific parameters such as frequency, bandwidth, modulation, etc. Users can also store spectrum waterfalls, audio samples, and all types of documents for future reference. Artemis provides a robust platform to manage a wide range of RF data with precision and ease.
|
**Artemis** is a software designed to assist **radio frequency (RF) signal identification and storage**. It simplifies real-time spectrum analysis by leveraging one of the most extensive and community-driven databases, containing over **500 recognized signals**. This comprehensive software solution allows users to collect RF signals with specific parameters such as frequency, bandwidth, modulation, etc. Users can also store spectrum waterfalls, audio samples, and all types of documents for future reference. Artemis provides a robust platform to manage a wide range of RF data with precision and ease.
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="docs/assets/artemis_preview.webp">
|
<img src="docs/assets/artemis_preview.webp">
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
<file>images/icons/player_play.svg</file>
|
<file>images/icons/player_play.svg</file>
|
||||||
<file>images/icons/player_stop.svg</file>
|
<file>images/icons/player_stop.svg</file>
|
||||||
<file>images/icons/player_loop.svg</file>
|
<file>images/icons/player_loop.svg</file>
|
||||||
<file>images/icons/player_mute.svg</file>
|
|
||||||
<file>images/icons/save.svg</file>
|
<file>images/icons/save.svg</file>
|
||||||
<file>images/icons/delete.svg</file>
|
<file>images/icons/delete.svg</file>
|
||||||
<file>images/icons/add.svg</file>
|
<file>images/icons/add.svg</file>
|
||||||
@@ -22,6 +21,7 @@
|
|||||||
<file>images/icons/browser.svg</file>
|
<file>images/icons/browser.svg</file>
|
||||||
<file>images/icons/documents.svg</file>
|
<file>images/icons/documents.svg</file>
|
||||||
<file>images/icons/abort.svg</file>
|
<file>images/icons/abort.svg</file>
|
||||||
|
<file>images/icons/settings.svg</file>
|
||||||
<file>images/spectrum_not_available.svg</file>
|
<file>images/spectrum_not_available.svg</file>
|
||||||
<file>images/artemis_not_available.svg</file>
|
<file>images/artemis_not_available.svg</file>
|
||||||
|
|
||||||
@@ -41,6 +41,8 @@
|
|||||||
<file>ui/SpaceWeatherForecastPage.qml</file>
|
<file>ui/SpaceWeatherForecastPage.qml</file>
|
||||||
<file>ui/SpaceWeatherDRAPPage.qml</file>
|
<file>ui/SpaceWeatherDRAPPage.qml</file>
|
||||||
<file>ui/SpaceWeatherAuroraPage.qml</file>
|
<file>ui/SpaceWeatherAuroraPage.qml</file>
|
||||||
|
<file>ui/SpaceWeatherSSA.qml</file>
|
||||||
|
<file>ui/SpaceWeatherSunImagers.qml</file>
|
||||||
|
|
||||||
<file>ui/About.qml</file>
|
<file>ui/About.qml</file>
|
||||||
|
|
||||||
|
|||||||
7548
artemis/resources.py
@@ -345,10 +345,13 @@ class UIArtemis(QObject):
|
|||||||
|
|
||||||
|
|
||||||
def autoload_db(self):
|
def autoload_db(self):
|
||||||
sig_id_path = DATA_DIR / 'SigID' / Constants.SQL_NAME
|
""" This will autoload the latest local sigID DB, if present
|
||||||
|
according to the user settings
|
||||||
|
"""
|
||||||
|
sig_id_db = self.dbmanager.get_latest_local_sigid_db()
|
||||||
autoload = CONFIGURE_QT.value("Database", "autoload", 0)
|
autoload = CONFIGURE_QT.value("Database", "autoload", 0)
|
||||||
if sig_id_path.exists() and int(autoload):
|
if sig_id_db is not None and int(autoload):
|
||||||
self.load_db('SigID')
|
self.load_db(sig_id_db.db_dir_name)
|
||||||
|
|
||||||
|
|
||||||
def dialog_popup(self, message_type, title, message):
|
def dialog_popup(self, message_type, title, message):
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ from PySide6.QtCore import QObject, Signal, Slot
|
|||||||
from artemis.utils.path_utils import DATA_DIR
|
from artemis.utils.path_utils import DATA_DIR
|
||||||
from artemis.utils.generic_utils import *
|
from artemis.utils.generic_utils import *
|
||||||
from artemis.utils.sql_utils import ArtemisDatabase
|
from artemis.utils.sql_utils import ArtemisDatabase
|
||||||
from artemis.utils.constants import Constants
|
|
||||||
from artemis.utils.sys_utils import delete_dir
|
from artemis.utils.sys_utils import delete_dir
|
||||||
|
|
||||||
|
|
||||||
@@ -49,8 +48,24 @@ class UIdbmanager(QObject):
|
|||||||
def load_local_db_list(self):
|
def load_local_db_list(self):
|
||||||
""" Scan for all the valid DBs in the data folder and show them on the list
|
""" Scan for all the valid DBs in the data folder and show them on the list
|
||||||
"""
|
"""
|
||||||
|
db_param = []
|
||||||
valid_db_list = self.scan_db_dir()
|
valid_db_list = self.scan_db_dir()
|
||||||
self.populate_db_list.emit(valid_db_list)
|
|
||||||
|
for db in valid_db_list:
|
||||||
|
db_param.append(
|
||||||
|
{
|
||||||
|
'name': db.name,
|
||||||
|
'version': db.version,
|
||||||
|
'date': parse_date(db.date),
|
||||||
|
'db_dir_name': db.db_dir_name,
|
||||||
|
'documents_n': db.stats['documents'],
|
||||||
|
'signals_n': db.stats['signals'],
|
||||||
|
'images_n': db.stats['images'],
|
||||||
|
'audio_n': db.stats['audio']
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
self.populate_db_list.emit(db_param)
|
||||||
|
|
||||||
|
|
||||||
def load_db(self, db_dir_name):
|
def load_db(self, db_dir_name):
|
||||||
@@ -85,43 +100,32 @@ class UIdbmanager(QObject):
|
|||||||
|
|
||||||
def scan_db_dir(self):
|
def scan_db_dir(self):
|
||||||
""" Scans the data directory for valid databases and
|
""" Scans the data directory for valid databases and
|
||||||
return a dictionary containing only the valid ones with a summary
|
return a dictionary containing only the valid ones.
|
||||||
|
Returns a list of objects (dbs)
|
||||||
"""
|
"""
|
||||||
valid_db_list = []
|
valid_db_list = []
|
||||||
db_dirs = next(os.walk(DATA_DIR))[1]
|
db_dirs = next(os.walk(DATA_DIR))[1]
|
||||||
|
|
||||||
for db_dir_name in db_dirs:
|
for db_dir_name in db_dirs:
|
||||||
if self._valid_db(db_dir_name):
|
try:
|
||||||
database = ArtemisDatabase(db_dir_name)
|
database = ArtemisDatabase(db_dir_name)
|
||||||
database.load()
|
database.load()
|
||||||
valid_db_list.append(
|
valid_db_list.append(database)
|
||||||
{
|
except:
|
||||||
'name': database.name,
|
continue
|
||||||
'db_dir_name': database.db_dir_name,
|
|
||||||
'documents_n': database.stats['documents'],
|
|
||||||
'signals_n': database.stats['signals'],
|
|
||||||
'images_n': database.stats['images'],
|
|
||||||
'audio_n': database.stats['audio']
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
return valid_db_list
|
return valid_db_list
|
||||||
|
|
||||||
|
|
||||||
def _valid_db(self, db_dir_name):
|
def get_latest_local_sigid_db(self):
|
||||||
""" Checks if db_dir_name is a valid db dir containing a `data.sqlite` file.
|
""" Return the newest valid local sigID database.
|
||||||
Db must be valid as well and should be properly initialized and loaded with
|
Returns None if no valid sigID database is found.
|
||||||
no errors.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
db_dir_name (str): name of the db folder
|
|
||||||
"""
|
"""
|
||||||
if os.path.exists(DATA_DIR / db_dir_name / Constants.SQL_NAME):
|
valid_dbs = self._parent.dbmanager.scan_db_dir()
|
||||||
try:
|
sig_id_dbs = [db for db in valid_dbs if db.editable == -1]
|
||||||
database = ArtemisDatabase(db_dir_name)
|
|
||||||
database.load()
|
if len(sig_id_dbs) != 0:
|
||||||
return True
|
sig_id_latest = max(sig_id_dbs, key=lambda x: x.version)
|
||||||
except:
|
return sig_id_latest
|
||||||
return False # Invalid or corrupted DB
|
|
||||||
else:
|
else:
|
||||||
return False # The dir is not containing a data.sqlite file
|
return None
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ class UIspaceweather(QObject):
|
|||||||
load_poseidon_report = Signal(dict)
|
load_poseidon_report = Signal(dict)
|
||||||
load_poseidon_forecast_report = Signal(dict)
|
load_poseidon_forecast_report = Signal(dict)
|
||||||
load_poseidon_drap_report = Signal(dict)
|
load_poseidon_drap_report = Signal(dict)
|
||||||
|
load_poseidon_SSA_report = Signal(dict)
|
||||||
|
load_poseidon_sun_images_report = Signal(dict)
|
||||||
load_aurora_report = Signal()
|
load_aurora_report = Signal()
|
||||||
update_bottom_bar = Signal(str)
|
update_bottom_bar = Signal(str)
|
||||||
|
|
||||||
@@ -30,6 +32,8 @@ class UIspaceweather(QObject):
|
|||||||
self._window_forecast = self._window.findChild(QObject, "spaceWeatherForecastObj")
|
self._window_forecast = self._window.findChild(QObject, "spaceWeatherForecastObj")
|
||||||
self._window_drap = self._window.findChild(QObject, "spaceWeatherDRAPObj")
|
self._window_drap = self._window.findChild(QObject, "spaceWeatherDRAPObj")
|
||||||
self._window_aurora = self._window.findChild(QObject, "spaceWeatherAuroraObj")
|
self._window_aurora = self._window.findChild(QObject, "spaceWeatherAuroraObj")
|
||||||
|
self._window_SSA = self._window.findChild(QObject, "spaceWeatherSSA")
|
||||||
|
self._window_sun_images = self._window.findChild(QObject, "spaceWeatherSunImagers")
|
||||||
|
|
||||||
self._connect()
|
self._connect()
|
||||||
|
|
||||||
@@ -43,6 +47,8 @@ class UIspaceweather(QObject):
|
|||||||
self.load_poseidon_report.connect(self._window_current.loadReport)
|
self.load_poseidon_report.connect(self._window_current.loadReport)
|
||||||
self.load_poseidon_forecast_report.connect(self._window_forecast.loadForecastReport)
|
self.load_poseidon_forecast_report.connect(self._window_forecast.loadForecastReport)
|
||||||
self.load_poseidon_drap_report.connect(self._window_drap.loadDrapReport)
|
self.load_poseidon_drap_report.connect(self._window_drap.loadDrapReport)
|
||||||
|
self.load_poseidon_SSA_report.connect(self._window_SSA.loadDrapReport)
|
||||||
|
self.load_poseidon_sun_images_report.connect(self._window_sun_images.loadDrapReport)
|
||||||
self.load_aurora_report.connect(self._window_aurora.loadAuroraReport)
|
self.load_aurora_report.connect(self._window_aurora.loadAuroraReport)
|
||||||
|
|
||||||
|
|
||||||
@@ -62,6 +68,8 @@ class UIspaceweather(QObject):
|
|||||||
self.load_poseidon_report.emit(poseidon_data)
|
self.load_poseidon_report.emit(poseidon_data)
|
||||||
self.load_poseidon_forecast_report.emit(poseidon_data)
|
self.load_poseidon_forecast_report.emit(poseidon_data)
|
||||||
self.load_poseidon_drap_report.emit(poseidon_data)
|
self.load_poseidon_drap_report.emit(poseidon_data)
|
||||||
|
self.load_poseidon_sun_images_report.emit(poseidon_data)
|
||||||
|
self.load_poseidon_SSA_report.emit(poseidon_data)
|
||||||
self.load_aurora_report.emit()
|
self.load_aurora_report.emit()
|
||||||
|
|
||||||
self.update_bottom_bar.emit(
|
self.update_bottom_bar.emit(
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class Constants():
|
|||||||
APPLICATION_NAME = 'Artemis'
|
APPLICATION_NAME = 'Artemis'
|
||||||
ORGANIZATION_NAME = 'AresValley'
|
ORGANIZATION_NAME = 'AresValley'
|
||||||
ORGANIZATION_DOMAIN = 'aresvalley.com'
|
ORGANIZATION_DOMAIN = 'aresvalley.com'
|
||||||
APPLICATION_VERSION = '4.0.3'
|
APPLICATION_VERSION = '4.1.0'
|
||||||
|
|
||||||
SQL_NAME = 'data.sqlite'
|
SQL_NAME = 'data.sqlite'
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
from artemis.utils.constants import Query
|
from artemis.utils.constants import Query
|
||||||
|
|
||||||
|
|
||||||
@@ -75,3 +77,17 @@ def generate_filter_query(filer_status):
|
|||||||
))
|
))
|
||||||
|
|
||||||
return ' INTERSECT '.join(query)
|
return ' INTERSECT '.join(query)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_date(date_str):
|
||||||
|
""" Parses a date string in "%Y-%m-%d %H:%M:%S.%f" format and returns
|
||||||
|
the date in "YYYY-MM-DD" format. If parsing fails, returns the original string.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
date_str (str): The date string to parse.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
form_date = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S.%f")
|
||||||
|
return str(form_date.date())
|
||||||
|
except ValueError:
|
||||||
|
return date_str
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ from datetime import datetime
|
|||||||
from contextlib import closing
|
from contextlib import closing
|
||||||
|
|
||||||
from artemis.utils.constants import Query, Constants
|
from artemis.utils.constants import Query, Constants
|
||||||
from artemis.utils.path_utils import DATA_DIR
|
|
||||||
from artemis.utils.generic_utils import format_frequency
|
from artemis.utils.generic_utils import format_frequency
|
||||||
|
from artemis.utils.path_utils import DATA_DIR
|
||||||
|
|
||||||
|
|
||||||
class Database():
|
class Database():
|
||||||
@@ -141,7 +141,7 @@ class ArtemisDatabase(Database):
|
|||||||
""" Create new db in the data folder.
|
""" Create new db in the data folder.
|
||||||
The name of folder containing the new db has a unique id as name (db_dir_name).
|
The name of folder containing the new db has a unique id as name (db_dir_name).
|
||||||
"""
|
"""
|
||||||
meta = [name, datetime.now(), 0, 0]
|
meta = [name, datetime.now(), 1, 1]
|
||||||
os.makedirs(self.db_dir)
|
os.makedirs(self.db_dir)
|
||||||
os.makedirs(self.media_dir)
|
os.makedirs(self.media_dir)
|
||||||
|
|
||||||
|
|||||||
@@ -19,3 +19,5 @@ def set_ui():
|
|||||||
|
|
||||||
os.environ['QT_ENABLE_GLYPH_CACHE_WORKAROUND'] = '1'
|
os.environ['QT_ENABLE_GLYPH_CACHE_WORKAROUND'] = '1'
|
||||||
os.environ['QML_USE_GLYPHCACHE_WORKAROUND'] = '1'
|
os.environ['QML_USE_GLYPHCACHE_WORKAROUND'] = '1'
|
||||||
|
|
||||||
|
os.environ['QT_DEBUG_PLUGINS'] = CONFIGURE_QT.value('Develop', 'debug_plugin', '0')
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import os
|
import uuid
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from packaging.version import Version
|
from packaging.version import Version
|
||||||
|
|
||||||
from artemis.utils.constants import Constants, Messages
|
from artemis.utils.constants import Constants, Messages
|
||||||
from artemis.utils.sql_utils import ArtemisDatabase
|
from artemis.utils.sys_utils import is_windows, is_linux, is_macos, delete_file, match_hash, unpack_tar, open_file
|
||||||
from artemis.utils.sys_utils import is_windows, is_linux, is_macos, delete_file, delete_dir, match_hash, unpack_tar, open_file
|
|
||||||
from artemis.utils.path_utils import DATA_DIR, TMP_DIR
|
from artemis.utils.path_utils import DATA_DIR, TMP_DIR
|
||||||
|
|
||||||
|
|
||||||
@@ -15,7 +14,6 @@ class UpdateManager:
|
|||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
self._parent = parent
|
self._parent = parent
|
||||||
self.sigid_db_path = DATA_DIR / 'SigID' / Constants.SQL_NAME
|
|
||||||
|
|
||||||
self.db_update = None
|
self.db_update = None
|
||||||
self.art_update = None
|
self.art_update = None
|
||||||
@@ -45,7 +43,7 @@ class UpdateManager:
|
|||||||
"""
|
"""
|
||||||
latest_json = self.fetch_remote_json(Constants.LATEST_VERSION_URL, show_popup)
|
latest_json = self.fetch_remote_json(Constants.LATEST_VERSION_URL, show_popup)
|
||||||
if latest_json:
|
if latest_json:
|
||||||
local_db = self._load_local_db()
|
local_db = self._parent.dbmanager.get_latest_local_sigid_db()
|
||||||
remote_db = latest_json['sigID_DB']
|
remote_db = latest_json['sigID_DB']
|
||||||
|
|
||||||
self.remote_db_version = remote_db['version']
|
self.remote_db_version = remote_db['version']
|
||||||
@@ -104,16 +102,6 @@ class UpdateManager:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def _load_local_db(self):
|
|
||||||
""" Loads the local database if exists
|
|
||||||
"""
|
|
||||||
if os.path.exists(self.sigid_db_path):
|
|
||||||
local_db = ArtemisDatabase('SigID')
|
|
||||||
local_db.load()
|
|
||||||
return local_db
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def download_db(self):
|
def download_db(self):
|
||||||
""" Open the downloader and download the sigID database in the
|
""" Open the downloader and download the sigID database in the
|
||||||
TMP_DIR folder. After a succesfull download the callback function
|
TMP_DIR folder. After a succesfull download the callback function
|
||||||
@@ -133,9 +121,9 @@ class UpdateManager:
|
|||||||
"""
|
"""
|
||||||
latest_db_tar_path = TMP_DIR / self.remote_db_file_name
|
latest_db_tar_path = TMP_DIR / self.remote_db_file_name
|
||||||
if match_hash(latest_db_tar_path, self.remote_db_hash):
|
if match_hash(latest_db_tar_path, self.remote_db_hash):
|
||||||
delete_dir(DATA_DIR / 'SigID')
|
db_dir_name = str(uuid.uuid4())
|
||||||
unpack_tar(latest_db_tar_path, DATA_DIR / 'SigID')
|
unpack_tar(latest_db_tar_path, DATA_DIR / db_dir_name)
|
||||||
self._parent.load_db('SigID')
|
self._parent.load_db(db_dir_name)
|
||||||
self._show_popup_db_download_complete()
|
self._show_popup_db_download_complete()
|
||||||
else:
|
else:
|
||||||
self._show_popup_db_hash_failed()
|
self._show_popup_db_hash_failed()
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ echo "Building Linux target ..."
|
|||||||
|
|
||||||
echo "Installing requirements ..."
|
echo "Installing requirements ..."
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
pip install nuitka==2.3
|
pip install nuitka==2.4.10
|
||||||
|
|
||||||
echo "Building with Nuitka ..."
|
echo "Building with Nuitka ..."
|
||||||
python -m nuitka app.py \
|
python -m nuitka app.py \
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Write-Output "Building Windows target"
|
|||||||
|
|
||||||
Write-Output "Installing requirements ..."
|
Write-Output "Installing requirements ..."
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
pip install nuitka==2.3
|
pip install nuitka==2.4.10
|
||||||
|
|
||||||
Write-Output "Building with Nuitka ..."
|
Write-Output "Building with Nuitka ..."
|
||||||
python -m nuitka app.py `
|
python -m nuitka app.py `
|
||||||
@@ -25,8 +25,8 @@ python -m nuitka app.py `
|
|||||||
--force-stdout-spec="{TEMP}\artemis.out.log" `
|
--force-stdout-spec="{TEMP}\artemis.out.log" `
|
||||||
--windows-company-name=Aresvalley.com `
|
--windows-company-name=Aresvalley.com `
|
||||||
--windows-product-name=Artemis `
|
--windows-product-name=Artemis `
|
||||||
--windows-file-version=4.0.3 `
|
--windows-file-version=4.1.0 `
|
||||||
--windows-product-version=4.0.3 `
|
--windows-product-version=4.1.0 `
|
||||||
--windows-file-description=Artemis `
|
--windows-file-description=Artemis `
|
||||||
--windows-icon-from-ico=images\artemis_icon.ico
|
--windows-icon-from-ico=images\artemis_icon.ico
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#define MyAppName "Artemis"
|
#define MyAppName "Artemis"
|
||||||
#define MyAppVersion "4.0.3"
|
#define MyAppVersion "4.1.0"
|
||||||
#define MyAppPublisher "AresValley"
|
#define MyAppPublisher "AresValley"
|
||||||
#define MyAppURL "https://www.aresvalley.com/"
|
#define MyAppURL "https://www.aresvalley.com/"
|
||||||
#define MyAppExeName "artemis.exe"
|
#define MyAppExeName "artemis.exe"
|
||||||
|
|||||||
@@ -23,6 +23,6 @@ python -m nuitka app.py \
|
|||||||
--macos-app-name=Artemis \
|
--macos-app-name=Artemis \
|
||||||
--macos-app-mode=gui \
|
--macos-app-mode=gui \
|
||||||
--macos-sign-identity=ad-hoc \
|
--macos-sign-identity=ad-hoc \
|
||||||
--macos-app-version=4.0.3
|
--macos-app-version=4.1.0
|
||||||
|
|
||||||
echo "Building Linux target finished."
|
echo "Building Linux target finished."
|
||||||
|
|||||||
@@ -8,3 +8,6 @@ accent=Green
|
|||||||
|
|
||||||
[Database]
|
[Database]
|
||||||
autoload=0
|
autoload=0
|
||||||
|
|
||||||
|
[Develop]
|
||||||
|
debug_plugin=0
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
{
|
{
|
||||||
"sigID_DB": {
|
"sigID_DB": {
|
||||||
"version": 61,
|
"version": 72,
|
||||||
"url": "https://github.com/AresValley/Artemis-DB/releases/download/v61/v61.tar",
|
"url": "https://github.com/AresValley/Artemis-DB/releases/download/v72/v72.tar",
|
||||||
"sha256_hash": "c65d2ab65e9420cd7789190c100abef2f1575ea15489776c2d97b5b09cdc8410",
|
"sha256_hash": "e41c211b0b51ad752404ffefe807638039b6386a6a21d8e5dac161f6143c95c5",
|
||||||
"total_bytes": 244449280
|
"total_bytes": 199249920
|
||||||
},
|
},
|
||||||
"windows": {
|
"windows": {
|
||||||
"version": "4.0.3",
|
"version": "4.1.0",
|
||||||
"url": "https://github.com/AresValley/Artemis/releases/download/v4.0.3/Artemis-Windows-x86_64-4.0.3.exe"
|
"url": "https://github.com/AresValley/Artemis/releases/download/v4.1.0/Artemis-Windows-x86_64-4.1.0.exe"
|
||||||
},
|
},
|
||||||
"linux": {
|
"linux": {
|
||||||
"version": "4.0.3",
|
"version": "4.1.0",
|
||||||
"url": "https://github.com/AresValley/Artemis/releases/download/v4.0.3/Artemis-Linux-x86_64-4.0.3.zip"
|
"url": "https://github.com/AresValley/Artemis/releases/download/v4.1.0/Artemis-Linux-x86_64-4.1.0.zip"
|
||||||
},
|
},
|
||||||
"mac": {
|
"mac": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
|
|||||||
BIN
docs/assets/HMIB.webp
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/assets/HMID.webp
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
docs/assets/HMII.webp
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
docs/assets/aia_0094.webp
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
docs/assets/aia_0131.webp
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
docs/assets/aia_0171.webp
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
docs/assets/aia_0193.webp
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
docs/assets/aia_0304.webp
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
docs/assets/aia_0335.webp
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
docs/assets/aia_1600.webp
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
docs/assets/aia_1700.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
docs/assets/lasco_c2.webp
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
docs/assets/lasco_c3.webp
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
docs/assets/ssa_1.webp
Normal file
|
After Width: | Height: | Size: 186 KiB |
@@ -5,21 +5,58 @@
|
|||||||
## 1. Main Menu
|
## 1. Main Menu
|
||||||
|
|
||||||
### File
|
### File
|
||||||
* **New Database:** Create a new database.
|
|
||||||
* **Load Database:** Open the Database Manager windows in order to open, rename, or delete a database.
|
* **New Database**
|
||||||
* **Import Database:** Import an Artemis database with a standard .tar format.
|
|
||||||
* **Export Database:** Export the loaded database with a standard .tar format.
|
Create a new database.
|
||||||
* **Edit Tags:** Open the tags editor window. From here, you can add, rename, or delete tags. The tags can be added to a signal from the [tags menu](#4-tags)
|
|
||||||
* **Open Database Folder:** Shows the folder of the currently loaded database in the explorer.
|
* **Load Database**
|
||||||
* **Preferences:** Open the program settings window.
|
|
||||||
* **Exit:** This will close the application.
|
Open the Database Manager windows in order to open, rename, or delete a database.
|
||||||
|
|
||||||
|
* **Import Database**
|
||||||
|
|
||||||
|
Import an Artemis database with a standard .tar format.
|
||||||
|
!!! tip "Offline Importing of SigID Database"
|
||||||
|
Sometimes it may happen that a computer does not have network access and unfortunately Artemis cannot download the SigID database. To solve this you can:
|
||||||
|
|
||||||
|
1. Download the .tar database [:material-download: HERE](https://github.com/AresValley/Artemis-DB/releases) from a PC with an internet access
|
||||||
|
2. Import the downloaded .tar on the target PC (without internet access) using the **Import Database** function
|
||||||
|
|
||||||
|
* **Export Database**
|
||||||
|
|
||||||
|
Export the loaded database with a standard .tar format.
|
||||||
|
|
||||||
|
* **Edit Tags**
|
||||||
|
|
||||||
|
Open the tags editor window. From here, you can add, rename, or delete tags. The tags can be added to a signal from the [tags menu](#4-tags)
|
||||||
|
|
||||||
|
* **Open Database Folder**
|
||||||
|
|
||||||
|
Shows the folder of the currently loaded database in the explorer.
|
||||||
|
|
||||||
|
* **Preferences**
|
||||||
|
|
||||||
|
Open the program settings window.
|
||||||
|
|
||||||
|
* **Exit**
|
||||||
|
|
||||||
|
This will close the application.
|
||||||
|
|
||||||
### Signal
|
### Signal
|
||||||
* **New:** Add a new signal to the database.
|
* **New**
|
||||||
* **Edit:** Edit the current/selected signal from the loaded database.
|
|
||||||
|
Add a new signal to the database.
|
||||||
|
|
||||||
|
* **Edit**
|
||||||
|
|
||||||
|
Edit the current/selected signal from the loaded database.
|
||||||
|
|
||||||
### Space Weather
|
### Space Weather
|
||||||
* **Check Report:** Open the main [Space Weather window](space_weather/current.md) and retrieve all the live data from Poseidon Crawler.
|
|
||||||
|
* **Check Report**
|
||||||
|
|
||||||
|
Open the main [Space Weather window](space_weather/current.md) and retrieve all the live data from Poseidon Crawler.
|
||||||
|
|
||||||
## 2. Signal List
|
## 2. Signal List
|
||||||
This is the signal list where all the database entries are shown. When a signal is selected, it will load on the right panel.
|
This is the signal list where all the database entries are shown. When a signal is selected, it will load on the right panel.
|
||||||
@@ -31,9 +68,18 @@ On top of the list, there is a field for filtering signals by name or any keywor
|
|||||||
Here you can swithc between the main **signal** window and the **filter** page.
|
Here you can swithc between the main **signal** window and the **filter** page.
|
||||||
|
|
||||||
## 4. Tags
|
## 4. Tags
|
||||||
* **Associate Tag:** Custom tags can be associated to the selected signal with the :octicons-plus-circle-16: icon
|
|
||||||
* **Remove Tag:** In order to remove a tag, just click on its badge.
|
* **Associate Tag**
|
||||||
* **Add/Rename Tag:** To add a new tag open the [Tags Editor](#1-main-menu) in the main menu.
|
|
||||||
|
Custom tags can be associated to the selected signal with the :octicons-plus-circle-16: icon
|
||||||
|
|
||||||
|
* **Remove Tag**
|
||||||
|
|
||||||
|
In order to remove a tag, just click on its badge.
|
||||||
|
|
||||||
|
* **Add/Rename Tag**
|
||||||
|
|
||||||
|
To add a new tag open the [Tags Editor](#1-main-menu) in the main menu.
|
||||||
|
|
||||||
## 5. Add Parameter
|
## 5. Add Parameter
|
||||||
Click on the labels to add the corresponding parameter to the signal (e.g. click on **Frequency** to add a new frequency).
|
Click on the labels to add the corresponding parameter to the signal (e.g. click on **Frequency** to add a new frequency).
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ A simple integer to denote the database version.
|
|||||||
|
|
||||||
This field should serve as a writing protection on the database.
|
This field should serve as a writing protection on the database.
|
||||||
|
|
||||||
|
* **-1**: reserved to sigID database. This is the primary way to distinguish a valid sigID database
|
||||||
* **0**: read-only database
|
* **0**: read-only database
|
||||||
* **1**: database can be edited with no restrictions
|
* **1**: database can be edited with no restrictions
|
||||||
|
|
||||||
!!! example "Experimental"
|
|
||||||
This feature is experimental and not yet implemented.
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
<div align="center" markdown>
|
<div align="center" markdown>
|
||||||
|
|
||||||

|

|
||||||
|

|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -11,4 +11,4 @@ title: Documentation
|
|||||||
[Artemis Homepage](https://www.aresvalley.com){ .md-button }
|
[Artemis Homepage](https://www.aresvalley.com){ .md-button }
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
**Artemis** is a software designed to assist **radio frequency (RF) signal identification and storage**. It simplifies real-time spectrum analysis by leveraging one of the most extensive and community-driven databases, containing nearly **500 recognized signals**. This comprehensive software solution allows users to collect RF signals with specific parameters such as frequency, bandwidth, modulation, etc. Users can also store spectrum waterfalls, audio samples, and all types of documents for future reference. Artemis provides a robust platform to manage a wide range of RF data with precision and ease.
|
**Artemis** is a software designed to assist **radio frequency (RF) signal identification and storage**. It simplifies real-time spectrum analysis by leveraging one of the most extensive and community-driven databases, containing over **520 recognized signals**. This comprehensive software solution allows users to collect RF signals with specific parameters such as frequency, bandwidth, modulation, etc. Users can also store spectrum waterfalls, audio samples, and all types of documents for future reference. Artemis provides a robust platform to manage a wide range of RF data with precision and ease.
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
1. On Linux, the xcb plugin is utilized to supply the essential functionality required for Qt GUI and Qt Widgets to operate on [X11](https://doc.qt.io/qt-6/linux-requirements.html). On some Linux distributions the required dependencies are already met, but in many cases, you will need to install them. To install the dependencies use:
|
1. On Linux, the xcb plugin is utilized to supply the essential functionality required for Qt GUI and Qt Widgets to operate on [X11](https://doc.qt.io/qt-6/linux-requirements.html). On some Linux distributions the required dependencies are already met, but in many cases, you will need to install them. To install the dependencies use:
|
||||||
|
|
||||||
``` bash title="Debian-based distro (Ubuntu, Mint, Pop! OS, Kali, ...)"
|
``` bash title="Debian-based distro (Ubuntu, Mint, Pop! OS, Kali, ...)"
|
||||||
sudo apt install libxcb-cursor0
|
sudo apt install libxcb-*
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Download `Artemis-Linux-x86_64-4.x.x.tar` in the Assets menu from the [:material-download: LATEST RELEASE](https://github.com/AresValley/Artemis/releases) and extract the tarball archive in a folder of your choice.
|
2. Download `Artemis-Linux-x86_64-4.x.x.tar` in the Assets menu from the [:material-download: LATEST RELEASE](https://github.com/AresValley/Artemis/releases) and extract the tarball archive in a folder of your choice.
|
||||||
|
|||||||
37
docs/space_weather/SSA.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# Solar Synoptic Analysis
|
||||||
|
Synoptic maps of the solar surface are drawn each day by SWPC forecasters, providing forecasters with a broad outline of solar surface features. These maps were started on June 2, 1972 and have been produced daily since then.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
!!! quote "Source"
|
||||||
|
The Solar Synoptic Analysis is courtesy of the Space Weather Prediction Center (SWPC) part of the National Oceanic and Atmospheric Administration (NOAA), located in Boulder, Colorado.
|
||||||
|
|
||||||
|
## How to Read
|
||||||
|
|
||||||
|
### Active Regions
|
||||||
|
Active regions are localized magnetic fields on the Sun. Areas with strong or intense magnetic fields provide energy for solar flares and coronal mass ejections (CMEs), so accurate forecasting of space weather activity requires an accurate picture of these regions.
|
||||||
|
**Active regions are given official numbers by SWPC, and the drawings include the probabilities of C, M, and X class flares for the next 24 hours associated with each active region, along with a proton event probability.**
|
||||||
|
|
||||||
|
### Coronal Holes
|
||||||
|
Coronal holes are single polarity magnetic regions that are the source of high speed solar winds which drive magnetospheric activity. Coronal holes are the most common cause of geomagnetic storms. Coronal holes have historically been identified from He I 10830A ground-based observations. **The boundaries of coronal holes are shown on the synoptic drawings as lines with hash marks on the coronal hole side of the boundary line.**
|
||||||
|
|
||||||
|
### Neutral Lines
|
||||||
|
Large magnetic field structures of one magnetic polarity have a ‘neutral line’ at the boundary of the different magnetic polarities of the fields. Neutral lines are associated with flaring in active regions, and filaments/prominences are often associated with the neutral lines on a quiet sun. **Neutral lines appear as dashed lines on the synoptic drawings and the forecaster indicates the polarity of the magnetic field on either side of the neutral line with + (positive) and – (negative) signs.**
|
||||||
|
|
||||||
|
### Plages
|
||||||
|
Plages make up most of an Active Region, and appear bright in conjunction with the dark sunspots. Plages have strong magnetic fields but disorganized magnetic fields, unlike the highly organized fields of sunspots. **In the synoptic drawings, plages are colored red.** It is quite normal to have regions of plage with no sunspots, which do not receive an official number since they are not considered active regions and are unlikely to produce solar flares.
|
||||||
|
|
||||||
|
### Filaments and Prominences
|
||||||
|
Highly-stable regions of high density gas in the low density corona are called filaments. When these occur near the limb and can be seen protruding from the corona, often in spectacular fashion, they are called prominences. When they erupt they can be a geomagnetic storm threat, but the eruptions are usually slow and don’t often drive large storms. **The filaments and prominences are drawn as outlines with hash marks.**
|
||||||
|
|
||||||
|
## Solar Coordinates
|
||||||
|
- Lt: The current Carrington longitude line (north to south) at solar center disk.
|
||||||
|
- Bt: Referred to as the B-angle. The angle measured from the current position of Earth within its tilted (inclined) orbit, compared to the Sun’s equator. It ranges between + or – 7.23 degrees.
|
||||||
|
- Pt: Referred to as the position angle. Essentially, the current angle between Earth’s geocentric north pole and the Sun’s rotational north pole. The range is between + or – 26.31 degrees.
|
||||||
|
- Returning Carringtons: Refers to the next 3 days of returning Carrington longitude lines to the east limb of the Sun.
|
||||||
|
|
||||||
|
## Spot Group Labeling
|
||||||
|
Spot groups are labeled with their assigned NOAA SWPC number. Underneath that number are four probability numbers (from 1 to 100 %) for C-class flares, M-class flares, X-class flares, and energetic proton events.
|
||||||
|
|
||||||
|
## Coronal Hole Labeling
|
||||||
|
Coronal holes are labeled with their assigned number. Underneath that number is a plus or minus sign representing the polarity of the coronal hole. Beside that figure is a number from 1 to 4 representing confidence of coronal hole analysis (4=good; 3=fair; 2=poor; 1=uncertain).
|
||||||
114
docs/space_weather/imagers.md
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
# Sun Imagers
|
||||||
|
|
||||||
|
## Atmospheric Imagery Assembly
|
||||||
|
### 94 Å
|
||||||
|

|
||||||
|
|
||||||
|
This channel (as well as AIA 131) is designed to study solar flares. It measures extremely hot temperatures around 6 million Kelvin (10.8 million F). It can take images every 2 seconds (instead of 10) in a reduced field of view in order to look at flares in more detail.
|
||||||
|
|
||||||
|
- **Where:** Flaring regions of the corona
|
||||||
|
- **Wavelength:** 94 angstroms (0.0000000094 m) = Extreme Ultraviolet/soft X-rays
|
||||||
|
- **Primary ions seen:** 17 times ionized iron (Fe XVIII)
|
||||||
|
- **Characteristic temperature:** 6 million K (10.8 million F)
|
||||||
|
|
||||||
|
### 131 Å
|
||||||
|

|
||||||
|
|
||||||
|
This channel (as well as AIA 094) is designed to study solar flares. It measures extremely hot temperatures around 10 million K (18 million F), as well as cool plasmas around 400,000 K (720,000 F). It can take images every 2 seconds (instead of 10) in a reduced field of view in order to look at flares in more detail.
|
||||||
|
|
||||||
|
- **Where:** Flaring regions of the corona
|
||||||
|
- **Wavelength:** 131 angstroms (0.0000000131 m) = Extreme Ultraviolet
|
||||||
|
- **Primary ions seen:** 20 and 7 times ionized iron (Fe VIII, Fe XXI)
|
||||||
|
- **Characteristic temperatures:** 10 million K (18 million F)
|
||||||
|
|
||||||
|
### 171 Å
|
||||||
|

|
||||||
|
|
||||||
|
This channel is especially good at showing coronal loops - the arcs extending off of the Sun where plasma moves along magnetic field lines. The brightest spots seen here are locations where the magnetic field near the surface is exceptionally strong.
|
||||||
|
|
||||||
|
- **Where:** Quiet corona and upper transition region
|
||||||
|
- **Wavelength:** 171 angstroms (0.0000000171 m) = Extreme Ultraviolet
|
||||||
|
- **Primary ions seen:** 8 times ionized iron (Fe IX)
|
||||||
|
- **Characteristic temperature:** 1 million K (1.8 million F)
|
||||||
|
|
||||||
|
### 193 Å
|
||||||
|

|
||||||
|
|
||||||
|
This channel highlights the outer atmosphere of the Sun - called the corona - as well as hot flare plasma. Hot active regions, solar flares, and coronal mass ejections will appear bright here. The dark areas - called coronal holes - are places where very little radiation is emitted, yet are the main source of solar wind particles.
|
||||||
|
|
||||||
|
- **Where:** Corona and hot flare plasma
|
||||||
|
- **Wavelength:** 193 angstroms (0.0000000193 m) = Extreme Ultraviolet
|
||||||
|
- **Primary ions seen:** 11 times ionized iron (Fe XII)
|
||||||
|
- **Characteristic temperature:** 1.25 million K (2.25 million F)
|
||||||
|
|
||||||
|
### 304 Å
|
||||||
|

|
||||||
|
|
||||||
|
This channel is especially good at showing areas where cooler dense plumes of plasma (filaments and prominences) are located above the visible surface of the Sun. Many of these features either can't be seen or appear as dark lines in the other channels. The bright areas show places where the plasma has a high density.
|
||||||
|
|
||||||
|
- **Where:** Upper chromosphere and lower transition region
|
||||||
|
- **Wavelength:** 304 angstroms (0.0000000304 m) = Extreme Ultraviolet
|
||||||
|
- **Primary ions seen:** singly ionized helium (He II)
|
||||||
|
- **Characteristic temperature:** 50,000 K (90,000 F)
|
||||||
|
|
||||||
|
### 335 Å
|
||||||
|

|
||||||
|
|
||||||
|
This channel (as well as AIA 211) highlights the active region of the outer atmosphere of the Sun - the corona. Active regions, solar flares, and coronal mass ejections will appear bright here. The dark areas - or coronal holes - are places where very little radiation is emitted, yet are the main source of solar wind particles.
|
||||||
|
|
||||||
|
- **Where:** Active regions of the corona
|
||||||
|
- **Wavelength:** 335 angstroms (0.0000000335 m) = Extreme Ultraviolet
|
||||||
|
- **Primary ions seen:** 15 times ionized iron (Fe XVI)
|
||||||
|
- **Characteristic temperature:** 2.8 million K (5 million F)
|
||||||
|
|
||||||
|
### 1600 Å
|
||||||
|

|
||||||
|
|
||||||
|
This channel (as well as AIA 1700) often shows a web-like pattern of bright areas that highlight places where bundles of magnetic fields lines are concentrated. However, small areas with a lot of field lines will appear black, usually near sunspots and active regions.
|
||||||
|
|
||||||
|
- **Where:** Transition region and upper photosphere
|
||||||
|
- **Wavelength:** 1600 angstroms (0.00000016 m) = Far Ultraviolet
|
||||||
|
- **Primary ions seen:** thrice ionized carbon (C IV) and Continuum
|
||||||
|
- **Characteristic temperatures:** 6,000 K (11,000 F), and 100,000 K (180,000 F)
|
||||||
|
|
||||||
|
### 1700 Å
|
||||||
|

|
||||||
|
|
||||||
|
This channel (as well as AIA 1600) often shows a web-like pattern of bright areas that highlight places where bundles of magnetic fields lines are concentrated. However, small areas with a lot of field lines will appear black, usually near sunspots and active regions.
|
||||||
|
|
||||||
|
- **Where:** Temperature minimum and photosphere
|
||||||
|
- **Wavelength:** 1700 angstroms (0.00000017 m) = Far Ultraviolet
|
||||||
|
- **Primary ions seen:** Continuum
|
||||||
|
- **Characteristic temperature:** 6,000 K (11,000 F)
|
||||||
|
|
||||||
|
---
|
||||||
|
## Helioseismic and Magnetic Imager
|
||||||
|
### Magnetogram
|
||||||
|

|
||||||
|
|
||||||
|
Magnetograms show maps of the magnetic field on the Sun’s surface. The HMI instrument uses the Zeeman effect to measure the intensity of the magnetic field component along the line of sight by making use of the circularly polarized spectral line. The color chart of the magnetic field along the line of sight is designed to visually show both high and low values. Intensities less than 24G are shades of gray. Positive values of the field are green and blue. Negative values are yellow and red. Regions with a weak field appear mainly in yellow or green. Progressively positive values range from dark green to light green (at 236 G). Negative values range from light yellow to orange (at -236G). There is a strong discontinuity in the coloration at 236G. Positive or negative sunspots and other regions with an intense field appear blue or red with dark umbrae. There are 254 colors arranged symmetrically around 0. The 127 positive values include 2 grays tending toward dark, 13 greens toward light, and 110 blues toward dark. The 127 negative values include 2 grays tending toward light, 18 yellows toward dark, and 107 reds toward dark. Nominally, each color indicates a range of about 11.81 G, and the coloration altogether spans the range between -1500 G and 1500 G
|
||||||
|
|
||||||
|
### Intensitygram
|
||||||
|

|
||||||
|
|
||||||
|
HMI samples the Fe I absorption line at 6173.3 Å at six points, assuming that the "pure" profile of the Fe I line is Gaussian and the transmission profiles are delta functions, the first and second Fourier coefficients of the Fe I line profile can be calculated, and Doppler velocity estimation can be performed. An estimate of the intensity in the continuum is obtained by "reconstructing" the solar line from the Doppler offset and the thickness and depth of the line.
|
||||||
|
|
||||||
|
### Dopplergram
|
||||||
|

|
||||||
|
|
||||||
|
HMI camera 2 takes 72 images to construct a single Doppler diagram. Six images are taken at six positions across the spectral line at 6173.3 Å. Each image is taken in two polarization states, circularly polarized to the right (RCP or Stokes I-V) and circularly polarized to the left (LCP or Stokes I+V). Assuming that the absorption line is Gaussian and the transmission profiles of the HMI filter are delta functions, Fourier coefficients are calculated and then used to estimate the magnetic field B along the line of sight.
|
||||||
|
|
||||||
|
---
|
||||||
|
## Large Angle and Spectrometric Coronagraph
|
||||||
|
### LASCO C1 (NOT AVAILABLE)
|
||||||
|
A Fabry–Pérot interferometer coronagraph imaging from 1.1 to 3 solar radii, non-functional since the 24 June 1998 SOHO Mission Interruption
|
||||||
|
|
||||||
|
### LASCO C2 (orange)
|
||||||
|

|
||||||
|
|
||||||
|
A white light coronagraph imaging from 1.5 to 6 solar radii. The LASCO camera is equipped with an occulting disk that blocks out the Sun to be able to study the faint details in the corona.
|
||||||
|
|
||||||
|
### LASCO C3 (blue)
|
||||||
|

|
||||||
|
|
||||||
|
A white light coronagraph imaging from 3.7 to 30 solar radii
|
||||||
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#5f6368"><path d="M671-177q-11 7-22 13t-23 11q-15 7-30.5 0T574-176q-6-15 1.5-29.5T598-227q7-3 13-6.5t12-7.5L480-368v111q0 27-24.5 37.5T412-228L280-360H160q-17 0-28.5-11.5T120-400v-160q0-17 11.5-28.5T160-600h88L84-764q-11-11-11-28t11-28q11-11 28-11t28 11l680 680q11 11 11 28t-11 28q-11 11-28 11t-28-11l-93-93Zm89-304q0-83-44-151.5T598-735q-15-7-22-21.5t-2-29.5q6-16 21.5-23t31.5 0q97 43 155 131t58 197q0 33-6 65.5T817-353q-8 22-24.5 27.5t-30.5.5q-14-5-22.5-18t-.5-30q11-26 16-52.5t5-55.5ZM591-623q33 21 51 63t18 80v10q0 5-1 10-2 13-14 17t-22-6l-51-51q-6-6-9-13.5t-3-15.5v-77q0-12 10.5-17.5t20.5.5Zm-201-59q-6-6-6-14t6-14l22-22q19-19 43.5-8.5T480-703v63q0 14-12 19t-22-5l-56-56Z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 783 B |
1
images/icons/settings.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#5f6368"><path d="M433-80q-27 0-46.5-18T363-142l-9-66q-13-5-24.5-12T307-235l-62 26q-25 11-50 2t-39-32l-47-82q-14-23-8-49t27-43l53-40q-1-7-1-13.5v-27q0-6.5 1-13.5l-53-40q-21-17-27-43t8-49l47-82q14-23 39-32t50 2l62 26q11-8 23-15t24-12l9-66q4-26 23.5-44t46.5-18h94q27 0 46.5 18t23.5 44l9 66q13 5 24.5 12t22.5 15l62-26q25-11 50-2t39 32l47 82q14 23 8 49t-27 43l-53 40q1 7 1 13.5v27q0 6.5-2 13.5l53 40q21 17 27 43t-8 49l-48 82q-14 23-39 32t-50-2l-60-26q-11 8-23 15t-24 12l-9 66q-4 26-23.5 44T527-80h-94Zm49-260q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 690 B |
@@ -73,6 +73,8 @@ nav:
|
|||||||
- Forecasts: 'space_weather/forecasts.md'
|
- Forecasts: 'space_weather/forecasts.md'
|
||||||
- DRAP: 'space_weather/drap.md'
|
- DRAP: 'space_weather/drap.md'
|
||||||
- Aurora: 'space_weather/aurora.md'
|
- Aurora: 'space_weather/aurora.md'
|
||||||
|
- SSA: 'space_weather/SSA.md'
|
||||||
|
- Sun Imagers: 'space_weather/imagers.md'
|
||||||
- Signal Analysis:
|
- Signal Analysis:
|
||||||
- Autocorrelation (ACF): 'acf_analysis.md'
|
- Autocorrelation (ACF): 'acf_analysis.md'
|
||||||
- FAQ: 'faq.md'
|
- FAQ: 'faq.md'
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
PySide6==6.7.1
|
PySide6==6.8.0.1
|
||||||
requests==2.32.2
|
requests==2.32.3
|
||||||
packaging==24.0
|
packaging==24.1
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ Window {
|
|||||||
if (selected_db !== undefined) {
|
if (selected_db !== undefined) {
|
||||||
lockMenu(false)
|
lockMenu(false)
|
||||||
titleLabel.text = myModel.get(listView.currentIndex).name
|
titleLabel.text = myModel.get(listView.currentIndex).name
|
||||||
|
versionLabel.text = 'VERSION ' + myModel.get(listView.currentIndex).version
|
||||||
|
dateLabel.text = myModel.get(listView.currentIndex).date
|
||||||
totDocsLabel.text = myModel.get(listView.currentIndex).documents_n
|
totDocsLabel.text = myModel.get(listView.currentIndex).documents_n
|
||||||
totSignalsLabel.text = myModel.get(listView.currentIndex).signals_n
|
totSignalsLabel.text = myModel.get(listView.currentIndex).signals_n
|
||||||
totImagesLabel.text = myModel.get(listView.currentIndex).images_n
|
totImagesLabel.text = myModel.get(listView.currentIndex).images_n
|
||||||
@@ -44,6 +46,8 @@ Window {
|
|||||||
|
|
||||||
function clearAll() {
|
function clearAll() {
|
||||||
titleLabel.text = 'N/A'
|
titleLabel.text = 'N/A'
|
||||||
|
versionLabel.text = ''
|
||||||
|
dateLabel.text = ''
|
||||||
totDocsLabel.text = ''
|
totDocsLabel.text = ''
|
||||||
totSignalsLabel.text = ''
|
totSignalsLabel.text = ''
|
||||||
totImagesLabel.text = ''
|
totImagesLabel.text = ''
|
||||||
@@ -175,11 +179,16 @@ Window {
|
|||||||
|
|
||||||
Label {
|
Label {
|
||||||
id: titleLabel
|
id: titleLabel
|
||||||
Layout.bottomMargin: 20
|
|
||||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||||
font.pointSize: 15
|
font.pointSize: 15
|
||||||
font.bold: true
|
font.bold: true
|
||||||
}
|
}
|
||||||
|
Label {
|
||||||
|
id: versionLabel
|
||||||
|
Layout.bottomMargin: 20
|
||||||
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||||
|
font.pointSize: 9
|
||||||
|
}
|
||||||
GridLayout {
|
GridLayout {
|
||||||
columnSpacing: 25
|
columnSpacing: 25
|
||||||
columns: 2
|
columns: 2
|
||||||
@@ -231,6 +240,19 @@ Window {
|
|||||||
text: qsTr("0")
|
text: qsTr("0")
|
||||||
font.pointSize: 12
|
font.pointSize: 12
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
Layout.topMargin: 20
|
||||||
|
text: qsTr("DB Created:")
|
||||||
|
font.pointSize: 12
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: dateLabel
|
||||||
|
Layout.topMargin: 20
|
||||||
|
text: qsTr("")
|
||||||
|
font.pointSize: 12
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
|||||||
@@ -48,6 +48,10 @@ Window {
|
|||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: columnLayout
|
id: columnLayout
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
anchors.rightMargin: 10
|
||||||
|
anchors.leftMargin: 10
|
||||||
|
anchors.bottomMargin: 10
|
||||||
|
anchors.topMargin: 10
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
text: qsTr("Downloading in progress...")
|
text: qsTr("Downloading in progress...")
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ Window {
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
text: "Auto-load SigID Database on Startup"
|
text: "Auto-load SigID database on startup (latest version)"
|
||||||
font.pixelSize: 12
|
font.pixelSize: 12
|
||||||
clip: true
|
clip: true
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|||||||
@@ -56,6 +56,12 @@ Window {
|
|||||||
TabButton {
|
TabButton {
|
||||||
text: qsTr("Aurora")
|
text: qsTr("Aurora")
|
||||||
}
|
}
|
||||||
|
TabButton {
|
||||||
|
text: qsTr("SSA")
|
||||||
|
}
|
||||||
|
TabButton {
|
||||||
|
text: qsTr("Sun Imagers")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StackLayout {
|
StackLayout {
|
||||||
@@ -86,6 +92,18 @@ Window {
|
|||||||
id: spaceWeatherAuroraPage
|
id: spaceWeatherAuroraPage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
SpaceWeatherSSA {
|
||||||
|
id: spaceWeatherSSA
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
SpaceWeatherSunImagers {
|
||||||
|
id: spaceWeatherSunImagers
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
49
ui/SpaceWeatherSSA.qml
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Window
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Controls.Material
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
|
||||||
|
Page {
|
||||||
|
id: spaceWeatherSSA
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
objectName: "spaceWeatherSSA"
|
||||||
|
|
||||||
|
function loadDrapReport(poseidon_data) {
|
||||||
|
checkUrlExists(poseidon_data['URL']['SYNOPTIC_MAP'], function(exists) {
|
||||||
|
if (exists) {
|
||||||
|
imageBox.source = poseidon_data['URL']['SYNOPTIC_MAP']
|
||||||
|
} else {
|
||||||
|
imageBox.source = "qrc:///images/artemis_not_available.svg"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkUrlExists(url, callback) {
|
||||||
|
var xhr = new XMLHttpRequest()
|
||||||
|
xhr.onreadystatechange = function() {
|
||||||
|
if (xhr.readyState === XMLHttpRequest.DONE) {
|
||||||
|
callback(xhr.status === 200)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xhr.open("HEAD", url, true)
|
||||||
|
xhr.send()
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.rightMargin: 10
|
||||||
|
anchors.leftMargin: 10
|
||||||
|
anchors.bottomMargin: 10
|
||||||
|
anchors.topMargin: 10
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: imageBox
|
||||||
|
Layout.fillHeight: true
|
||||||
|
Layout.fillWidth: true
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
82
ui/SpaceWeatherSunImagers.qml
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Window
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Controls.Material
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
|
||||||
|
Page {
|
||||||
|
id: spaceWeatherSunImagers
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
objectName: "spaceWeatherSunImagers"
|
||||||
|
|
||||||
|
property var poseidon_json
|
||||||
|
|
||||||
|
function loadDrapReport(poseidon_data) {
|
||||||
|
poseidon_json = poseidon_data
|
||||||
|
loadImage(poseidon_json['URL'][comboBoxImageProduct.currentValue.value])
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadImage(url) {
|
||||||
|
checkUrlExists(url, function(exists) {
|
||||||
|
if (exists) {
|
||||||
|
imageBox.source = url
|
||||||
|
} else {
|
||||||
|
imageBox.source = "qrc:///images/artemis_not_available.svg"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkUrlExists(url, callback) {
|
||||||
|
var xhr = new XMLHttpRequest()
|
||||||
|
xhr.onreadystatechange = function() {
|
||||||
|
if (xhr.readyState === XMLHttpRequest.DONE) {
|
||||||
|
callback(xhr.status === 200)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xhr.open("HEAD", url, true)
|
||||||
|
xhr.send()
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.rightMargin: 10
|
||||||
|
anchors.leftMargin: 10
|
||||||
|
anchors.bottomMargin: 10
|
||||||
|
anchors.topMargin: 10
|
||||||
|
|
||||||
|
ComboBox {
|
||||||
|
id: comboBoxImageProduct
|
||||||
|
textRole: 'text'
|
||||||
|
Layout.fillWidth: true
|
||||||
|
model: ListModel {
|
||||||
|
ListElement { text: "94 Å - Atmospheric Imagery Assembly"; value: "AIA_094" }
|
||||||
|
ListElement { text: "131 Å - Atmospheric Imagery Assembly"; value: "AIA_131" }
|
||||||
|
ListElement { text: "171 Å - Atmospheric Imagery Assembly"; value: "AIA_171" }
|
||||||
|
ListElement { text: "193 Å - Atmospheric Imagery Assembly"; value: "AIA_193" }
|
||||||
|
ListElement { text: "303 Å - Atmospheric Imagery Assembly"; value: "AIA_304" }
|
||||||
|
ListElement { text: "335 Å - Atmospheric Imagery Assembly"; value: "AIA_335" }
|
||||||
|
ListElement { text: "1600 Å - Atmospheric Imagery Assembly"; value: "AIA_1600" }
|
||||||
|
ListElement { text: "1700 Å - Atmospheric Imagery Assembly"; value: "AIA_1700" }
|
||||||
|
ListElement { text: "Magnetogram - Helioseismic and Magnetic Imager"; value: "AIA_MAGN" }
|
||||||
|
ListElement { text: "Intensitygram - Helioseismic and Magnetic Imager"; value: "AIA_INTE" }
|
||||||
|
ListElement { text: "Dopplergram - Helioseismic and Magnetic Imager"; value: "AIA_DOPP" }
|
||||||
|
ListElement { text: "LASCO C2 - Large Angle and Spectrometric Coronagraph"; value: "LASCO_C2" }
|
||||||
|
ListElement { text: "LASCO C3 - Large Angle and Spectrometric Coronagraph"; value: "LASCO_C3" }
|
||||||
|
ListElement { text: "Thematic Map"; value: "SUVI_THEMATIC" }
|
||||||
|
}
|
||||||
|
onActivated: {
|
||||||
|
loadImage(poseidon_json['URL'][comboBoxImageProduct.currentValue.value])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: imageBox
|
||||||
|
Layout.fillHeight: true
|
||||||
|
Layout.fillWidth: true
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,8 +7,8 @@ import QtMultimedia
|
|||||||
|
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
width: 180
|
width: 200
|
||||||
height: 132
|
height: 80
|
||||||
|
|
||||||
property bool loop: false
|
property bool loop: false
|
||||||
|
|
||||||
@@ -68,6 +68,109 @@ Item {
|
|||||||
positionSlider.enabled = false
|
positionSlider.enabled = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Window {
|
||||||
|
id: audioSettingWindow
|
||||||
|
|
||||||
|
width: 450
|
||||||
|
height: 150
|
||||||
|
|
||||||
|
maximumHeight: height
|
||||||
|
maximumWidth: width
|
||||||
|
|
||||||
|
minimumHeight: height
|
||||||
|
minimumWidth: width
|
||||||
|
|
||||||
|
modality: Qt.ApplicationModal
|
||||||
|
flags: Qt.Dialog
|
||||||
|
|
||||||
|
title: qsTr("Artemis - Audio Player Settings")
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
x = Screen.width / 2 - width / 2
|
||||||
|
y = Screen.height / 2 - height / 2
|
||||||
|
}
|
||||||
|
|
||||||
|
Page {
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.rightMargin: 10
|
||||||
|
anchors.leftMargin: 10
|
||||||
|
anchors.bottomMargin: 10
|
||||||
|
anchors.topMargin: 10
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: "Audio Output"
|
||||||
|
font.pixelSize: 12
|
||||||
|
clip: true
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBox {
|
||||||
|
id: audioOutputComboBox
|
||||||
|
Layout.preferredWidth: 200
|
||||||
|
model: mediaDevices.audioOutputs
|
||||||
|
textRole: "description"
|
||||||
|
onCurrentIndexChanged: {
|
||||||
|
audioOutput.device = mediaDevices.audioOutputs[currentIndex]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Label {
|
||||||
|
text: "Volume"
|
||||||
|
font.pixelSize: 12
|
||||||
|
clip: true
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
Slider {
|
||||||
|
id: volumeSlider
|
||||||
|
Layout.preferredHeight: 20
|
||||||
|
Layout.preferredWidth: 200
|
||||||
|
value: 0.5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Label {
|
||||||
|
text: "Replay (Loop)"
|
||||||
|
font.pixelSize: 12
|
||||||
|
clip: true
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
RoundButton {
|
||||||
|
id: buttonLoop
|
||||||
|
icon.color: Material.foreground
|
||||||
|
icon.source: "qrc:/images/icons/player_loop.svg"
|
||||||
|
display: AbstractButton.IconOnly
|
||||||
|
enabled: false
|
||||||
|
flat: true
|
||||||
|
onClicked: {
|
||||||
|
if (loop) {
|
||||||
|
loop = false
|
||||||
|
icon.color = Material.foreground
|
||||||
|
} else {
|
||||||
|
loop = true
|
||||||
|
icon.color = Material.accent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
Layout.fillHeight: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
spacing: 0
|
spacing: 0
|
||||||
@@ -118,20 +221,14 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
RoundButton {
|
RoundButton {
|
||||||
id: buttonLoop
|
id: buttonSettings
|
||||||
icon.color: Material.foreground
|
icon.color: Material.foreground
|
||||||
icon.source: "qrc:/images/icons/player_loop.svg"
|
icon.source: "qrc:/images/icons/settings.svg"
|
||||||
display: AbstractButton.IconOnly
|
display: AbstractButton.IconOnly
|
||||||
enabled: false
|
enabled: true
|
||||||
flat: true
|
flat: true
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (loop) {
|
audioSettingWindow.show()
|
||||||
loop = false
|
|
||||||
icon.color = Material.foreground
|
|
||||||
} else {
|
|
||||||
loop = true
|
|
||||||
icon.color = Material.accent
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -149,27 +246,6 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
Slider {
|
|
||||||
id: volumeSlider
|
|
||||||
Layout.preferredHeight: 20
|
|
||||||
value: 0.5
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: buttonMute
|
|
||||||
icon.color: Material.foreground
|
|
||||||
icon.source: "qrc:/images/icons/player_mute.svg"
|
|
||||||
display: AbstractButton.IconOnly
|
|
||||||
enabled: true
|
|
||||||
flat: true
|
|
||||||
onClicked: {
|
|
||||||
volumeSlider.value = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MediaPlayer {
|
MediaPlayer {
|
||||||
id: player
|
id: player
|
||||||
audioOutput: audioOutput
|
audioOutput: audioOutput
|
||||||
@@ -186,7 +262,12 @@ Item {
|
|||||||
|
|
||||||
AudioOutput {
|
AudioOutput {
|
||||||
id: audioOutput
|
id: audioOutput
|
||||||
|
device: mediaDevices.defaultAudioOutput
|
||||||
volume: volumeSlider.value
|
volume: volumeSlider.value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MediaDevices {
|
||||||
|
id: mediaDevices
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||