def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.searchEdit.textChanged.connect(self.search_text_changed) self.ui.show_button.clicked.connect(self.show_episodes) self.ui.searchEdit.returnPressed.connect(self.show_episodes) self.episodes = None self.episode_list = None self.number = 0 self.anime_list = None self.ui.download_button.clicked.connect(self.download) self.ui.res_list_widget.currentItemChanged.connect(self.episode_change) self.com = Comunicate() self.com.sig.connect(self.message) self.com.img.connect(self.set_image) self.ui.anime_list_widget.itemDoubleClicked.connect(self.show_episodes) self.setWindowIcon(QIcon(get_file('animes.png'))) self.ui.anime_list_widget.itemPressed.connect(self.anime_entered) Thread(target=self.load_url_items).start() #self.load_url_items() self.movie = QMovie(get_file('ajax-loader.gif')) self.ui.loading_label.setMovie(self.movie) self.link = None self.main_download_page = None self.tray = SystemTrayIcon(QIcon(get_file('animes.png')), self.com, self) self.com.op.connect(self.show_semard) self.ui.action_About_Semard.triggered.connect(self.about_semard) self.ui.action_Contato.triggered.connect(self.show_feedback) self.setWindowTitle('Semard - Animes') self.browser = None self.player = None
def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.searchEdit.textChanged.connect(self.search_text_changed) self.ui.show_button.clicked.connect(self.show_episodes) self.ui.searchEdit.returnPressed.connect(self.show_episodes) self.episodes = None self.episode_list = None self.number = 0 self.anime_list = None self.ui.download_button.clicked.connect(self.download) self.ui.res_list_widget.currentItemChanged.connect(self.episode_change) self.com = Comunicate() self.com.sig.connect(self.message) self.com.img.connect(self.set_image) self.ui.anime_list_widget.itemDoubleClicked.connect(self.show_episodes) self.setWindowIcon(QIcon(get_file('animes.png'))) self.ui.anime_list_widget.itemPressed.connect(self.anime_entered) Thread(target=self.load_url_items).start() #self.load_url_items() self.movie = QMovie(get_file('ajax-loader.gif')) self.ui.loading_label.setMovie(self.movie) self.link = None self.main_download_page = None self.tray = SystemTrayIcon( QIcon(get_file('animes.png')), self.com, self) self.com.op.connect(self.show_semard) self.ui.action_About_Semard.triggered.connect(self.about_semard) self.ui.action_Contato.triggered.connect(self.show_feedback) self.setWindowTitle('Semard - Animes') self.browser = None self.player = None
class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.searchEdit.textChanged.connect(self.search_text_changed) self.ui.show_button.clicked.connect(self.show_episodes) self.ui.searchEdit.returnPressed.connect(self.show_episodes) self.episodes = None self.episode_list = None self.number = 0 self.anime_list = None self.ui.download_button.clicked.connect(self.download) self.ui.res_list_widget.currentItemChanged.connect(self.episode_change) self.com = Comunicate() self.com.sig.connect(self.message) self.com.img.connect(self.set_image) self.ui.anime_list_widget.itemDoubleClicked.connect(self.show_episodes) self.setWindowIcon(QIcon(get_file('animes.png'))) self.ui.anime_list_widget.itemPressed.connect(self.anime_entered) Thread(target=self.load_url_items).start() #self.load_url_items() self.movie = QMovie(get_file('ajax-loader.gif')) self.ui.loading_label.setMovie(self.movie) self.link = None self.main_download_page = None self.tray = SystemTrayIcon( QIcon(get_file('animes.png')), self.com, self) self.com.op.connect(self.show_semard) self.ui.action_About_Semard.triggered.connect(self.about_semard) self.ui.action_Contato.triggered.connect(self.show_feedback) self.setWindowTitle('Semard - Animes') self.browser = None self.player = None #self.player_window = player_w @Slot(str, bool) def openVideo(self, filepath, duplicate_mode): movie = os.path.expanduser(filepath) if 'http://' not in filepath: if not os.access(movie, os.R_OK): print(('Error: %s file is not readable' % movie)) sys.exit(1) split = urllib.parse.urlsplit(filepath) #name = QInputDialog.getText(self, 'Escolha nome do arquivo', 'Nome do arquivo:') name = split.path.split("/")[-1] #pa = os.path.join(res, name) if duplicate_mode: try: #media = instance.media_new(movie, 'sout=#duplicate{dst=file{dst=%s},dst=display}' % pa) pass except NameError: print(('NameError: % (%s vs Libvlc %s)' % (sys.exc_info()[1], vlc.__version__, vlc.libvlc_get_version()))) else: try: #media = instance.media_new(movie) if sys.platform in 'win32': subprocess.Popen([os.path.join('vlc','vlc'), movie]) else: subprocess.Popen(['vlc', movie]) except NameError: print(('NameError: % (%s vs Libvlc %s)' % (sys.exc_info()[1], vlc.__version__, vlc.libvlc_get_version()))) QMessageBox.critical(self, 'Erro','problema ao iniciar o vlc') # "--sout=#duplicate{dst=file{dst=example.mpg},dst=display}" #player = instance.media_player_new() #pplayer.set_media(media) #self.player_window.setMedia(media) #self.player_window.createUI() #self.player_window = Player() #media.parse() #self.player_window.setWindowTitle(media.get_meta(0)) #self.player_window.show() #self.player_window.resize(640, 480) #if sys.platform == "linux2": # for Linux using the X Server # pplayer.set_xwindow(self.player_window.videoframe.winId()) #elif sys.platform == "win32": # for Windows # pplayer.set_hwnd(self.player_window.videoframe.winId()) #elif sys.platform == "darwin": # for MacOS # pplayer.set_agl(self.player_window.videoframe.windId()) #pplayer.play() #self.player_window.updateUI() @Slot(str, str) def start_download(self, filepath, path): #thread = QThread(self) pbar = QProgressBar(self.ui.tab_downloads) pbar.setMinimum(0) pbar.setMaximum(100) pbar.setValue(0) self.ui.formLayout.addRow(os.path.basename(path), pbar) pbar.show() dw = Downloader(str(filepath), str(path), pbar) dw.finished.connect(self.finished_download) dw.progresschanged.connect(self.show_download_progress) dw.started.connect(self.started_download) Thread(target=dw.download).start() #thread.started.connect(dw.download) #thread.finished.connect(self.finished_download) #dw.moveToThread(thread) #thread.start() def finished_download(self, pbar, filename): self.tray.showMessage(filename, 'Download concluído.') pbar.setValue(100) pbar.setEnabled(False) def started_download(self, filename): filename = os.path.basename(filename) self.tray.showMessage(filename, 'Download iniciado.') @Slot(float, QProgressBar) def show_download_progress(self, progress, pbar): pbar.setValue(progress) def show_feedback(self): feed = Feedback(self.com) feed.exec_() def about_semard(self): about = QMessageBox.about(self, "Sobre Semard", """<b>Semard</b> v%s <p><b>Copyright (C) 2013</b> Ronnie Andrew.</p> <p>Todos os direitos reservados de acordo com a licença GNU GPL v3 ou posterior.</p> <p><b>Website Oficial:</b> <a href='https://github.com/ROAND/Series-Manager'>GitHub</a></p> <p><b>Plataforma: </b>%s</p> """ % (__version__, platform.system())) def show_semard(self, message): self.show() def closeEvent(self, event): self.hide() self.tray.showMessage('Semard', 'Semard ainda está em execução.') event.ignore() @Slot(str) def set_image(self, img_str): self.ui.image_label.setPixmap(QPixmap(img_str)) @Slot(str) def message(self, message): if str(message) in 'ended': self.ui.loading_label.hide() # self.repaint() self.ui.anime_list_widget.setEnabled(True) self.ui.show_button.setEnabled(True) self.movie.stop() if str(message) in 'started': self.ui.loading_label.show() # self.repaint() self.ui.anime_list_widget.setEnabled(False) self.ui.show_button.setEnabled(False) self.movie.start() def anime_entered(self, item): pass def load_url_items(self): self.com.sig.emit('started') self.main_download_page = AnimeList('http://www.anbient.net/lista') self.number, self.anime_list = self.main_download_page.get_attrs() self.ui.avaLabel.setText('%s disponiveis.' % self.number) self.add_full_items_animelist() self.com.sig.emit('ended') def episode_change(self): self.com.sig.emit('started') self.ui.options_list_widget.clear() if self.ui.res_list_widget.currentItem(): name = self.ui.res_list_widget.currentItem().text() episode = self.episode_list[name] self.ui.options_list_widget.addItems(episode.links) self.com.sig.emit('ended') def download(self): #name = self.ui.options_list_widget.currentItem().text() link = self.ui.options_list_widget.currentItem().text() self.com.sig.emit('started') msgBox = QMessageBox() msgBox.setWindowTitle('Informação') msgBox.setText('Browser padrão') msgBox.setInformativeText( 'Você deseja abrir este link com o seu browser padrão?') msgBox.setStandardButtons(QMessageBox.No | QMessageBox.Yes) msgBox.setDefaultButton(QMessageBox.Yes) ret = msgBox.exec_() if ret == QMessageBox.Yes: if sys.platform in 'win32': webbrowser.open(link) else: webbrowser.open(link) else: browser.ui.webView.setUrl(QUrl(link)) browser.show() self.com.sig.emit('ended') def keyPressEvent(self, event): if isinstance(event, PyQt5.QtGui.QKeyEvent): if event.key() == Qt.Key_Down: self.ui.anime_list_widget.setCurrentRow( self.ui.anime_list_widget.currentRow() + 1) elif event.key() == Qt.Key_Up: self.ui.anime_list_widget.setCurrentRow( self.ui.anime_list_widget.currentRow() - 1) @staticmethod def get_img_link(url): page = urllib.request.urlopen(url) page_string = page.read().decode('utf-8') soup = BeautifulSoup(page_string) spans = soup.find_all('span', {'id': 'posterspan'}) link = None for chil in spans: if isinstance(chil, bs4.element.Tag): for img in chil.children: if isinstance(img, bs4.element.Tag): link = img['src'] return link def show_ep_thread(self): self.ui.res_list_widget.clear() anime_name = self.ui.anime_list_widget.currentItem().text() link = self.anime_list[anime_name] self.episodes = EpisodeList(link) # self.episodes.join() self.link = self.get_img_link(link) self.episode_list = self.episodes.get_episodes() anime_name = self.ui.anime_list_widget.currentItem().text() link = self.anime_list[anime_name] img_link = self.get_img_link(link) file_name = img_link if os.path.exists(get_file(file_name)): self.com.img.emit(get_file(file_name)) # self.ui.image_label.setPixmap(QPixmap(get_file(file_name))) else: if img_link is not None: file_name = img_link.replace( 'http://www.anbient.net/sites/default/files/imagecache/242x0/imagens/poster/', '') urllib.request.urlretrieve( 'http://www.anbient.net/sites/default/files/imagecache/242x0/imagens/poster/%s' % file_name, get_file(file_name)) self.com.img.emit(get_file(file_name)) # self.ui.image_label.setPixmap(QPixmap(get_file(file_name))) self.ui.label_sinopse.setText(self.episodes.get_sinopse().strip()) try: for name in reversed(sorted(list(self.episode_list.keys()), key=int)): episode = self.episode_list[name] name, links = episode.get_attrs() self.ui.res_list_widget.addItem(name) except: for name, episode in reversed(sorted(self.episode_list.items())): name, links = episode.get_attrs() self.ui.res_list_widget.addItem(name) self.com.sig.emit('ended') def show_episodes(self): Thread(target=self.show_ep_thread).start() self.com.sig.emit('started') def add_full_items_animelist(self): self.ui.anime_list_widget.clear() for name, link in sorted(self.anime_list.items()): self.ui.anime_list_widget.addItem(name) def search_text_changed(self, new_text): items = self.ui.anime_list_widget.findItems(new_text, Qt.MatchContains) if items: self.ui.anime_list_widget.setCurrentItem(items[0]) self.ui.labelSearch.setText('') else: self.ui.labelSearch.setText('Not Found!') def setBrowser(self, browser_param): self.browser = browser_param self.browser.start_download.connect(self.start_download) self.browser.open_video.connect(self.openVideo)
class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.searchEdit.textChanged.connect(self.search_text_changed) self.ui.show_button.clicked.connect(self.show_episodes) self.ui.searchEdit.returnPressed.connect(self.show_episodes) self.episodes = None self.episode_list = None self.number = 0 self.anime_list = None self.ui.download_button.clicked.connect(self.download) self.ui.res_list_widget.currentItemChanged.connect(self.episode_change) self.com = Comunicate() self.com.sig.connect(self.message) self.com.img.connect(self.set_image) self.ui.anime_list_widget.itemDoubleClicked.connect(self.show_episodes) self.setWindowIcon(QIcon(get_file('animes.png'))) self.ui.anime_list_widget.itemPressed.connect(self.anime_entered) Thread(target=self.load_url_items).start() #self.load_url_items() self.movie = QMovie(get_file('ajax-loader.gif')) self.ui.loading_label.setMovie(self.movie) self.link = None self.main_download_page = None self.tray = SystemTrayIcon(QIcon(get_file('animes.png')), self.com, self) self.com.op.connect(self.show_semard) self.ui.action_About_Semard.triggered.connect(self.about_semard) self.ui.action_Contato.triggered.connect(self.show_feedback) self.setWindowTitle('Semard - Animes') self.browser = None self.player = None #self.player_window = player_w @Slot(str, bool) def openVideo(self, filepath, duplicate_mode): movie = os.path.expanduser(filepath) if 'http://' not in filepath: if not os.access(movie, os.R_OK): print(('Error: %s file is not readable' % movie)) sys.exit(1) split = urllib.parse.urlsplit(filepath) #name = QInputDialog.getText(self, 'Escolha nome do arquivo', 'Nome do arquivo:') name = split.path.split("/")[-1] #pa = os.path.join(res, name) if duplicate_mode: try: #media = instance.media_new(movie, 'sout=#duplicate{dst=file{dst=%s},dst=display}' % pa) pass except NameError: print(('NameError: % (%s vs Libvlc %s)' % (sys.exc_info()[1], vlc.__version__, vlc.libvlc_get_version()))) else: try: #media = instance.media_new(movie) if sys.platform in 'win32': subprocess.Popen([os.path.join('vlc', 'vlc'), movie]) else: subprocess.Popen(['vlc', movie]) except NameError: print(('NameError: % (%s vs Libvlc %s)' % (sys.exc_info()[1], vlc.__version__, vlc.libvlc_get_version()))) QMessageBox.critical(self, 'Erro', 'problema ao iniciar o vlc') # "--sout=#duplicate{dst=file{dst=example.mpg},dst=display}" #player = instance.media_player_new() #pplayer.set_media(media) #self.player_window.setMedia(media) #self.player_window.createUI() #self.player_window = Player() #media.parse() #self.player_window.setWindowTitle(media.get_meta(0)) #self.player_window.show() #self.player_window.resize(640, 480) #if sys.platform == "linux2": # for Linux using the X Server # pplayer.set_xwindow(self.player_window.videoframe.winId()) #elif sys.platform == "win32": # for Windows # pplayer.set_hwnd(self.player_window.videoframe.winId()) #elif sys.platform == "darwin": # for MacOS # pplayer.set_agl(self.player_window.videoframe.windId()) #pplayer.play() #self.player_window.updateUI() @Slot(str, str) def start_download(self, filepath, path): #thread = QThread(self) pbar = QProgressBar(self.ui.tab_downloads) pbar.setMinimum(0) pbar.setMaximum(100) pbar.setValue(0) self.ui.formLayout.addRow(os.path.basename(path), pbar) pbar.show() dw = Downloader(str(filepath), str(path), pbar) dw.finished.connect(self.finished_download) dw.progresschanged.connect(self.show_download_progress) dw.started.connect(self.started_download) Thread(target=dw.download).start() #thread.started.connect(dw.download) #thread.finished.connect(self.finished_download) #dw.moveToThread(thread) #thread.start() def finished_download(self, pbar, filename): self.tray.showMessage(filename, 'Download concluído.') pbar.setValue(100) pbar.setEnabled(False) def started_download(self, filename): filename = os.path.basename(filename) self.tray.showMessage(filename, 'Download iniciado.') @Slot(float, QProgressBar) def show_download_progress(self, progress, pbar): pbar.setValue(progress) def show_feedback(self): feed = Feedback(self.com) feed.exec_() def about_semard(self): about = QMessageBox.about( self, "Sobre Semard", """<b>Semard</b> v%s <p><b>Copyright (C) 2013</b> Ronnie Andrew.</p> <p>Todos os direitos reservados de acordo com a licença GNU GPL v3 ou posterior.</p> <p><b>Website Oficial:</b> <a href='https://github.com/ROAND/Series-Manager'>GitHub</a></p> <p><b>Plataforma: </b>%s</p> """ % (__version__, platform.system())) def show_semard(self, message): self.show() def closeEvent(self, event): self.hide() self.tray.showMessage('Semard', 'Semard ainda está em execução.') event.ignore() @Slot(str) def set_image(self, img_str): self.ui.image_label.setPixmap(QPixmap(img_str)) @Slot(str) def message(self, message): if str(message) in 'ended': self.ui.loading_label.hide() # self.repaint() self.ui.anime_list_widget.setEnabled(True) self.ui.show_button.setEnabled(True) self.movie.stop() if str(message) in 'started': self.ui.loading_label.show() # self.repaint() self.ui.anime_list_widget.setEnabled(False) self.ui.show_button.setEnabled(False) self.movie.start() def anime_entered(self, item): pass def load_url_items(self): self.com.sig.emit('started') self.main_download_page = AnimeList('http://www.anbient.net/lista') self.number, self.anime_list = self.main_download_page.get_attrs() self.ui.avaLabel.setText('%s disponiveis.' % self.number) self.add_full_items_animelist() self.com.sig.emit('ended') def episode_change(self): self.com.sig.emit('started') self.ui.options_list_widget.clear() if self.ui.res_list_widget.currentItem(): name = self.ui.res_list_widget.currentItem().text() episode = self.episode_list[name] self.ui.options_list_widget.addItems(episode.links) self.com.sig.emit('ended') def download(self): #name = self.ui.options_list_widget.currentItem().text() link = self.ui.options_list_widget.currentItem().text() self.com.sig.emit('started') msgBox = QMessageBox() msgBox.setWindowTitle('Informação') msgBox.setText('Browser padrão') msgBox.setInformativeText( 'Você deseja abrir este link com o seu browser padrão?') msgBox.setStandardButtons(QMessageBox.No | QMessageBox.Yes) msgBox.setDefaultButton(QMessageBox.Yes) ret = msgBox.exec_() if ret == QMessageBox.Yes: if sys.platform in 'win32': webbrowser.open(link) else: webbrowser.open(link) else: browser.ui.webView.setUrl(QUrl(link)) browser.show() self.com.sig.emit('ended') def keyPressEvent(self, event): if isinstance(event, PyQt5.QtGui.QKeyEvent): if event.key() == Qt.Key_Down: self.ui.anime_list_widget.setCurrentRow( self.ui.anime_list_widget.currentRow() + 1) elif event.key() == Qt.Key_Up: self.ui.anime_list_widget.setCurrentRow( self.ui.anime_list_widget.currentRow() - 1) @staticmethod def get_img_link(url): page = urllib.request.urlopen(url) page_string = page.read().decode('utf-8') soup = BeautifulSoup(page_string) spans = soup.find_all('span', {'id': 'posterspan'}) link = None for chil in spans: if isinstance(chil, bs4.element.Tag): for img in chil.children: if isinstance(img, bs4.element.Tag): link = img['src'] return link def show_ep_thread(self): self.ui.res_list_widget.clear() anime_name = self.ui.anime_list_widget.currentItem().text() link = self.anime_list[anime_name] self.episodes = EpisodeList(link) # self.episodes.join() self.link = self.get_img_link(link) self.episode_list = self.episodes.get_episodes() anime_name = self.ui.anime_list_widget.currentItem().text() link = self.anime_list[anime_name] img_link = self.get_img_link(link) file_name = img_link if os.path.exists(get_file(file_name)): self.com.img.emit(get_file(file_name)) # self.ui.image_label.setPixmap(QPixmap(get_file(file_name))) else: if img_link is not None: file_name = img_link.replace( 'http://www.anbient.net/sites/default/files/imagecache/242x0/imagens/poster/', '') urllib.request.urlretrieve( 'http://www.anbient.net/sites/default/files/imagecache/242x0/imagens/poster/%s' % file_name, get_file(file_name)) self.com.img.emit(get_file(file_name)) # self.ui.image_label.setPixmap(QPixmap(get_file(file_name))) self.ui.label_sinopse.setText(self.episodes.get_sinopse().strip()) try: for name in reversed( sorted(list(self.episode_list.keys()), key=int)): episode = self.episode_list[name] name, links = episode.get_attrs() self.ui.res_list_widget.addItem(name) except: for name, episode in reversed(sorted(self.episode_list.items())): name, links = episode.get_attrs() self.ui.res_list_widget.addItem(name) self.com.sig.emit('ended') def show_episodes(self): Thread(target=self.show_ep_thread).start() self.com.sig.emit('started') def add_full_items_animelist(self): self.ui.anime_list_widget.clear() for name, link in sorted(self.anime_list.items()): self.ui.anime_list_widget.addItem(name) def search_text_changed(self, new_text): items = self.ui.anime_list_widget.findItems(new_text, Qt.MatchContains) if items: self.ui.anime_list_widget.setCurrentItem(items[0]) self.ui.labelSearch.setText('') else: self.ui.labelSearch.setText('Not Found!') def setBrowser(self, browser_param): self.browser = browser_param self.browser.start_download.connect(self.start_download) self.browser.open_video.connect(self.openVideo)