def main_list(params): plugintools.log("ruyaiptv.main_list "+repr(params)) if plugintools.get_setting("username")=="": settings(params) token = api.login( plugintools.get_setting("server") , plugintools.get_setting("username") , plugintools.get_setting("password") ) if token!="": plugintools.set_setting("token",token) import os plugintools.add_item( action="movies", title="Movies" , thumbnail = os.path.join(THUMBNAIL_PATH,"thumb0.png") , fanart=os.path.join(THUMBNAIL_PATH,"fanart0.jpg") , folder=True ) plugintools.add_item( action="tvshows", title="TV Shows" , thumbnail = os.path.join(THUMBNAIL_PATH,"thumb1.png") , fanart=os.path.join(THUMBNAIL_PATH,"fanart1.jpg") , folder=True ) plugintools.add_item( action="livetv", title="Live TV" , thumbnail = os.path.join(THUMBNAIL_PATH,"thumb2.png") , fanart=os.path.join(THUMBNAIL_PATH,"fanart2.jpg") , folder=True ) plugintools.add_item( action="livetv_catchup", title="Catch-up TV" , thumbnail = os.path.join(THUMBNAIL_PATH,"thumb2.png") , fanart=os.path.join(THUMBNAIL_PATH,"fanart2.jpg") , folder=True ) else: plugintools.message("RuYa IPTV","Invalid login, check your account in add-on settings") import os plugintools.add_item( action="settings", title="Settings..." , thumbnail = os.path.join(THUMBNAIL_PATH,"thumb3.png") , fanart=os.path.join(THUMBNAIL_PATH,"fanart3.jpg") , folder=False ) if plugintools.get_setting("force_advancedsettings")=="true": # Ruta del advancedsettings import xbmc,xbmcgui,os advancedsettings = xbmc.translatePath("special://userdata/advancedsettings.xml") if not os.path.exists(advancedsettings): # Copia el advancedsettings.xml desde el directorio resources al userdata fichero = open( os.path.join(plugintools.get_runtime_path(),"resources","advancedsettings.xml") ) texto = fichero.read() fichero.close() fichero = open(advancedsettings,"w") fichero.write(texto) fichero.close() plugintools.message("plugin", "A new file userdata/advancedsettings.xml","has been created for optimal streaming") if token!="" and plugintools.get_setting("check_for_updates")=="true": import updater updater.check_for_updates() plugintools.set_view( plugintools.LIST )
def main_list(params): plugintools.log("dandb.main_list "+repr(params)) if plugintools.get_setting("user")=="": settings(params) token = api.users_login( plugintools.get_setting("user") , plugintools.get_setting("password") ) if token!="": plugintools.set_setting("token",token) import os itemlist = api.navigation_get_all("mainlist",0,1000) add_items_to_xbmc(params,itemlist) else: plugintools.message("D&B TV","Invalid login, check your account in add-on settings") import os plugintools.add_item( action="settings", title="Settings..." , folder=False ) if token!="" and plugintools.get_setting("check_for_updates")=="true": import updater updater.check_for_updates() plugintools.set_view( plugintools.LIST )
def main(self): """ Main function of app. loads login screen if needed and starts main screen """ app = QtWidgets.QApplication(sys.argv) app.setWindowIcon(QtGui.QIcon(curr_directory() + '/images/icon.png')) self.app = app if platform.system() == 'Linux': QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_X11InitThreads) with open(curr_directory() + '/styles/dark_style.qss') as fl: style = fl.read() app.setStyleSheet(style) encrypt_save = toxes.ToxES() if self.path is not None: path = os.path.dirname(self.path) + '/' name = os.path.basename(self.path)[:-4] data = ProfileHelper(path, name).open_profile() if encrypt_save.is_data_encrypted(data): data = self.enter_pass(data) settings = Settings(name) self.tox = profile.tox_factory(data, settings) else: auto_profile = Settings.get_auto_profile() if not auto_profile[0]: # show login screen if default profile not found current_locale = QtCore.QLocale() curr_lang = current_locale.languageToString( current_locale.language()) langs = Settings.supported_languages() if curr_lang in langs: lang_path = langs[curr_lang] translator = QtCore.QTranslator() translator.load(curr_directory() + '/translations/' + lang_path) app.installTranslator(translator) app.translator = translator ls = LoginScreen() ls.setWindowIconText("Toxygen") profiles = ProfileHelper.find_profiles() ls.update_select(map(lambda x: x[1], profiles)) _login = self.Login(profiles) ls.update_on_close(_login.login_screen_close) ls.show() app.exec_() if not _login.t: return elif _login.t == 1: # create new profile _login.name = _login.name.strip() name = _login.name if _login.name else 'toxygen_user' pr = map(lambda x: x[1], ProfileHelper.find_profiles()) if name in list(pr): msgBox = QtWidgets.QMessageBox() msgBox.setWindowTitle( QtWidgets.QApplication.translate( "MainWindow", "Error")) text = (QtWidgets.QApplication.translate( "MainWindow", 'Profile with this name already exists')) msgBox.setText(text) msgBox.exec_() return self.tox = profile.tox_factory() self.tox.self_set_name( bytes(_login.name, 'utf-8') if _login. name else b'Toxygen User') self.tox.self_set_status_message(b'Toxing on Toxygen') reply = QtWidgets.QMessageBox.question( None, 'Profile {}'.format(name), QtWidgets.QApplication.translate( "login", 'Do you want to set profile password?'), QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No) if reply == QtWidgets.QMessageBox.Yes: set_pass = SetProfilePasswordScreen(encrypt_save) set_pass.show() self.app.lastWindowClosed.connect(self.app.quit) self.app.exec_() reply = QtWidgets.QMessageBox.question( None, 'Profile {}'.format(name), QtWidgets.QApplication.translate( "login", 'Do you want to save profile in default folder? If no, profile will be saved in program folder' ), QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No) if reply == QtWidgets.QMessageBox.Yes: path = Settings.get_default_path() else: path = curr_directory() + '/' try: ProfileHelper(path, name).save_profile( self.tox.get_savedata()) except Exception as ex: print(str(ex)) log('Profile creation exception: ' + str(ex)) msgBox = QtWidgets.QMessageBox() msgBox.setText( QtWidgets.QApplication.translate( "login", 'Profile saving error! Does Toxygen have permission to write to this directory?' )) msgBox.exec_() return path = Settings.get_default_path() settings = Settings(name) if curr_lang in langs: settings['language'] = curr_lang settings.save() else: # load existing profile path, name = _login.get_data() if _login.default: Settings.set_auto_profile(path, name) data = ProfileHelper(path, name).open_profile() if encrypt_save.is_data_encrypted(data): data = self.enter_pass(data) settings = Settings(name) self.tox = profile.tox_factory(data, settings) else: path, name = auto_profile data = ProfileHelper(path, name).open_profile() if encrypt_save.is_data_encrypted(data): data = self.enter_pass(data) settings = Settings(name) self.tox = profile.tox_factory(data, settings) if Settings.is_active_profile(path, name): # profile is in use reply = QtWidgets.QMessageBox.question( None, 'Profile {}'.format(name), QtWidgets.QApplication.translate( "login", 'Other instance of Toxygen uses this profile or profile was not properly closed. Continue?' ), QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No) if reply != QtWidgets.QMessageBox.Yes: return else: settings.set_active_profile() # application color scheme for theme in settings.built_in_themes().keys(): if settings['theme'] == theme: with open(curr_directory() + settings.built_in_themes()[theme]) as fl: style = fl.read() app.setStyleSheet(style) lang = Settings.supported_languages()[settings['language']] translator = QtCore.QTranslator() translator.load(curr_directory() + '/translations/' + lang) app.installTranslator(translator) app.translator = translator # tray icon self.tray = QtWidgets.QSystemTrayIcon( QtGui.QIcon(curr_directory() + '/images/icon.png')) self.tray.setObjectName('tray') self.ms = MainWindow(self.tox, self.reset, self.tray) app.aboutToQuit.connect(self.ms.close_window) class Menu(QtWidgets.QMenu): def newStatus(self, status): if not Settings.get_instance().locked: profile.Profile.get_instance().set_status(status) self.aboutToShowHandler() self.hide() def aboutToShowHandler(self): status = profile.Profile.get_instance().status act = self.act if status is None or Settings.get_instance().locked: self.actions()[1].setVisible(False) else: self.actions()[1].setVisible(True) act.actions()[0].setChecked(False) act.actions()[1].setChecked(False) act.actions()[2].setChecked(False) act.actions()[status].setChecked(True) self.actions()[2].setVisible( not Settings.get_instance().locked) def languageChange(self, *args, **kwargs): self.actions()[0].setText( QtWidgets.QApplication.translate('tray', 'Open Toxygen')) self.actions()[1].setText( QtWidgets.QApplication.translate('tray', 'Set status')) self.actions()[2].setText( QtWidgets.QApplication.translate('tray', 'Exit')) self.act.actions()[0].setText( QtWidgets.QApplication.translate('tray', 'Online')) self.act.actions()[1].setText( QtWidgets.QApplication.translate('tray', 'Away')) self.act.actions()[2].setText( QtWidgets.QApplication.translate('tray', 'Busy')) m = Menu() show = m.addAction( QtWidgets.QApplication.translate('tray', 'Open Toxygen')) sub = m.addMenu(QtWidgets.QApplication.translate('tray', 'Set status')) onl = sub.addAction(QtWidgets.QApplication.translate('tray', 'Online')) away = sub.addAction(QtWidgets.QApplication.translate('tray', 'Away')) busy = sub.addAction(QtWidgets.QApplication.translate('tray', 'Busy')) onl.setCheckable(True) away.setCheckable(True) busy.setCheckable(True) m.act = sub exit = m.addAction(QtWidgets.QApplication.translate('tray', 'Exit')) def show_window(): s = Settings.get_instance() def show(): if not self.ms.isActiveWindow(): self.ms.setWindowState(self.ms.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive) self.ms.activateWindow() self.ms.show() if not s.locked: show() else: def correct_pass(): show() s.locked = False s.unlockScreen = False if not s.unlockScreen: s.unlockScreen = True self.p = UnlockAppScreen(toxes.ToxES.get_instance(), correct_pass) self.p.show() def tray_activated(reason): if reason == QtWidgets.QSystemTrayIcon.DoubleClick: show_window() def close_app(): if not Settings.get_instance().locked: settings.closing = True self.ms.close() show.triggered.connect(show_window) exit.triggered.connect(close_app) m.aboutToShow.connect(lambda: m.aboutToShowHandler()) onl.triggered.connect(lambda: m.newStatus(0)) away.triggered.connect(lambda: m.newStatus(1)) busy.triggered.connect(lambda: m.newStatus(2)) self.tray.setContextMenu(m) self.tray.show() self.tray.activated.connect(tray_activated) self.ms.show() updating = False if settings['update'] and updater.updater_available( ) and updater.connection_available(): # auto update version = updater.check_for_updates() if version is not None: if settings['update'] == 2: updater.download(version) updating = True else: reply = QtWidgets.QMessageBox.question( None, 'Toxygen', QtWidgets.QApplication.translate( "login", 'Update for Toxygen was found. Download and install it?' ), QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No) if reply == QtWidgets.QMessageBox.Yes: updater.download(version) updating = True if updating: data = self.tox.get_savedata() ProfileHelper.get_instance().save_profile(data) settings.close() del self.tox return plugin_helper = PluginLoader(self.tox, settings) # plugin support plugin_helper.load() start() # init thread self.init = self.InitThread(self.tox, self.ms, self.tray) self.init.start() # starting threads for tox iterate and toxav iterate self.mainloop = self.ToxIterateThread(self.tox) self.mainloop.start() self.avloop = self.ToxAVIterateThread(self.tox.AV) self.avloop.start() if self.uri is not None: self.ms.add_contact(self.uri) app.lastWindowClosed.connect(app.quit) app.exec_() self.init.stop = True self.mainloop.stop = True self.avloop.stop = True plugin_helper.stop() stop() self.mainloop.wait() self.init.wait() self.avloop.wait() self.tray.hide() data = self.tox.get_savedata() ProfileHelper.get_instance().save_profile(data) settings.close() del self.tox
def check_version(self): global version updater.check_for_updates(version)
def main(self): """ Main function of app. loads login screen if needed and starts main screen """ app = QtGui.QApplication(sys.argv) app.setWindowIcon(QtGui.QIcon(curr_directory() + "/images/icon.png")) self.app = app if platform.system() == "Linux": QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_X11InitThreads) # application color scheme with open(curr_directory() + "/styles/style.qss") as fl: dark_style = fl.read() app.setStyleSheet(dark_style) encrypt_save = toxencryptsave.ToxEncryptSave() if self.path is not None: path = os.path.dirname(self.path) + "/" name = os.path.basename(self.path)[:-4] data = ProfileHelper(path, name).open_profile() if encrypt_save.is_data_encrypted(data): data = self.enter_pass(data) settings = Settings(name) self.tox = profile.tox_factory(data, settings) else: auto_profile = Settings.get_auto_profile() if not auto_profile[0]: # show login screen if default profile not found current_locale = QtCore.QLocale() curr_lang = current_locale.languageToString(current_locale.language()) langs = Settings.supported_languages() if curr_lang in langs: lang_path = langs[curr_lang] translator = QtCore.QTranslator() translator.load(curr_directory() + "/translations/" + lang_path) app.installTranslator(translator) app.translator = translator ls = LoginScreen() ls.setWindowIconText("Toxygen") profiles = ProfileHelper.find_profiles() ls.update_select(map(lambda x: x[1], profiles)) _login = self.Login(profiles) ls.update_on_close(_login.login_screen_close) ls.show() app.connect(app, QtCore.SIGNAL("lastWindowClosed()"), app, QtCore.SLOT("quit()")) app.exec_() if not _login.t: return elif _login.t == 1: # create new profile _login.name = _login.name.strip() name = _login.name if _login.name else "toxygen_user" pr = map(lambda x: x[1], ProfileHelper.find_profiles()) if name in list(pr): msgBox = QtGui.QMessageBox() msgBox.setWindowTitle( QtGui.QApplication.translate("MainWindow", "Error", None, QtGui.QApplication.UnicodeUTF8) ) text = QtGui.QApplication.translate( "MainWindow", "Profile with this name already exists", None, QtGui.QApplication.UnicodeUTF8 ) msgBox.setText(text) msgBox.exec_() return self.tox = profile.tox_factory() self.tox.self_set_name(bytes(_login.name, "utf-8") if _login.name else b"Toxygen User") self.tox.self_set_status_message(b"Toxing on Toxygen") reply = QtGui.QMessageBox.question( None, "Profile {}".format(name), QtGui.QApplication.translate( "login", "Do you want to set profile password?", None, QtGui.QApplication.UnicodeUTF8 ), QtGui.QMessageBox.Yes, QtGui.QMessageBox.No, ) if reply == QtGui.QMessageBox.Yes: set_pass = SetProfilePasswordScreen(encrypt_save) set_pass.show() self.app.connect(self.app, QtCore.SIGNAL("lastWindowClosed()"), self.app, QtCore.SLOT("quit()")) self.app.exec_() reply = QtGui.QMessageBox.question( None, "Profile {}".format(name), QtGui.QApplication.translate( "login", "Do you want to save profile in default folder? If no, profile will be saved in program folder", None, QtGui.QApplication.UnicodeUTF8, ), QtGui.QMessageBox.Yes, QtGui.QMessageBox.No, ) if reply == QtGui.QMessageBox.Yes: path = Settings.get_default_path() else: path = curr_directory() + "/" try: ProfileHelper(path, name).save_profile(self.tox.get_savedata()) except Exception as ex: print(str(ex)) log("Profile creation exception: " + str(ex)) msgBox = QtGui.QMessageBox() msgBox.setText( QtGui.QApplication.translate( "login", "Profile saving error! Does Toxygen have permission to write to this directory?", None, QtGui.QApplication.UnicodeUTF8, ) ) msgBox.exec_() return path = Settings.get_default_path() settings = Settings(name) if curr_lang in langs: settings["language"] = curr_lang settings.save() else: # load existing profile path, name = _login.get_data() if _login.default: Settings.set_auto_profile(path, name) data = ProfileHelper(path, name).open_profile() if encrypt_save.is_data_encrypted(data): data = self.enter_pass(data) settings = Settings(name) self.tox = profile.tox_factory(data, settings) else: path, name = auto_profile data = ProfileHelper(path, name).open_profile() if encrypt_save.is_data_encrypted(data): data = self.enter_pass(data) settings = Settings(name) self.tox = profile.tox_factory(data, settings) if Settings.is_active_profile(path, name): # profile is in use reply = QtGui.QMessageBox.question( None, "Profile {}".format(name), QtGui.QApplication.translate( "login", "Other instance of Toxygen uses this profile or profile was not properly closed. Continue?", None, QtGui.QApplication.UnicodeUTF8, ), QtGui.QMessageBox.Yes, QtGui.QMessageBox.No, ) if reply != QtGui.QMessageBox.Yes: return else: settings.set_active_profile() lang = Settings.supported_languages()[settings["language"]] translator = QtCore.QTranslator() translator.load(curr_directory() + "/translations/" + lang) app.installTranslator(translator) app.translator = translator # tray icon self.tray = QtGui.QSystemTrayIcon(QtGui.QIcon(curr_directory() + "/images/icon.png")) self.tray.setObjectName("tray") self.ms = MainWindow(self.tox, self.reset, self.tray) app.aboutToQuit.connect(self.ms.close_window) class Menu(QtGui.QMenu): def newStatus(self, status): profile.Profile.get_instance().set_status(status) self.aboutToShow() self.hide() def aboutToShow(self): status = profile.Profile.get_instance().status act = self.act if status is None or Settings.get_instance().locked: self.actions()[1].setVisible(False) else: self.actions()[1].setVisible(True) act.actions()[0].setChecked(False) act.actions()[1].setChecked(False) act.actions()[2].setChecked(False) act.actions()[status].setChecked(True) self.actions()[2].setVisible(not Settings.get_instance().locked) def languageChange(self, *args, **kwargs): self.actions()[0].setText( QtGui.QApplication.translate("tray", "Open Toxygen", None, QtGui.QApplication.UnicodeUTF8) ) self.actions()[1].setText( QtGui.QApplication.translate("tray", "Set status", None, QtGui.QApplication.UnicodeUTF8) ) self.actions()[2].setText( QtGui.QApplication.translate("tray", "Exit", None, QtGui.QApplication.UnicodeUTF8) ) self.act.actions()[0].setText( QtGui.QApplication.translate("tray", "Online", None, QtGui.QApplication.UnicodeUTF8) ) self.act.actions()[1].setText( QtGui.QApplication.translate("tray", "Away", None, QtGui.QApplication.UnicodeUTF8) ) self.act.actions()[2].setText( QtGui.QApplication.translate("tray", "Busy", None, QtGui.QApplication.UnicodeUTF8) ) m = Menu() show = m.addAction(QtGui.QApplication.translate("tray", "Open Toxygen", None, QtGui.QApplication.UnicodeUTF8)) sub = m.addMenu(QtGui.QApplication.translate("tray", "Set status", None, QtGui.QApplication.UnicodeUTF8)) onl = sub.addAction(QtGui.QApplication.translate("tray", "Online", None, QtGui.QApplication.UnicodeUTF8)) away = sub.addAction(QtGui.QApplication.translate("tray", "Away", None, QtGui.QApplication.UnicodeUTF8)) busy = sub.addAction(QtGui.QApplication.translate("tray", "Busy", None, QtGui.QApplication.UnicodeUTF8)) onl.setCheckable(True) away.setCheckable(True) busy.setCheckable(True) m.act = sub exit = m.addAction(QtGui.QApplication.translate("tray", "Exit", None, QtGui.QApplication.UnicodeUTF8)) def show_window(): def show(): if not self.ms.isActiveWindow(): self.ms.setWindowState(self.ms.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive) self.ms.activateWindow() self.ms.show() if not Settings.get_instance().locked: show() else: def correct_pass(): show() Settings.get_instance().locked = False self.p = UnlockAppScreen(toxencryptsave.ToxEncryptSave.get_instance(), correct_pass) self.p.show() def tray_activated(reason): if reason == QtGui.QSystemTrayIcon.DoubleClick: show_window() def close_app(): settings.closing = True self.ms.close() m.connect(show, QtCore.SIGNAL("triggered()"), show_window) m.connect(exit, QtCore.SIGNAL("triggered()"), close_app) m.connect(m, QtCore.SIGNAL("aboutToShow()"), lambda: m.aboutToShow()) sub.connect(onl, QtCore.SIGNAL("triggered()"), lambda: m.newStatus(0)) sub.connect(away, QtCore.SIGNAL("triggered()"), lambda: m.newStatus(1)) sub.connect(busy, QtCore.SIGNAL("triggered()"), lambda: m.newStatus(2)) self.tray.setContextMenu(m) self.tray.show() self.tray.activated.connect(tray_activated) self.ms.show() updating = False if settings["update"] and updater.updater_available() and updater.connection_available(): # auto update version = updater.check_for_updates() if version is not None: if settings["update"] == 2: updater.download(version) updating = True else: reply = QtGui.QMessageBox.question( None, "Toxygen", QtGui.QApplication.translate( "login", "Update for Toxygen was found. Download and install it?", None, QtGui.QApplication.UnicodeUTF8, ), QtGui.QMessageBox.Yes, QtGui.QMessageBox.No, ) if reply == QtGui.QMessageBox.Yes: updater.download(version) updating = True if updating: data = self.tox.get_savedata() ProfileHelper.get_instance().save_profile(data) settings.close() del self.tox return plugin_helper = PluginLoader(self.tox, settings) # plugin support plugin_helper.load() start() # init thread self.init = self.InitThread(self.tox, self.ms, self.tray) self.init.start() # starting threads for tox iterate and toxav iterate self.mainloop = self.ToxIterateThread(self.tox) self.mainloop.start() self.avloop = self.ToxAVIterateThread(self.tox.AV) self.avloop.start() if self.uri is not None: self.ms.add_contact(self.uri) app.connect(app, QtCore.SIGNAL("lastWindowClosed()"), app, QtCore.SLOT("quit()")) app.exec_() self.init.stop = True self.mainloop.stop = True self.avloop.stop = True plugin_helper.stop() stop() self.mainloop.wait() self.init.wait() self.avloop.wait() data = self.tox.get_savedata() ProfileHelper.get_instance().save_profile(data) settings.close() del self.tox