def exit(self): log.info('Closing window') if QtWidgets.QMessageBox.question(self, 'Message', 'Are you sure to quit?', QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) ==\ QtWidgets.QMessageBox.Yes: self.close()
def site_delete(self): log.info('Deleting site \'' + self.site + '\'') name = self.site if QtWidgets.QMessageBox().question( self, 'Really', 'Are you sure to delete ' + name + '?', QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) == QtWidgets.QMessageBox.Yes: site.delete(name)
def __init__(self): # self.setAttribute(QtCore.Qt.WA_TintedBackground) self.sites = site.get_sites_dict() log.info('Initializing SiteMonitor window') super().__init__() self.setupUi(self) self.setWindowTitle('SiteMonster - SiteMonitor') set_wnd_icon(self, 'logo.ico') self.timer = QtCore.QTimer() self.timer.setInterval(1000) self.timer.timeout.connect(self.check_sites_file) self.timer.start() self.fav_btn_example.hide() self.description_.hide() self.fav_only_checkbox.hide() self.settings_btn.hide() self.site_settings.hide() self.delete_site.hide() log.debug('Building sites list') if site.get_sites_dict().keys().__len__() > 0: for key in self.sites: if True: self.fav_sites = QtWidgets.QPushButton(self.fav_container_) self.fav_sites.setText('') self.fav_sites.setObjectName(key) self.fav_sites.setToolTip(key) self.fav_sites.setToolTipDuration(20 * 100) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(self.sites[key]['favicon']), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.fav_sites.setIcon(icon) self.fav_sites.setIconSize(QtCore.QSize(24, 24)) self.fav_sites.setMaximumSize(QtCore.QSize(256, 32)) self.fav_sites.setMinimumSize(QtCore.QSize(24, 24)) self.fav_sites.clicked.connect( self.make_get_site_info(key)) self.fav_container.addWidget(self.fav_sites) if not self.sites[key]['favourite']: self.fav_sites.hide() self.add_site_btn.hide() self.message_label.setText("Select a site from the list.") self.add_site_btn.clicked.connect(self.add_site_onclick) self.plus_site.clicked.connect(self.add_site_onclick) self.menu_btn.clicked.connect(self.menu_onclick) self.fav_only_checkbox.stateChanged.connect(self.filter) self.site_settings.clicked.connect(self.site_settings_onclick) self.delete_site.clicked.connect(self.site_delete) self.actionAbout.triggered.connect(self.about_onclick)
def get_sites_dict() -> dict: """Read sites and sites' properties to dict from json.""" logging.info('Getting dict with lists of websites') if os.path.exists(files.get_and_create_data_folder() + SITES_LIST_FILE): return files.read(SITES_LIST_FILE) else: return dict()
def __init__(self): log.info('Initializing SiteMonster window') super().__init__() self.setupUi(self) self.setWindowTitle('Welcome') set_wnd_icon(self, 'logo.ico') self.start_btn.clicked.connect(self.start_btn_onclick) self.quit_btn.clicked.connect(self.quit)
def quit(self): log.info('Quitting the app') reply = QtWidgets.QMessageBox.question( self, 'Message', 'Are you sure to quit?', QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) if reply == QtWidgets.QMessageBox.Yes: self.close() else: pass
def __init__(self): log.info('Initializing SiteAdd window') super().__init__() self.setupUi(self) self.setWindowTitle('SiteMonster - add site') set_wnd_icon(self, 'plus.png') self.cancel.clicked.connect(self.quit) self.continue_btn.clicked.connect(self.continue_f)
def update_updater(): try: logging.info('Begging updating.') if not updater_updates.is_up_to_date(): thread = updater_updates.UpdaterUpdater() thread.start() return thread else: return None except Exception as e: logging.error("Can't update updater: " + str(e))
def send_notification(message): """Send push notification to your PC.""" logging.info('Sending notification') if osinfo.is_win(): send_windows_notification(message) elif osinfo.is_linux(): send_linux_notification(message) elif osinfo.is_mac_os(): send_mac_os_notification(message) else: raise OSError("Unknown OS: " + platform.system())
def delete(name: str): """Remove url from sites list. NameError - if than name not exists. """ logging.info('Deleting website ' + name) sites = get_sites_dict() if name not in sites.keys(): logging.error('Name not exists') raise NameError('Name not exists.') del sites[name] save_sites_list(sites)
def change_settings(name: str, settings: dict): """Change url's settings. Generate settings dictionary by `build_settings` method. NameError - if than name not exists. """ logging.info('Changing ' + name + "'s settings") sites = get_sites_dict() if name not in sites.keys(): raise NameError('Name not exists.') sites[name]['settings'] = settings save_sites_list(sites)
def add(name: str, url: str, settings: dict, favourite: bool = False, favicon: str = files.get_media_folder_path() + '/logo.ico'): """Add url to sites list. Generate settings dictionary by `build_settings` method. NameError - if than name already exists. """ logging.info('Adding new website ' + name + '<' + url + '>') sites = get_sites_dict() if name in sites.keys(): logging.error('Name already exists') raise NameError('Name already exists.') sites[name] = {'url': url, 'settings': settings, 'favourite': favourite, 'favicon': favicon} save_sites_list(sites)
def rename(old_name: str, new_name: str): """Rename url in sites list. NameError - if new name already exists or old name not exists. """ logging.info('Renaming website ' + old_name + ' to ' + new_name) sites = get_sites_dict() if old_name not in sites.keys(): logging.error('old name not exists') raise NameError('Old name not exists.') if new_name in sites.keys(): logging.error('New name already exists') raise NameError('New name already exists.') sites[new_name] = sites.pop(old_name) save_sites_list(sites)
def play_sound(): """Plays alarm on user's PC""" chunk = 1024 logging.info('Playing sound') f = wave.open(files.get_media_folder_path() + r"/alarm.wav", "rb") p = pyaudio.PyAudio() stream = p.open(format=p.get_format_from_width(f.getsampwidth()), channels=f.getnchannels(), rate=f.getframerate(), output=True) data = f.readframes(chunk) while data: stream.write(data) data = f.readframes(chunk) stream.stop_stream() stream.close() p.terminate()
def save_all(self): log.info('Saving changed settings') proxy = None if self.text_edits[3].text() != '' or self.text_edits[4].text() != '': proxy = { 'http': self.text_edits[3].text(), 'https': self.text_edits[4].text() } site.change_settings( self.site_name, site.build_settings( self.text_edits[0].text(), json.loads(self.text_edits[1].text()), self.text_edits[2].toPlainText(), proxy, list(int(i) for i in self.text_edits[5].text().split(',')), self.text_edits[6].text(), site.build_fail_actions(self.text_edits[7].isChecked(), self.text_edits[8].isChecked()))) site.set_favourite(self.site_name, self.text_edits[9].isChecked()) site.set_site_icon(self.site_name, self.icon_path) self.close()
exit(1) test_for_update() thr = update_updater() window = SiteMonster() window.show() if thr is not None: thr.join() sys.exit(app.exec_()) def add_in_startup(): if getattr(sys, 'frozen', False): path = os.getenv('HOME') + '/.config/autostart/' if not os.path.exists(path): os.makedirs(path) shutil.copyfile('/usr/share/applications/daemon.desktop', path + '/Site Monster Daemon.desktop') def not_valid_os(): QtWidgets.QMessageBox.information(QtWidgets.QMessageBox(), "Can't start", "This app don't support this os", QtWidgets.QMessageBox.Ok) if __name__ == '__main__': if osinfo.is_linux(): add_in_startup() logging.info('Starting app') run_daemon_if_it_is_not_running() main()
def get_list() -> list: """Get list of sites' names""" logging.info("Getting ist of sites' names") return list(get_sites_dict().keys())
def site_settings_onclick(self): log.info('Opening SiteSettings window about \'' + self.site + '\'') geometry = self.geometry() self.settings = SiteSettings({'site_name': self.site}) self.settings.setGeometry(geometry) self.settings.show()
def add_site_onclick(self): log.info('Opening SiteAdd window') self.site_add_wnd = SiteAdd() geometry = self.geometry() self.site_add_wnd.show() self.site_add_wnd.setGeometry(geometry)
def quit(self): self.close() log.info('Closing SiteAdd window')
def save_sites_list(sites_obj: dict): """Save sites list to file.""" logging.info("Saving websites") files.save(sites_obj, SITES_LIST_FILE)
def __init__(self): log.info('Initializing AppAbout window') super().__init__() self.setupUi(self)
def __init__(self, data=None): log.info('Initializing SiteSettings window') super().__init__() if data is None: data = {} self.setupUi(self) set_wnd_icon(self, 'settings.png') self.quit.clicked.connect(self.exit) self.save.clicked.connect(self.save_all) self.file_open.clicked.connect(self.open_icon) self.site_name = data['site_name'] self.setWindowTitle('Settings: ' + self.site_name) self.header.setText(self.header.text().replace('[SITENAME]', self.site_name)) website = site.get_sites_dict()[self.site_name] log.debug('Getting site settings') text = website['settings']['method'] self.http_method.setText(text) text = website['settings']['headers'] if text is None: text = dict() self.http_headers.setText(json.dumps(text)) text = website['settings']['body'] self.http_body.setPlainText(text) text = website['settings']['proxy'] if text is None: text = {'http': '', 'https': ''} self.http_proxy.setText(text['http']) self.https_proxy.setText(text['https']) text = website['settings']['expected_code'] if text is None: text = [200, 201, 202, 203, 204, 205, 206, 207, 208, 226] self.http_codes.setText(','.join(str(i) for i in text)) text = website['settings']['expected_answer'] if text is None: text = '' self.expected.setText(text) text = website['favourite'] if text is None: text = False self.favourite.setChecked(text) text = website['favicon'] self.icon_path = text self.notification.setChecked( website['settings']['fail_actions']['send_notification']) self.sound.setChecked( website['settings']['fail_actions']['play_sound']) self.text_edits = [ self.http_method, self.http_headers, self.http_body, self.http_proxy, self.https_proxy, self.http_codes, self.expected, self.notification, self.sound, self.favourite ]