Exemple #1
0
 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
Exemple #2
0
 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
Exemple #3
0
 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()
Exemple #4
0
 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()
Exemple #5
0
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!")
Exemple #6
0
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)
Exemple #7
0
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!')
Exemple #8
0
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)