-
Notifications
You must be signed in to change notification settings - Fork 3
/
shortcut_utils.py
111 lines (89 loc) · 3.76 KB
/
shortcut_utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# -*- coding: utf-8 -*-
"""
/***************************************************************************
ShortcutManagerDialog
A QGIS plugin
This plugin create shortcuts in toolbar
-------------------
begin : 2014-07-18
git sha : $Format:%H$
copyright : (C) 2014 by NextGIS
email : [email protected]
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
"""
import os
import sys
from qgis.PyQt import QtCore
from qgis.PyQt.QtGui import QIcon, QPixmap, QImage
from qgis.PyQt.QtWidgets import QFileIconProvider
from .__init__ import default_icons_dir
def getShortcutIcon(iconPath=None, uri=None):
if iconPath is not None:
if os.path.exists(iconPath):
return QIcon(iconPath)
elif os.path.exists(os.path.join(default_icons_dir, iconPath)):
return QIcon(os.path.join(default_icons_dir, iconPath))
elif uri is not None:
shortcutIcon = getIconByURL(getShortcutType(uri), uri)
if shortcutIcon is None:
return getDefaultIcon(getShortcutType(uri))
else:
return shortcutIcon
return getDefaultIcon(getShortcutType(None))
def getDefaultIcon(shortcutType):
if shortcutType == "desktop":
# icon_path = os.path.join(defaultIconPath, "default-shortcut-desk.png")
icon_path = ":/ShortcutManager/icons/default-shortcut-desk.png"
elif shortcutType == "web":
# icon_path = os.path.join(defaultIconPath, "default-shortcut-web.png")
icon_path = ":/ShortcutManager/icons/default-shortcut-web.png"
else:
# icon_path = os.path.join(defaultIconPath, "default-shortcut.png")
icon_path = ":/ShortcutManager/icons/default-shortcut.png"
return QIcon(icon_path)
def getIconByURL(shortcutType, uri):
if shortcutType == "desktop":
return _getAppIcon(uri)
elif shortcutType == "web":
return _getWebFavIcon(uri)
def _getAppIcon(app):
if sys.platform == "win32":
full_path_app = app
if not os.path.exists(app):
path_env_dirs = os.getenv("PATH").split(";")
for dir in path_env_dirs:
full_path_app = os.path.join(dir, app)
if os.path.exists(full_path_app):
break
else:
return None
fileInfo = QtCore.QFileInfo(full_path_app)
fileIconProvicer = QFileIconProvider()
return fileIconProvicer.icon(fileInfo)
else:
return None
def _getWebFavIcon(url):
from .favicon import find_favicon_from_url
import requests
shortcutURL = find_favicon_from_url(url)
if shortcutURL is not None:
r = requests.get(shortcutURL)
return QIcon(QPixmap.fromImage(QImage.fromData(r.content)))
else:
return None
def getShortcutType(uri):
if uri is None:
return "unknown"
if uri[0:7] == "http://":
shortcutType = "web"
else:
shortcutType = "desktop"
return shortcutType