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.activated.connect(self.about_semard) self.ui.action_Contato.activated.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.activated.connect(self.about_semard) self.ui.action_Contato.activated.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.download_item_change) self.com = Comunicate() self.com.sig.connect(self.message) self.ui.anime_list_widget.itemDoubleClicked.connect(self.show_episodes) self.setWindowIcon(QIcon(get_file('animes.png'))) Thread(target=self.load_url_items).start()
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.download_item_change) self.com = Comunicate() self.com.sig.connect(self.message) self.ui.anime_list_widget.itemDoubleClicked.connect(self.show_episodes) self.setWindowIcon(QIcon("animes.png")) Thread(target=self.load_url_items).start()
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.download_item_change) self.com = Comunicate() self.com.sig.connect(self.message) self.ui.anime_list_widget.itemDoubleClicked.connect(self.show_episodes) self.setWindowIcon(QIcon("animes.png")) Thread(target=self.load_url_items).start() @Slot(str) def message(self, message): if message in "ended": self.ui.loading_label.setVisible(False) self.repaint() if message in "started": self.ui.loading_label.setVisible(True) self.repaint() def load_url_items(self): self.com.sig.emit("started") self.main_download_page = AnimeList("http://www.animetake.com/anime-downloads/") self.number, self.anime_list = self.main_download_page.get_attrs() self.ui.avaLabel.setText("%s available." % self.number) self.add_full_items_animelist() self.com.sig.emit("ended") def download_item_change(self): self.com.sig.emit("started") self.repaint() self.ui.options_list_widget.clear() # urllib.request.urlretrieve("http://animetake.com/images/.png", "images" + os.sep + "onepiece.png") # pix = QPixmap("images" + os.sep + "onepiece.png")#%s" % str(anime_name).replace(' ', '-')) # self.ui.image_label.setPixmap(pix) if self.ui.res_list_widget.currentItem(): name = self.ui.res_list_widget.currentItem().text().split(" -->")[0] ep = self.episode_list[name] name, release_date, link = ep.get_attrs() download = DownloadOptions(link) download.join() img_link = download.get_img_link() file_name = img_link.replace("http://www.animetake.com/images/", "") if os.path.exists("images" + os.sep + file_name): self.ui.image_label.setPixmap("images" + os.sep + file_name) else: reqst = Request("http://www.animetake.com/images/%s" % file_name, headers={"User-Agent": "Mozilla/5.0"}) # urllib.request.urlretrieve(reqst, # 'images' + os.sep + file_name) with urllib.request.urlopen(reqst) as response, open(file_name, "wb") as out_file: shutil.copyfileobj(response, out_file) self.ui.image_label.setPixmap(QPixmap("images" + os.sep + out_file.name)) self.options = download.get_download_options() for name, link in self.options.items(): self.ui.options_list_widget.addItem(name) self.com.sig.emit("ended") def download(self): name = self.ui.options_list_widget.currentItem().text() link = self.options[name] self.com.sig.emit("started") dialog = QFileDialog(self) dialog.setFileMode(QFileDialog.Directory) dialog.setOption(QFileDialog.ShowDirsOnly, True) file_path = os.path.join(dialog.getExistingDirectory(), "%s.torrent" % name.strip()) urllib.request.urlretrieve(link, file_path) self.ui.loading_label.setVisible(False) msgBox = QMessageBox() msgBox.setWindowTitle("Torrent Download") msgBox.setText("Downloaded file %s.torrent to %s." % (name, file_path)) msgBox.setInformativeText("Do you want to start the download now?") msgBox.setStandardButtons(QMessageBox.No | QMessageBox.Yes) msgBox.setDefaultButton(QMessageBox.Yes) ret = msgBox.exec_() if ret == QMessageBox.Yes: if sys.platform in "Win32": os.startfile(file_path) else: print(file_path) subprocess.Popen(["ktorrent", file_path]) self.com.sig.emit("ended") def keyPressEvent(self, event): if isinstance(event, PyQt4.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) def show_episodes(self): self.com.sig.emit("started") 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.repaint() self.episodes.join() self.episode_list = self.episodes.get_episodes() if "Removed" not in self.episode_list.keys(): for name, episode in reversed(sorted(self.episode_list.items())): name, release_date, link = episode.get_attrs() self.ui.res_list_widget.addItem(name + " -->" + release_date) else: self.ui.res_list_widget.addItem("This anime is not available, sorry.") self.com.sig.emit("ended") 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!")
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.activated.connect(self.about_semard) self.ui.action_Contato.activated.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 = urlparse.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 = QtGui.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, u'Download concluído.') pbar.setValue(100) pbar.setEnabled(False) def started_download(self, filename): filename = os.path.basename(filename) self.tray.showMessage(filename, u'Download iniciado.') @Slot(float, QtGui.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", u"""<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(u'Semard', u'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(u'Informação') msgBox.setText(u'Browser padrão') msgBox.setInformativeText( u'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(link) browser.show() self.com.sig.emit('ended') def keyPressEvent(self, event): if isinstance(event, PyQt4.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 = urllib2.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.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(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.download_item_change) self.com = Comunicate() self.com.sig.connect(self.message) self.ui.anime_list_widget.itemDoubleClicked.connect(self.show_episodes) self.setWindowIcon(QIcon(get_file('animes.png'))) Thread(target=self.load_url_items).start() @Slot(QString) def message(self, message): if message in "ended": self.ui.loading_label.setVisible(False) self.repaint() if message in "started": self.ui.loading_label.setVisible(True) self.repaint() def load_url_items(self): self.com.sig.emit('started') self.main_download_page = AnimeList( "http://www.animetake.com/anime-downloads/") self.number, self.anime_list = self.main_download_page.get_attrs() self.ui.avaLabel.setText('%s available.' % self.number) self.add_full_items_animelist() self.com.sig.emit('ended') def download_item_change(self): self.com.sig.emit('started') self.repaint() self.ui.options_list_widget.clear() #urllib.request.urlretrieve("http://animetake.com/images/.png", "images" + os.sep + "onepiece.png") #pix = QPixmap("images" + os.sep + "onepiece.png")#%s" % str(anime_name).replace(' ', '-')) #self.ui.image_label.setPixmap(pix) if self.ui.res_list_widget.currentItem(): name = self.ui.res_list_widget.currentItem().text().split(' -->')[0] ep = self.episode_list[name] name, release_date, link = ep.get_attrs() download = DownloadOptions(link) download.join() img_link = download.get_img_link() file_name = img_link if file_name is not None: file_name = img_link.replace('http://www.animetake.com/images/', '') if os.path.exists(get_file(file_name)): self.ui.image_label.setPixmap(get_file(file_name)) else: #urllib.request.urlretrieve('http://www.animetake.com/images/%s' % file_name, # 'images' + os.sep + file_name) urllib.urlretrieve('http://www.animetake.com/images/%s' % file_name,get_file(file_name)) self.ui.image_label.setPixmap(get_file(file_name)) self.options = download.get_download_options() for name, link in self.options.items(): self.ui.options_list_widget.addItem(name) self.com.sig.emit('ended') def download(self): name = self.ui.options_list_widget.currentItem().text() link = self.options[name] self.com.sig.emit('started') dialog = QFileDialog(self) dialog.setFileMode(QFileDialog.Directory) dialog.setOption(QFileDialog.ShowDirsOnly, True) file_path = os.path.join(dialog.getExistingDirectory(),"%s.torrent" % name.strip()) #urllib.request.urlretrieve(link, file_path) urllib.urlretrieve(link, file_path) self.ui.loading_label.setVisible(False) msgBox = QMessageBox() msgBox.setWindowTitle('Torrent Download') msgBox.setText('Downloaded file %s.torrent to %s.' % (name, file_path)) msgBox.setInformativeText('Do you want to start the download now?') msgBox.setStandardButtons(QMessageBox.No | QMessageBox.Yes) msgBox.setDefaultButton(QMessageBox.Yes) ret = msgBox.exec_() if ret == QMessageBox.Yes: if sys.platform in 'win32': os.startfile(file_path) else: subprocess.Popen(['ktorrent',file_path]) self.com.sig.emit('ended') def keyPressEvent(self, event): if isinstance(event, PyQt4.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) def show_episodes(self): self.com.sig.emit('started') 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.repaint() self.episodes.join() self.episode_list = self.episodes.get_episodes() if 'Removed' not in self.episode_list.keys(): for name, episode in reversed(sorted(self.episode_list.items())): name, release_date, link = episode.get_attrs() self.ui.res_list_widget.addItem(name + ' -->' + release_date) else: self.ui.res_list_widget.addItem('This anime is not available, sorry.') self.com.sig.emit('ended') 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!')
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.activated.connect(self.about_semard) self.ui.action_Contato.activated.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 = urlparse.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 = QtGui.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, u'Download concluído.') pbar.setValue(100) pbar.setEnabled(False) def started_download(self, filename): filename = os.path.basename(filename) self.tray.showMessage(filename, u'Download iniciado.') @Slot(float, QtGui.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", u"""<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(u'Semard', u'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(u'Informação') msgBox.setText(u'Browser padrão') msgBox.setInformativeText( u'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(link) browser.show() self.com.sig.emit('ended') def keyPressEvent(self, event): if isinstance(event, PyQt4.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 = urllib2.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.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(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)