diff --git a/app/picons/__init__.py b/app/tools/__init__.py similarity index 100% rename from app/picons/__init__.py rename to app/tools/__init__.py diff --git a/app/picons/picons.py b/app/tools/picons.py similarity index 100% rename from app/picons/picons.py rename to app/tools/picons.py index 342a017f..3e37a7f7 100644 --- a/app/picons/picons.py +++ b/app/tools/picons.py @@ -1,11 +1,11 @@ import glob import os +import re import shutil + from collections import namedtuple from html.parser import HTMLParser -import re - from app.commons import log, run_task from app.properties import Profile diff --git a/app/tools/satellites.py b/app/tools/satellites.py new file mode 100644 index 00000000..687fd514 --- /dev/null +++ b/app/tools/satellites.py @@ -0,0 +1,75 @@ +""" Module for download satellites from internet ("flysat.com") + for replace or update current satellites.xml file. +""" +import requests + +from html.parser import HTMLParser + + +class SatellitesParser(HTMLParser): + """ Parser for satellite html page. (https://www.lyngsat.com/*sat-name*.html) """ + + _HEADERS = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:45.0) Gecko/20100101 Firefox/59.02"} + + def __init__(self, url, entities=False, separator=' '): + + HTMLParser.__init__(self) + + self._parse_html_entities = entities + self._separator = separator + self._is_td = False + self._is_th = False + self._is_provider = False + self._current_row = [] + self._current_cell = [] + self._rows = [] + self._url = url + + def handle_starttag(self, tag, attrs): + if tag == 'td': + self._is_td = True + if tag == 'tr': + self._is_th = True + if tag == "a": + self._current_row.append(attrs[0][1]) + + def handle_data(self, data): + """ Save content to a cell """ + if self._is_td or self._is_th: + self._current_cell.append(data.strip()) + + def handle_endtag(self, tag): + if tag == 'td': + self._is_td = False + elif tag == 'tr': + self._is_th = False + + if tag in ('td', 'th'): + final_cell = self._separator.join(self._current_cell).strip() + self._current_row.append(final_cell) + self._current_cell = [] + elif tag == 'tr': + row = self._current_row + self._rows.append(row) + self._current_row = [] + + def error(self, message): + pass + + def get_satellites(self): + self.reset() + request = requests.get(url=self._url, headers=self._HEADERS) + reason = request.reason + if reason == "OK": + print(reason) + self.feed(request.text) + if self._rows: + for num, sat in enumerate(filter(lambda x: all(x) and len(x) == 5, self._rows)): + print(num + 1, sat) + else: + print(reason) + + +if __name__ == "__main__": + parser = SatellitesParser(url="https://www.flysat.com/satlist.php") + parser.get_satellites() diff --git a/app/ui/dialogs.glade b/app/ui/dialogs.glade index 839b60ad..080a8627 100644 --- a/app/ui/dialogs.glade +++ b/app/ui/dialogs.glade @@ -9,7 +9,7 @@ system-help normal DemonEditor - 0.3.1 Pre-alpha + 0.3.2 Pre-alpha 2018 Dmitriy Yefremov Enigma2 channel and satellites list editor for GNU/Linux diff --git a/app/ui/lang/ru/LC_MESSAGES/demon-editor.mo b/app/ui/lang/ru/LC_MESSAGES/demon-editor.mo index 5475f097..08157d3e 100644 Binary files a/app/ui/lang/ru/LC_MESSAGES/demon-editor.mo and b/app/ui/lang/ru/LC_MESSAGES/demon-editor.mo differ diff --git a/app/ui/main_app_window.py b/app/ui/main_app_window.py index 4b26d809..9a764efa 100644 --- a/app/ui/main_app_window.py +++ b/app/ui/main_app_window.py @@ -19,7 +19,8 @@ from .download_dialog import show_download_dialog from .main_helper import edit_marker, insert_marker, move_items, rename, ViewTarget, set_flags, locate_in_services, \ scroll_to, get_base_model, update_picons, copy_picon_reference, assign_picon, remove_picon, \ is_only_one_item_selected, gen_bouquets, BqGenType -from .picons_dialog import PiconsDialog +from .tools.picons_downloader import PiconsDialog +from .tools.satellites_downloader import SatellitesDownloaderDialog from .satellites_dialog import show_satellites_dialog from .settings_dialog import show_settings_dialog from .service_details_dialog import ServiceDetailsDialog, Action @@ -104,6 +105,7 @@ class MainAppWindow: "on_fav_popup": self.on_fav_popup, "on_locate_in_services": self.on_locate_in_services, "on_picons_loader_show": self.on_picons_loader_show, + "on_satellites_downloader_show": self.on_satellites_downloader_show, "on_filter_changed": self.on_filter_changed, "on_assign_picon": self.on_assign_picon, "on_remove_picon": self.on_remove_picon, @@ -929,6 +931,10 @@ class MainAppWindow: dialog.show() self.update_picons() + @run_idle + def on_satellites_downloader_show(self, item): + SatellitesDownloaderDialog(self._main_window, self._options).show() + @run_idle def on_filter_toggled(self, toggle_button: Gtk.ToggleToolButton): self._filter_info_bar.set_visible(toggle_button.get_active()) diff --git a/app/ui/main_window.glade b/app/ui/main_window.glade index 3a945e62..62b43a7c 100644 --- a/app/ui/main_window.glade +++ b/app/ui/main_window.glade @@ -122,6 +122,11 @@ False gtk-save-as + + True + False + gtk-goto-bottom + True False @@ -794,8 +799,24 @@ - - Picons loader + + Satellites downloader + True + False + image10 + False + + + + + + True + False + + + + + Picons downloader True False True @@ -805,7 +826,7 @@ - + True False @@ -2469,7 +2490,7 @@ True False - Ver. 0.3.1 Pre-alpha + Ver. 0.3.2 Pre-alpha 0.94999998807907104 diff --git a/app/ui/picons_dialog.glade b/app/ui/tools.glade similarity index 88% rename from app/ui/picons_dialog.glade rename to app/ui/tools.glade index ea187745..adcf444b 100644 --- a/app/ui/picons_dialog.glade +++ b/app/ui/tools.glade @@ -839,4 +839,125 @@ + + + + False + Satellites download tool + True + True + dialog + True + + + 320 + False + vertical + 2 + + + False + end + + + + + + + + + False + False + 0 + + + + + True + False + vertical + + + True + False + Not implemented yet! + + + False + True + 0 + + + + + True + False + + + True + False + Source: + + + False + True + 0 + + + + + True + False + source_urls_list_store + + + False + True + 1 + + + + + False + True + 1 + + + + + 100 + True + True + satellites_list_store + + + + + + False + True + 2 + + + + + True + False + + + False + True + 4 + + + + + False + True + 1 + + + + + diff --git a/app/ui/tools/__init__.py b/app/ui/tools/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/ui/picons_dialog.py b/app/ui/tools/picons_downloader.py similarity index 97% rename from app/ui/picons_dialog.py rename to app/ui/tools/picons_downloader.py index eb57185b..45b5440e 100644 --- a/app/ui/picons_dialog.py +++ b/app/ui/tools/picons_downloader.py @@ -7,11 +7,11 @@ from gi.repository import GLib, GdkPixbuf from app.commons import run_idle, run_task from app.ftp import upload_data, DownloadDataType -from app.picons.picons import PiconsParser, parse_providers, Provider, convert_to +from app.tools.picons import PiconsParser, parse_providers, Provider, convert_to from app.properties import Profile -from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, TEXT_DOMAIN -from .dialogs import show_dialog, DialogType, get_message -from .main_helper import update_entry_data +from app.ui.uicommons import Gtk, Gdk, UI_RESOURCES_PATH, TEXT_DOMAIN +from app.ui.dialogs import show_dialog, DialogType, get_message +from app.ui.main_helper import update_entry_data class PiconsDialog: @@ -38,7 +38,7 @@ class PiconsDialog: builder = Gtk.Builder() builder.set_translation_domain(TEXT_DOMAIN) - builder.add_objects_from_file(UI_RESOURCES_PATH + "picons_dialog.glade", + builder.add_objects_from_file(UI_RESOURCES_PATH + "tools.glade", ("picons_dialog", "receive_image", "providers_list_store")) builder.connect_signals(handlers) self._dialog = builder.get_object("picons_dialog") diff --git a/app/ui/tools/satellites_downloader.py b/app/ui/tools/satellites_downloader.py new file mode 100644 index 00000000..17f3d503 --- /dev/null +++ b/app/ui/tools/satellites_downloader.py @@ -0,0 +1,24 @@ +from app.ui.uicommons import Gtk, UI_RESOURCES_PATH, TEXT_DOMAIN + + +class SatellitesDownloaderDialog: + def __init__(self, transient, options): + + handlers = {} + + builder = Gtk.Builder() + builder.set_translation_domain(TEXT_DOMAIN) + builder.add_objects_from_file(UI_RESOURCES_PATH + "tools.glade", + ("satellites_dialog", "source_urls_list_store", "satellites_list_store")) + builder.connect_signals(handlers) + self._dialog = builder.get_object("satellites_dialog") + self._dialog.set_transient_for(transient) + self._satellites_tree_view = builder.get_object("satellites_tree_view") + + def show(self): + self._dialog.run() + self._dialog.destroy() + + +if __name__ == "__main__": + pass diff --git a/build-deb.sh b/build-deb.sh index d0d7a67d..5f6bb155 100755 --- a/build-deb.sh +++ b/build-deb.sh @@ -1,5 +1,5 @@ #!/bin/bash -VER="0.3.1_Pre-alpha" +VER="0.3.2_Pre-alpha" B_PATH="dist/DemonEditor" DEB_PATH="$B_PATH/usr/share/demoneditor" diff --git a/deb/usr/share/locale/ru/LC_MESSAGES/demon-editor.mo b/deb/usr/share/locale/ru/LC_MESSAGES/demon-editor.mo index 5475f097..08157d3e 100644 Binary files a/deb/usr/share/locale/ru/LC_MESSAGES/demon-editor.mo and b/deb/usr/share/locale/ru/LC_MESSAGES/demon-editor.mo differ diff --git a/po/ru/demon-editor.mo b/po/ru/demon-editor.mo index 5475f097..08157d3e 100644 Binary files a/po/ru/demon-editor.mo and b/po/ru/demon-editor.mo differ diff --git a/po/ru/demon-editor.po b/po/ru/demon-editor.po index 4995e18a..a72f043d 100644 --- a/po/ru/demon-editor.po +++ b/po/ru/demon-editor.po @@ -142,9 +142,12 @@ msgstr "Родительский замок Вкл/Выкл Ctrl + L" msgid "Picons" msgstr "Пиконы" -msgid "Picons loader" +msgid "Picons downloader" msgstr "Загрузчик пиконов" +msgid "Satellites downloader" +msgstr "Загрузчик спутников" + msgid "Preferences" msgstr "Настройки"