Sun, 13 May 2018 12:57:00 +0200
URL handling: redirected the URL handling for 'http' and 'https' URLs to the main user interface and the man web browser interface (for standalone web browsers).
1953
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
6048
82ad8ec9548c
Updated copyright for 2018.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5389
diff
changeset
|
3 | # Copyright (c) 2012 - 2018 Detlev Offenbach <detlev@die-offenbachs.de> |
1953
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing some global helper functions. |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
3145
a9de05d4a22f
# __IGNORE_WARNING__ added/ removed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3057
diff
changeset
|
10 | from __future__ import unicode_literals |
2525
8b507a9a2d40
Script changes: Future import added, super calls modified and unicode behavior for str.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2302
diff
changeset
|
11 | |
1953
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | import os |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | |
3656
441956d8fce5
Started porting eric5 to PyQt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3178
diff
changeset
|
14 | from PyQt5.QtCore import QUrl |
1953
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | def getFileNameFromUrl(url): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | Module function to generate a file name based on the given URL. |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | @param url URL (QUrl) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | @return file name (string) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | """ |
2107
1690f30db6f3
Reverted the "ComponentFormattingOptions" changes done for Qt5 because PyQt4 has changed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2087
diff
changeset
|
24 | fileName = url.toString(QUrl.RemoveFragment | QUrl.RemoveQuery | |
1690f30db6f3
Reverted the "ComponentFormattingOptions" changes done for Qt5 because PyQt4 has changed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2087
diff
changeset
|
25 | QUrl.RemoveScheme | QUrl.RemovePort) |
1953
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | if fileName.find("/") != -1: |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | pos = fileName.rfind("/") |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | fileName = fileName[pos:] |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | fileName = fileName.replace("/", "") |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | fileName = filterCharsFromFilename(fileName) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | if not fileName: |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | fileName = filterCharsFromFilename(url.host().replace(".", "_")) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | return fileName |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | def filterCharsFromFilename(name): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | Module function to filter illegal characters. |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | @param name name to be sanitized (string) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | @return sanitized name (string) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | return name\ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | .replace("/", "_")\ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | .replace("\\", "")\ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | .replace(":", "")\ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | .replace("*", "")\ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | .replace("?", "")\ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | .replace('"', "")\ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | .replace("<", "")\ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | .replace(">", "")\ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | .replace("|", "") |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | def ensureUniqueFilename(name, appendFormat="({0})"): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | Module function to generate an unique file name based on a pattern. |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | @param name desired file name (string) |
2999
28c75409a78f
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
63 | @param appendFormat format pattern to be used to make the unique name |
28c75409a78f
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
64 | (string) |
1953
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | @return unique file name |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | if not os.path.exists(name): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | return name |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | tmpFileName = name |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | i = 1 |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | while os.path.exists(tmpFileName): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | tmpFileName = name |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | index = tmpFileName.rfind(".") |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | appendString = appendFormat.format(i) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | if index == -1: |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | tmpFileName += appendString |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | else: |
2999
28c75409a78f
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
80 | tmpFileName = tmpFileName[:index] + appendString + \ |
28c75409a78f
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
81 | tmpFileName[index:] |
1953
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | i += 1 |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | return tmpFileName |
4318
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
85 | |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
86 | |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
87 | def parseContentDisposition(reply): |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
88 | """ |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
89 | Function to parse a content disposition header. |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
90 | |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
91 | @param reply network reply to be parsed |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
92 | @type QNetworkReply |
4332
64034d85c709
Corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4326
diff
changeset
|
93 | @return file name parsed from a content disposition header |
64034d85c709
Corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4326
diff
changeset
|
94 | @rtype str |
4318
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
95 | """ |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
96 | path = "" |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
97 | # step 1: check the content disposition header for a file name |
4326
e52318f11812
Change code to make eric compatible to PyQt 5.5 (QByteArry issue).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4318
diff
changeset
|
98 | if reply.hasRawHeader(b"Content-Disposition"): |
4318
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
99 | from E5Network.E5RFC6266 import parse_headers |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
100 | contentDisposition = parse_headers( |
4326
e52318f11812
Change code to make eric compatible to PyQt 5.5 (QByteArry issue).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4318
diff
changeset
|
101 | bytes(reply.rawHeader(b"Content-Disposition"))) |
4318
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
102 | path = contentDisposition.filename() |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
103 | # step 2: get file name from URL |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
104 | if not path: |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
105 | path = reply.url().path() |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
106 | # step 3: give a generic file name |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
107 | if not path: |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
108 | path = "unnamed_download" |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
109 | |
c2f374ca452b
Improved parsing of the content disposition header analog to the way it is done in qutebrowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
110 | return os.path.basename(path) |