Пример #1
0
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.media_player = None
        self.setWindowTitle('name of the software - ' + self.version)
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.show()
        self.timer = QTimer(self)

        self.current_category = None
Пример #2
0
    def __init__( self, parent=None ):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.media_player = None
        self.setWindowTitle('name of the software - ' + self.version)
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.show()
        self.timer = QTimer(self)

        self.current_category = None
Пример #3
0
class MainWindow(QMainWindow, Ui_MainWindow):
    settings = QSettings('Rafał Jagoda', 'Peer 2 cinema')
    settings.setFallbacksEnabled(False)
    version = '1.0'

    def __init__( self, parent=None ):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.media_player = None
        self.setWindowTitle('name of the software - ' + self.version)
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.show()
        self.timer = QTimer(self)

        self.current_category = None


    def play(self, movie: Movie):
        self.app.play(movie)
        self.media_player.play()
        self.playButton.setEnabled(True)

    def connect_app(self, app: P2CDaemon):
        self.app = app
        self._set_categories()
        self._connect_signals()

    def change_category(self, item):
        index = self.menuTree.indexOfTopLevelItem(item)
        category = self.app.get_categories()[index]
        self.current_category = category
        self.itemList.clear()
        threading.Thread(target=self._set_torrents).start()

    def activate_torrent(self, item):
        self.update_status()

    def update_status(self):
        index = self.itemList.currentIndex().row()
        if index != -1:
            data= {}
            torrent_ui = self.current_category.get_torrents()[index]
            torrent = self.app.get_torrent(torrent_ui)
            if torrent and torrent.has_torrent_info():
                movie = torrent.get_downloading_movie()
                if movie:
                    data['movie'] = movie.name
                    if self.media_player:
                        self.positionSlider.setBackgroundValue(movie.progress * self.media_player.duration())
                    data['movie progress'] = "{0:.2f}%".format(movie.progress * 100)
                    data['can_play'] = movie.can_play()
                data.update(torrent.get_status())
                # TODO: buggy due to setting priority to 0
                if data['state'] == 'downloading':
                    del data['progress']
                else:
                    data['progress'] = "{0:.2f}%".format(data['progress'] * 100)
                data['download_rate'] = "{0:.2f} kb/s".format(data['download_rate']/1000)
            else:
                data['status'] = "Getting metadata"
            text = "\n".join(["{}: {}".format(k,data[k]) for k in data])
        else:
            text="select item"
        self.statusArea.setText(text)

    def run_torrent(self, item):
        index = self.itemList.currentIndex()
        torrent_ui = self.current_category.get_torrents()[index.row()]
        torrent = self.app.get_torrent(torrent_ui)
        if(torrent.has_torrent_info()):
            movies = torrent.get_movies()
            # DEVELOPMENT

            movie = max(movies, key=lambda x:x.size)
            torrent.download_file(movie.path)

            if(movie.can_play()):
                self._set_media(movie)
                self.play(movie)
            else:
                self.app.buffer(movie)

    def _set_categories(self):
        for category in self.app.get_categories():
            item = QTreeWidgetItem(self.menuTree)
            item.setText(0, category.label)

    def _set_torrents(self):
        category = self.current_category
        items = map(lambda x: x.label,
            category.get_torrents(limit=20))
        # after long call
        if(self.current_category == category):
            self.itemList.addItems(list(items))

    def toggle_player(self):
       if self.media_player.state() == QMediaPlayer.PlayingState:
           self.media_player.pause()
       else:
           self.media_player.play()

    def set_player_position(self, position):
        self.media_player.setPosition(position)

    def media_state_changed(self, state):
        if state == QMediaPlayer.PlayingState:
            self.playButton.setIcon(self.videoArea.style().standardIcon(QStyle.SP_MediaPause))
        else:
            self.playButton.setIcon(self.videoArea.style().standardIcon(QStyle.SP_MediaPlay))

    def position_changed(self, position):
        self.positionSlider.setValue(position)

    def duration_changed(self, duration):
        self.positionSlider.setRange(0, duration)

    def _connect_signals(self):
        self.menuTree.currentItemChanged.connect(self.change_category)
        self.itemList.currentItemChanged.connect(self.activate_torrent)
        self.itemList.itemDoubleClicked.connect(self.run_torrent)
        self.timer.timeout.connect(self.update_status)
        self.timer.start(500)

    def _connect_player_signals(self):
        self.playButton.clicked.connect(self.toggle_player)
        self.positionSlider.sliderMoved.connect(self.set_player_position)
        self.media_player.stateChanged.connect(self.media_state_changed)
        self.media_player.durationChanged.connect(self.duration_changed)
        self.media_player.positionChanged.connect(self.position_changed)

    def _set_media(self, movie: Movie):
        if self.media_player is None:
            self.media_player = QMediaPlayer(self.videoArea,
                QMediaPlayer.VideoSurface)
            self.media_player.setVideoOutput(self.videoArea.videoSurface())
            self._connect_player_signals()
        file_name = movie.get_target_path()
        mimetype = mimetypes.guess_type(file_name)[0]
        logger.debug("Found mimetype: {}".format(mimetype))
        media_res = QMediaResource(QUrl.fromLocalFile(file_name), mimetype)
        media = QMediaContent(media_res)
        self.media_player.setMedia(media)
Пример #4
0
class MainWindow(QMainWindow, Ui_MainWindow):
    settings = QSettings('Rafał Jagoda', 'Peer 2 cinema')
    settings.setFallbacksEnabled(False)
    version = '1.0'

    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.media_player = None
        self.setWindowTitle('name of the software - ' + self.version)
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.show()
        self.timer = QTimer(self)

        self.current_category = None

    def play(self, movie: Movie):
        self.app.play(movie)
        self.media_player.play()
        self.playButton.setEnabled(True)

    def connect_app(self, app: P2CDaemon):
        self.app = app
        self._set_categories()
        self._connect_signals()

    def change_category(self, item):
        index = self.menuTree.indexOfTopLevelItem(item)
        category = self.app.get_categories()[index]
        self.current_category = category
        self.itemList.clear()
        threading.Thread(target=self._set_torrents).start()

    def activate_torrent(self, item):
        self.update_status()

    def update_status(self):
        index = self.itemList.currentIndex().row()
        if index != -1:
            data = {}
            torrent_ui = self.current_category.get_torrents()[index]
            torrent = self.app.get_torrent(torrent_ui)
            if torrent and torrent.has_torrent_info():
                movie = torrent.get_downloading_movie()
                if movie:
                    data['movie'] = movie.name
                    if self.media_player:
                        self.positionSlider.setBackgroundValue(
                            movie.progress * self.media_player.duration())
                    data['movie progress'] = "{0:.2f}%".format(movie.progress *
                                                               100)
                    data['can_play'] = movie.can_play()
                data.update(torrent.get_status())
                # TODO: buggy due to setting priority to 0
                if data['state'] == 'downloading':
                    del data['progress']
                else:
                    data['progress'] = "{0:.2f}%".format(data['progress'] *
                                                         100)
                data['download_rate'] = "{0:.2f} kb/s".format(
                    data['download_rate'] / 1000)
            else:
                data['status'] = "Getting metadata"
            text = "\n".join(["{}: {}".format(k, data[k]) for k in data])
        else:
            text = "select item"
        self.statusArea.setText(text)

    def run_torrent(self, item):
        index = self.itemList.currentIndex()
        torrent_ui = self.current_category.get_torrents()[index.row()]
        torrent = self.app.get_torrent(torrent_ui)
        if (torrent.has_torrent_info()):
            movies = torrent.get_movies()
            # DEVELOPMENT

            movie = max(movies, key=lambda x: x.size)
            torrent.download_file(movie.path)

            if (movie.can_play()):
                self._set_media(movie)
                self.play(movie)
            else:
                self.app.buffer(movie)

    def _set_categories(self):
        for category in self.app.get_categories():
            item = QTreeWidgetItem(self.menuTree)
            item.setText(0, category.label)

    def _set_torrents(self):
        category = self.current_category
        items = map(lambda x: x.label, category.get_torrents(limit=20))
        # after long call
        if (self.current_category == category):
            self.itemList.addItems(list(items))

    def toggle_player(self):
        if self.media_player.state() == QMediaPlayer.PlayingState:
            self.media_player.pause()
        else:
            self.media_player.play()

    def set_player_position(self, position):
        self.media_player.setPosition(position)

    def media_state_changed(self, state):
        if state == QMediaPlayer.PlayingState:
            self.playButton.setIcon(self.videoArea.style().standardIcon(
                QStyle.SP_MediaPause))
        else:
            self.playButton.setIcon(self.videoArea.style().standardIcon(
                QStyle.SP_MediaPlay))

    def position_changed(self, position):
        self.positionSlider.setValue(position)

    def duration_changed(self, duration):
        self.positionSlider.setRange(0, duration)

    def _connect_signals(self):
        self.menuTree.currentItemChanged.connect(self.change_category)
        self.itemList.currentItemChanged.connect(self.activate_torrent)
        self.itemList.itemDoubleClicked.connect(self.run_torrent)
        self.timer.timeout.connect(self.update_status)
        self.timer.start(500)

    def _connect_player_signals(self):
        self.playButton.clicked.connect(self.toggle_player)
        self.positionSlider.sliderMoved.connect(self.set_player_position)
        self.media_player.stateChanged.connect(self.media_state_changed)
        self.media_player.durationChanged.connect(self.duration_changed)
        self.media_player.positionChanged.connect(self.position_changed)

    def _set_media(self, movie: Movie):
        if self.media_player is None:
            self.media_player = QMediaPlayer(self.videoArea,
                                             QMediaPlayer.VideoSurface)
            self.media_player.setVideoOutput(self.videoArea.videoSurface())
            self._connect_player_signals()
        file_name = movie.get_target_path()
        mimetype = mimetypes.guess_type(file_name)[0]
        logger.debug("Found mimetype: {}".format(mimetype))
        media_res = QMediaResource(QUrl.fromLocalFile(file_name), mimetype)
        media = QMediaContent(media_res)
        self.media_player.setMedia(media)