Skip to content

Commit 1ac8d84

Browse files
committed
Add initial third party repositories support
1 parent b0c1652 commit 1ac8d84

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

plugin_exporter/plugin_exporter.py

+34-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@
2424
from qgis.PyQt.QtCore import QSettings, QTranslator, QCoreApplication
2525
from qgis.PyQt.QtGui import QIcon
2626
from qgis.PyQt.QtWidgets import QAction, QLabel, QCheckBox
27-
from qgis.core import Qgis
28-
import qgis.utils
27+
from qgis.core import Qgis, QgsSettings
28+
from pyplugin_installer.installer_data import repositories
2929
import pyplugin_installer
30+
import qgis.utils
3031
import os.path
3132
import csv
3233
import json
@@ -289,6 +290,11 @@ def export_plugins(self):
289290
rows = table.rowCount()
290291
cols = table.columnCount()
291292

293+
if self.dlg.chk_core_plugins.isChecked():
294+
repos = repositories.allEnabled()
295+
else:
296+
repos = None
297+
292298
for row in range(rows):
293299
for col in range(cols):
294300
current_widget = table.cellWidget(row, col)
@@ -308,6 +314,12 @@ def export_plugins(self):
308314
keys = plugin_list[0].keys()
309315
dict_writer = csv.DictWriter(f, keys)
310316
dict_writer.writeheader()
317+
if repos:
318+
for key, value in repos.items():
319+
if key == 'QGIS Official Plugin Repository':
320+
pass
321+
else:
322+
dict_writer.writerow({'id': '-', 'name': key, 'zip_repository': value['url']})
311323
dict_writer.writerows(plugin_list)
312324
self.iface.messageBar().pushSuccess("Success", "Selected plugins were exported successfully.")
313325
elif file_format == '.json':
@@ -342,7 +354,6 @@ def import_plugins(self):
342354
input_file = self.dlg.file_input_import.filePath()
343355
file_extension = pathlib.Path(input_file).suffix
344356
installed_plugins = qgis.utils.available_plugins
345-
pyplugin_installer.instance().fetchAvailablePlugins(True)
346357

347358
if file_extension == '.csv':
348359
try:
@@ -376,13 +387,33 @@ def import_plugins(self):
376387
"Skipped " + plugin['name'] + " as it's already installed.")
377388
continue
378389
try:
390+
if plugin['id'] == '-': # It's a third party repository
391+
self.add_repository(plugin)
392+
pyplugin_installer.instance().fetchAvailablePlugins(True)
379393
pyplugin_installer.instance().installPlugin(plugin['id'])
380394
self.iface.messageBar().pushSuccess("Success", plugin['name'] + " was installed successfully.")
381395
except KeyError:
382396
self.iface.messageBar().pushMessage("Error",
383397
"Could not install " + plugin['name'] + ".",
384398
level=Qgis.Critical)
385399

400+
# This method is pretty much a copy of the addRepository function in
401+
# https://github.com/qgis/QGIS/blob/master/python/pyplugin_installer/installer.py
402+
def add_repository(self, repo_info):
403+
settings = QgsSettings()
404+
settings.beginGroup("app/plugin_repositories")
405+
reposName = repo_info['name']
406+
reposURL = repo_info['zip_repository']
407+
if reposName in repositories.all():
408+
reposName = reposName + "(2)"
409+
# add to settings
410+
settings.setValue(reposName + "/url", reposURL)
411+
settings.setValue(reposName + "/authcfg", "") #dlg.editAuthCfg.text().strip())
412+
settings.setValue(reposName + "/enabled", "True") #bool(dlg.checkBoxEnabled.checkState()))
413+
# refresh lists and populate widgets
414+
#plugins.removeRepository(reposName)
415+
pyplugin_installer.instance().reloadAndExportData()
416+
386417
# Disables and enables widgets
387418
def toggle_widget(self):
388419
if self.dlg.rd_import.isChecked():

plugin_exporter/plugin_exporter_dialog_base.ui

+20
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,16 @@
4444
</property>
4545
</widget>
4646
</item>
47+
<item row="0" column="1">
48+
<widget class="QCheckBox" name="chk_ext_repos">
49+
<property name="text">
50+
<string>Include third party repositories</string>
51+
</property>
52+
<property name="checked">
53+
<bool>true</bool>
54+
</property>
55+
</widget>
56+
</item>
4757
</layout>
4858
</widget>
4959
</item>
@@ -237,6 +247,16 @@
237247
</property>
238248
</widget>
239249
</item>
250+
<item row="0" column="2">
251+
<widget class="QCheckBox" name="chk_core_plugins">
252+
<property name="text">
253+
<string>Include core plugins</string>
254+
</property>
255+
<property name="checked">
256+
<bool>true</bool>
257+
</property>
258+
</widget>
259+
</item>
240260
</layout>
241261
</widget>
242262
</item>

0 commit comments

Comments
 (0)