Exemplo n.º 1
0
 def init_download(self):
     self.state = DownloadState.DOWNLOADING
     self.thread = Downloader(self.parent.manager, self.build_info)
     self.thread.started.connect(self.download_started)
     self.thread.progress_changed.connect(self.set_progress_bar)
     self.thread.finished.connect(self.download_finished)
     self.thread.start()
    def download(self):
        self.link = "https://github.com/DotBow/Blender-Launcher/releases/download/{0}/Blender_Launcher_{0}_{1}_x64.zip".format(
            self.tag, get_platform())
        self.downlaoder = Downloader(self.parent.manager, self.link)
        self.downlaoder.progress_changed.connect(self.set_progress_bar)
        self.downlaoder.finished.connect(self.extract)
        self.downlaoder.start()

        self.show()
class UpdateWindow(QMainWindow, BaseWindow, UpdateWindowUI):
    def __init__(self, parent, tag):
        super().__init__()
        self.setWindowTitle("Update")
        self.setupUi(self)

        self.parent = parent
        self.tag = tag

        self.download()

    def download(self):
        self.link = "https://github.com/DotBow/Blender-Launcher/releases/download/{0}/Blender_Launcher_{0}_{1}_x64.zip".format(
            self.tag, get_platform())
        self.downlaoder = Downloader(self.parent.manager, self.link)
        self.downlaoder.progress_changed.connect(self.set_progress_bar)
        self.downlaoder.finished.connect(self.extract)
        self.downlaoder.start()

        self.show()

    def extract(self, source):
        dist = tempfile.gettempdir()
        self.extractor = Extractor(self.parent.manager, source, dist)
        self.extractor.progress_changed.connect(self.set_progress_bar)
        self.extractor.finished.connect(self.run)
        self.extractor.start()

    def run(self, dist):
        platform = get_platform()
        cwd = Path.cwd()

        if platform == 'Windows':
            bl_exe = "Blender Launcher.exe"
            blu_exe = "Blender Launcher Updater.exe"
        elif platform == 'Linux':
            bl_exe = "Blender Launcher"
            blu_exe = "Blender Launcher Updater"

        source = cwd / bl_exe
        dist = cwd / blu_exe

        with open(source.as_posix(), 'rb') as f1, open(dist.as_posix(),
                                                       'wb') as f2:
            copyfileobj(f1, f2)

        if platform == 'Windows':
            _popen([dist.as_posix(), "-update"])
        elif platform == 'Linux':
            os.chmod(dist.as_posix(), 0o744)
            _popen('nohup "' + dist.as_posix() + '" -update')

        self.parent.destroy()

    def closeEvent(self, event):
        event.ignore()
        self.showMinimized()
Exemplo n.º 4
0
    def init_download(self):
        self.item.setSelected(True)

        if hasattr(self, "NewItemLabel"):
            self.NewItemLabel.hide()

        self.state = DownloadState.DOWNLOADING
        self.thread = Downloader(self.parent.manager, self.build_info)
        self.thread.started.connect(self.download_started)
        self.thread.progress_changed.connect(self.set_progress_bar)
        self.thread.finished.connect(self.download_finished)
        self.thread.start()
Exemplo n.º 5
0
class DownloadWidget(QWidget):
    def __init__(self, parent, list_widget, item, build_info):
        super(DownloadWidget, self).__init__(None)
        self.parent = parent
        self.list_widget = list_widget
        self.item = item
        self.build_info = build_info
        self.state = DownloadState.WAITING

        self.progressBar = QProgressBar()
        self.progressBar.setAlignment(Qt.AlignCenter)
        self.progressBar.setMinimumWidth(135)
        self.progressBar.hide()

        self.downloadButton = QPushButton("Download")
        self.downloadButton.setMinimumWidth(85)
        self.downloadButton.setProperty("LaunchButton", True)
        self.downloadButton.clicked.connect(self.init_download)

        self.cancelButton = QPushButton("Cancel")
        self.cancelButton.setMinimumWidth(85)
        self.cancelButton.setProperty("CancelButton", True)
        self.cancelButton.clicked.connect(self.download_cancelled)
        self.cancelButton.hide()

        layout = QHBoxLayout()
        layout.setContentsMargins(2, 2, 2, 2)
        layout.addWidget(self.downloadButton, alignment=Qt.AlignRight)
        layout.addWidget(self.cancelButton, alignment=Qt.AlignRight)

        self.subversionLabel = QLabel(self.build_info.subversion)
        self.branchLabel = QLabel(
            self.build_info.branch.replace('-', ' ').title())
        self.commitTimeLabel = QLabel(self.build_info.commit_time)
        self.buildHashLabel = QLabel(self.build_info.build_hash)
        self.buildHashLabel.setSizePolicy(QSizePolicy.Ignored,
                                          QSizePolicy.Fixed)

        layout.addWidget(self.subversionLabel)
        layout.addWidget(self.branchLabel)
        layout.addWidget(self.commitTimeLabel)
        layout.addWidget(self.buildHashLabel, stretch=1)
        layout.addWidget(self.progressBar)

        self.setLayout(layout)

    def showEvent(self, event):
        self.list_widget.resize_labels(
            ('subversionLabel', 'branchLabel', 'commitTimeLabel'))

    def init_download(self):
        self.state = DownloadState.DOWNLOADING
        self.thread = Downloader(self.parent.manager, self.build_info)
        self.thread.started.connect(self.download_started)
        self.thread.progress_changed.connect(self.set_progress_bar)
        self.thread.finished.connect(self.download_finished)
        self.thread.start()

    def download_started(self):
        self.set_progress_bar(0, "Downloading: %p%")
        self.progressBar.show()
        self.cancelButton.show()
        self.downloadButton.hide()

    def download_cancelled(self):
        self.state = DownloadState.WAITING
        self.progressBar.hide()
        self.cancelButton.hide()
        self.thread.terminate()
        self.thread.wait()
        self.downloadButton.show()

    def set_progress_bar(self, value, format):
        self.progressBar.setFormat(format)
        self.progressBar.setValue(value * 100)

    def download_finished(self, dist=None):
        self.state = DownloadState.WAITING

        if dist is not None:
            self.parent.draw_to_library(dist)
            self.parent.clear_temp()
            self.destroy()

    def destroy(self):
        if self.state == DownloadState.WAITING:
            row = self.list_widget.row(self.item)
            self.list_widget.takeItem(row)
Exemplo n.º 6
0
class DownloadWidget(QWidget):
    def __init__(self, parent, list_widget, item, build_info, show_new=False):
        super(DownloadWidget, self).__init__(None)
        self.parent = parent
        self.list_widget = list_widget
        self.item = item
        self.build_info = build_info
        self.show_new = show_new
        self.state = DownloadState.WAITING

        self.progressBar = QProgressBar()
        self.progressBar.setAlignment(Qt.AlignCenter)
        self.progressBar.hide()

        self.downloadButton = QPushButton("Download")
        self.downloadButton.setMinimumWidth(85)
        self.downloadButton.setProperty("LaunchButton", True)
        self.downloadButton.clicked.connect(self.init_download)

        self.cancelButton = QPushButton("Cancel")
        self.cancelButton.setMinimumWidth(85)
        self.cancelButton.setProperty("CancelButton", True)
        self.cancelButton.clicked.connect(self.download_cancelled)
        self.cancelButton.hide()

        self.layout = QHBoxLayout()
        self.layout.setContentsMargins(2, 2, 2, 2)

        self.subversionLabel = QLabel(self.build_info.subversion)
        self.branchLabel = QLabel(
            self.build_info.branch.replace('-', ' ').title())
        self.commitTimeLabel = QLabel(self.build_info.commit_time)
        self.buildHashLabel = QLabel(self.build_info.build_hash)
        self.progressBar.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Fixed)

        self.layout.addWidget(self.downloadButton)
        self.layout.addWidget(self.cancelButton)
        self.layout.addWidget(self.subversionLabel)
        self.layout.addWidget(self.branchLabel)
        self.layout.addWidget(self.commitTimeLabel)
        self.layout.addWidget(self.buildHashLabel)
        self.layout.addStretch()
        self.layout.addWidget(self.progressBar, stretch=1)

        if self.show_new:
            self.NewItemLabel = QLabel("New")
            self.NewItemLabel.setAlignment(Qt.AlignRight | Qt.AlignCenter)
            self.NewItemLabel.setIndent(6)
            self.layout.addWidget(self.NewItemLabel)

        self.setLayout(self.layout)

    def mouseReleaseEvent(self, event):
        if hasattr(self, "NewItemLabel"):
            self.NewItemLabel.hide()

    def showEvent(self, event):
        self.list_widget.resize_labels(('subversionLabel', 'branchLabel',
                                        'commitTimeLabel', 'buildHashLabel'))

    def init_download(self):
        self.item.setSelected(True)

        if hasattr(self, "NewItemLabel"):
            self.NewItemLabel.hide()

        self.state = DownloadState.DOWNLOADING
        self.thread = Downloader(self.parent.manager, self.build_info)
        self.thread.started.connect(self.download_started)
        self.thread.progress_changed.connect(self.set_progress_bar)
        self.thread.finished.connect(self.download_finished)
        self.thread.start()

    def download_started(self):
        self.set_progress_bar(0, "Downloading: %p%")
        self.progressBar.show()
        self.cancelButton.show()
        self.downloadButton.hide()

    def download_cancelled(self):
        self.item.setSelected(True)
        self.state = DownloadState.WAITING
        self.progressBar.hide()
        self.cancelButton.hide()
        self.thread.terminate()
        self.thread.wait()
        self.downloadButton.show()

    def set_progress_bar(self, value, format):
        self.progressBar.setFormat(format)
        self.progressBar.setValue(value * 100)

    def download_finished(self, dist=None):
        self.state = DownloadState.WAITING

        if dist is not None:
            self.parent.draw_to_library(dist, True)
            self.parent.clear_temp()
            name = "{0} {1} {2}".format(self.subversionLabel.text(),
                                        self.branchLabel.text(),
                                        self.commitTimeLabel.text())
            self.parent.show_message(
                "Blender {0} download finished!".format(name))
            self.destroy()

    def destroy(self):
        if self.state == DownloadState.WAITING:
            self.list_widget.remove_item(self.item)
Exemplo n.º 7
0
class DownloadWidget(QWidget):
    def __init__(self, parent, list_widget, item, build_info, show_new=False):
        super(DownloadWidget, self).__init__(None)
        self.parent = parent
        self.list_widget = list_widget
        self.item = item
        self.build_info = build_info
        self.show_new = show_new
        self.state = DownloadState.WAITING

        self.progressBar = QProgressBar()
        self.progressBar.setAlignment(Qt.AlignCenter)
        self.progressBar.hide()

        self.downloadButton = QPushButton("Download")
        self.downloadButton.setMinimumWidth(85)
        self.downloadButton.setProperty("LaunchButton", True)
        self.downloadButton.clicked.connect(self.init_downloader)

        self.cancelButton = QPushButton("Cancel")
        self.cancelButton.setMinimumWidth(85)
        self.cancelButton.setProperty("CancelButton", True)
        self.cancelButton.clicked.connect(self.download_cancelled)
        self.cancelButton.hide()

        self.layout = QHBoxLayout()
        self.layout.setContentsMargins(2, 2, 2, 2)

        self.subversionLabel = QLabel(self.build_info.subversion)

        if self.build_info.branch == 'lts':
            branch_name = "LTS"
        else:
            branch_name = self.build_info.branch.replace('-', ' ').title()

        self.branchLabel = QLabel(branch_name)

        self.commitTimeLabel = QLabel(self.build_info.commit_time)
        self.buildHashLabel = QLabel(self.build_info.build_hash)
        self.progressBar.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Fixed)

        self.layout.addWidget(self.downloadButton)
        self.layout.addWidget(self.cancelButton)
        self.layout.addWidget(self.subversionLabel)
        self.layout.addWidget(self.branchLabel)
        self.layout.addWidget(self.commitTimeLabel)
        self.layout.addWidget(self.buildHashLabel)
        self.layout.addStretch()
        self.layout.addWidget(self.progressBar, stretch=1)

        if self.show_new:
            self.NewItemLabel = QLabel("New")
            self.NewItemLabel.setAlignment(Qt.AlignRight | Qt.AlignCenter)
            self.NewItemLabel.setIndent(6)
            self.layout.addWidget(self.NewItemLabel)

        self.setLayout(self.layout)

    def mouseDoubleClickEvent(self, event):
        if self.state != DownloadState.DOWNLOADING:
            self.init_downloader()

    def mouseReleaseEvent(self, event):
        if hasattr(self, "NewItemLabel"):
            self.NewItemLabel.hide()

    def showEvent(self, event):
        self.list_widget.resize_labels(('subversionLabel', 'branchLabel',
                                        'commitTimeLabel', 'buildHashLabel'))

    def init_downloader(self):
        self.item.setSelected(True)

        if hasattr(self, "NewItemLabel"):
            self.NewItemLabel.hide()

        self.state = DownloadState.DOWNLOADING
        self.downloader = Downloader(self.parent.manager, self.build_info.link)
        self.downloader.started.connect(self.download_started)
        self.downloader.progress_changed.connect(self.set_progress_bar)
        self.downloader.finished.connect(self.init_extractor)
        self.downloader.start()

    def init_extractor(self, source):
        self.cancelButton.setEnabled(False)
        library_folder = Path(get_library_folder())

        if (self.build_info.branch == 'stable') or (self.build_info.branch
                                                    == 'lts'):
            dist = library_folder / 'stable'
        elif self.build_info.branch == 'daily':
            dist = library_folder / 'daily'
        else:
            dist = library_folder / 'experimental'

        self.extractor = Extractor(self.parent.manager, source, dist)
        self.extractor.progress_changed.connect(self.set_progress_bar)
        self.extractor.finished.connect(self.init_template_installer)
        self.extractor.start()

    def init_template_installer(self, dist):
        if get_install_template():
            self.template_installer = TemplateInstaller(
                self.parent.manager, dist)
            self.template_installer.progress_changed.connect(
                self.set_progress_bar)
            self.template_installer.finished.connect(
                lambda: self.download_finished(dist))
            self.template_installer.start()
        else:
            self.download_finished(dist)

    def download_started(self):
        self.set_progress_bar(0, "Downloading: %p%")
        self.progressBar.show()
        self.cancelButton.show()
        self.downloadButton.hide()

    def download_cancelled(self):
        self.item.setSelected(True)
        self.state = DownloadState.WAITING
        self.progressBar.hide()
        self.cancelButton.hide()
        self.downloader.terminate()
        self.downloader.wait()
        self.downloadButton.show()

    def set_progress_bar(self, value, format):
        self.progressBar.setFormat(format)
        self.progressBar.setValue(value * 100)

    def download_finished(self, dist=None):
        self.state = DownloadState.WAITING

        if dist is not None:
            self.parent.draw_to_library(dist, True)
            self.parent.clear_temp()
            name = "{0} {1} {2}".format(self.subversionLabel.text(),
                                        self.branchLabel.text(),
                                        self.commitTimeLabel.text())
            self.parent.show_message(
                "Blender {0} download finished!".format(name),
                type=MessageType.DOWNLOADFINISHED)
            self.destroy()

    def destroy(self):
        if self.state == DownloadState.WAITING:
            self.list_widget.remove_item(self.item)