81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
import threading
|
|
|
|
import sublime
|
|
import sublime_plugin
|
|
|
|
from ..show_error import show_error
|
|
from ..thread_progress import ThreadProgress
|
|
from ..package_installer import PackageInstaller, PackageInstallerThread
|
|
from ..package_renamer import PackageRenamer
|
|
|
|
|
|
class UpgradePackageCommand(sublime_plugin.WindowCommand):
|
|
"""
|
|
A command that presents the list of installed packages that can be upgraded
|
|
"""
|
|
|
|
def run(self):
|
|
package_renamer = PackageRenamer()
|
|
package_renamer.load_settings()
|
|
|
|
thread = UpgradePackageThread(self.window, package_renamer)
|
|
thread.start()
|
|
ThreadProgress(thread, 'Loading repositories', '')
|
|
|
|
|
|
class UpgradePackageThread(threading.Thread, PackageInstaller):
|
|
"""
|
|
A thread to run the action of retrieving upgradable packages in.
|
|
"""
|
|
|
|
def __init__(self, window, package_renamer):
|
|
"""
|
|
:param window:
|
|
An instance of :class:`sublime.Window` that represents the Sublime
|
|
Text window to show the list of upgradable packages in.
|
|
|
|
:param package_renamer:
|
|
An instance of :class:`PackageRenamer`
|
|
"""
|
|
self.window = window
|
|
self.package_renamer = package_renamer
|
|
self.completion_type = 'upgraded'
|
|
threading.Thread.__init__(self)
|
|
PackageInstaller.__init__(self)
|
|
|
|
def run(self):
|
|
self.package_renamer.rename_packages(self)
|
|
|
|
self.package_list = self.make_package_list(['install', 'reinstall',
|
|
'none'])
|
|
|
|
def show_quick_panel():
|
|
if not self.package_list:
|
|
show_error('There are no packages ready for upgrade')
|
|
return
|
|
self.window.show_quick_panel(self.package_list, self.on_done)
|
|
sublime.set_timeout(show_quick_panel, 10)
|
|
|
|
def on_done(self, picked):
|
|
"""
|
|
Quick panel user selection handler - disables a package, upgrades it,
|
|
then re-enables the package
|
|
|
|
:param picked:
|
|
An integer of the 0-based package name index from the presented
|
|
list. -1 means the user cancelled.
|
|
"""
|
|
|
|
if picked == -1:
|
|
return
|
|
name = self.package_list[picked][0]
|
|
|
|
if name in self.disable_packages(name):
|
|
on_complete = lambda: self.reenable_package(name)
|
|
else:
|
|
on_complete = None
|
|
|
|
thread = PackageInstallerThread(self.manager, name, on_complete)
|
|
thread.start()
|
|
ThreadProgress(thread, 'Upgrading package %s' % name,
|
|
'Package %s successfully %s' % (name, self.completion_type))
|