Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
G
gajim-plugins
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
gajim
gajim-plugins
Commits
76b9ef6b
Commit
76b9ef6b
authored
5 years ago
by
Philipp Hörist
Browse files
Options
Downloads
Patches
Plain Diff
[preview] Use account proxy if available
parent
e9769e0a
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
url_image_preview/url_image_preview.py
+65
-20
65 additions, 20 deletions
url_image_preview/url_image_preview.py
with
65 additions
and
20 deletions
url_image_preview/url_image_preview.py
+
65
−
20
View file @
76b9ef6b
...
@@ -35,6 +35,7 @@ from gajim.common.helpers import open_uri
...
@@ -35,6 +35,7 @@ from gajim.common.helpers import open_uri
from
gajim.common.helpers
import
write_file_async
from
gajim.common.helpers
import
write_file_async
from
gajim.common.helpers
import
load_file_async
from
gajim.common.helpers
import
load_file_async
from
gajim.common.helpers
import
get_tls_error_phrase
from
gajim.common.helpers
import
get_tls_error_phrase
from
gajim.common.helpers
import
get_user_proxy
from
gajim.gtk.dialogs
import
ErrorDialog
from
gajim.gtk.dialogs
import
ErrorDialog
from
gajim.gtk.filechoosers
import
FileSaveDialog
from
gajim.gtk.filechoosers
import
FileSaveDialog
from
gajim.gtk.util
import
load_icon
from
gajim.gtk.util
import
load_icon
...
@@ -119,11 +120,7 @@ class UrlImagePreviewPlugin(GajimPlugin):
...
@@ -119,11 +120,7 @@ class UrlImagePreviewPlugin(GajimPlugin):
'
VERIFY
'
:
(
True
,
''
),}
'
VERIFY
'
:
(
True
,
''
),}
self
.
_textviews
=
{}
self
.
_textviews
=
{}
self
.
_sessions
=
{}
self
.
_session
=
Soup
.
Session
()
self
.
_session
.
add_feature_by_type
(
Soup
.
ContentSniffer
)
self
.
_session
.
props
.
https_aliases
=
[
'
aesgcm
'
]
self
.
_session
.
props
.
ssl_strict
=
False
self
.
_orig_dir
=
Path
(
configpaths
.
get
(
'
MY_DATA
'
))
/
'
downloads
'
self
.
_orig_dir
=
Path
(
configpaths
.
get
(
'
MY_DATA
'
))
/
'
downloads
'
self
.
_thumb_dir
=
Path
(
configpaths
.
get
(
'
MY_CACHE
'
))
/
'
downloads.thumb
'
self
.
_thumb_dir
=
Path
(
configpaths
.
get
(
'
MY_CACHE
'
))
/
'
downloads.thumb
'
...
@@ -142,12 +139,18 @@ class UrlImagePreviewPlugin(GajimPlugin):
...
@@ -142,12 +139,18 @@ class UrlImagePreviewPlugin(GajimPlugin):
self
.
config
[
'
LEFTCLICK_ACTION
'
]
=
action
[:
-
9
]
self
.
config
[
'
LEFTCLICK_ACTION
'
]
=
action
[:
-
9
]
def
_on_connect_chat_control_base
(
self
,
chat_control
):
def
_on_connect_chat_control_base
(
self
,
chat_control
):
account
=
chat_control
.
account
if
account
not
in
self
.
_sessions
:
self
.
_sessions
[
account
]
=
self
.
_create_session
(
account
)
self
.
_textviews
[
chat_control
.
control_id
]
=
chat_control
.
conv_textview
self
.
_textviews
[
chat_control
.
control_id
]
=
chat_control
.
conv_textview
def
_on_disconnect_chat_control_base
(
self
,
chat_control
):
def
_on_disconnect_chat_control_base
(
self
,
chat_control
):
self
.
_textviews
.
pop
(
chat_control
.
control_id
,
None
)
self
.
_textviews
.
pop
(
chat_control
.
control_id
,
None
)
def
_on_connect_history_window
(
self
,
history_window
):
def
_on_connect_history_window
(
self
,
history_window
):
account
=
history_window
.
account
if
(
account
is
not
None
and
account
not
in
self
.
_sessions
):
self
.
_sessions
[
account
]
=
self
.
_create_session
(
account
)
self
.
_textviews
[
id
(
history_window
)]
=
history_window
.
history_textview
self
.
_textviews
[
id
(
history_window
)]
=
history_window
.
history_textview
def
_on_disconnect_history_window
(
self
,
history_window
):
def
_on_disconnect_history_window
(
self
,
history_window
):
...
@@ -158,6 +161,24 @@ class UrlImagePreviewPlugin(GajimPlugin):
...
@@ -158,6 +161,24 @@ class UrlImagePreviewPlugin(GajimPlugin):
if
textview
==
textview_
:
if
textview
==
textview_
:
return
control_id
return
control_id
def
_create_session
(
self
,
account
):
session
=
Soup
.
Session
()
session
.
add_feature_by_type
(
Soup
.
ContentSniffer
)
session
.
props
.
https_aliases
=
[
'
aesgcm
'
]
session
.
props
.
ssl_strict
=
False
proxy
=
get_user_proxy
(
account
)
if
proxy
is
None
:
resolver
=
None
else
:
resolver
=
proxy
.
get_resolver
()
session
.
props
.
proxy_resolver
=
resolver
return
session
,
resolver
def
_get_session
(
self
,
account
):
return
self
.
_sessions
[
account
][
0
]
def
_print_real_text
(
self
,
textview
,
text
,
_text_tags
,
_graphics
,
def
_print_real_text
(
self
,
textview
,
text
,
_text_tags
,
_graphics
,
iter_
,
additional_data
):
iter_
,
additional_data
):
...
@@ -182,7 +203,8 @@ class UrlImagePreviewPlugin(GajimPlugin):
...
@@ -182,7 +203,8 @@ class UrlImagePreviewPlugin(GajimPlugin):
preview
=
self
.
_process_geo_uri
(
uri
,
preview
=
self
.
_process_geo_uri
(
uri
,
start_mark
,
start_mark
,
end_mark
,
end_mark
,
control_id
)
control_id
,
textview
.
account
)
if
preview
is
None
:
if
preview
is
None
:
return
return
pixbuf
=
load_icon
(
'
map
'
,
pixbuf
=
load_icon
(
'
map
'
,
...
@@ -196,7 +218,8 @@ class UrlImagePreviewPlugin(GajimPlugin):
...
@@ -196,7 +218,8 @@ class UrlImagePreviewPlugin(GajimPlugin):
urlparts
,
urlparts
,
start_mark
,
start_mark
,
end_mark
,
end_mark
,
control_id
)
control_id
,
textview
.
account
)
if
not
preview
.
orig_exists
():
if
not
preview
.
orig_exists
():
self
.
_download_content
(
preview
)
self
.
_download_content
(
preview
)
...
@@ -257,7 +280,11 @@ class UrlImagePreviewPlugin(GajimPlugin):
...
@@ -257,7 +280,11 @@ class UrlImagePreviewPlugin(GajimPlugin):
return
False
return
False
@staticmethod
@staticmethod
def
_process_geo_uri
(
uri
,
start_mark
,
end_mark
,
control_id
):
def
_process_geo_uri
(
uri
,
start_mark
,
end_mark
,
control_id
,
account
):
try
:
try
:
split_geo_uri
(
uri
)
split_geo_uri
(
uri
)
except
Exception
as
error
:
except
Exception
as
error
:
...
@@ -272,9 +299,17 @@ class UrlImagePreviewPlugin(GajimPlugin):
...
@@ -272,9 +299,17 @@ class UrlImagePreviewPlugin(GajimPlugin):
start_mark
,
start_mark
,
end_mark
,
end_mark
,
96
,
96
,
control_id
)
control_id
,
account
)
def
_process_web_uri
(
self
,
uri
,
urlparts
,
start_mark
,
end_mark
,
control_id
,
account
):
def
_process_web_uri
(
self
,
uri
,
urlparts
,
start_mark
,
end_mark
,
control_id
):
size
=
self
.
config
[
'
PREVIEW_SIZE
'
]
size
=
self
.
config
[
'
PREVIEW_SIZE
'
]
orig_path
,
thumb_path
=
get_image_paths
(
uri
,
orig_path
,
thumb_path
=
get_image_paths
(
uri
,
urlparts
,
urlparts
,
...
@@ -288,7 +323,8 @@ class UrlImagePreviewPlugin(GajimPlugin):
...
@@ -288,7 +323,8 @@ class UrlImagePreviewPlugin(GajimPlugin):
start_mark
,
start_mark
,
end_mark
,
end_mark
,
size
,
size
,
control_id
)
control_id
,
account
)
def
_on_orig_load_finished
(
self
,
data
,
error
,
preview
):
def
_on_orig_load_finished
(
self
,
data
,
error
,
preview
):
if
data
is
None
:
if
data
is
None
:
...
@@ -312,13 +348,19 @@ class UrlImagePreviewPlugin(GajimPlugin):
...
@@ -312,13 +348,19 @@ class UrlImagePreviewPlugin(GajimPlugin):
self
.
_update_textview
(
pixbuf
,
preview
)
self
.
_update_textview
(
pixbuf
,
preview
)
def
_download_content
(
self
,
preview
):
def
_download_content
(
self
,
preview
):
if
preview
.
account
is
None
:
# History Window can be opened without account context
# This means we can not apply proxy settings
return
log
.
info
(
'
Start downloading: %s
'
,
preview
.
request_uri
)
log
.
info
(
'
Start downloading: %s
'
,
preview
.
request_uri
)
message
=
Soup
.
Message
.
new
(
'
GET
'
,
preview
.
request_uri
)
message
=
Soup
.
Message
.
new
(
'
GET
'
,
preview
.
request_uri
)
message
.
connect
(
'
starting
'
,
self
.
_check_certificate
)
message
.
connect
(
'
starting
'
,
self
.
_check_certificate
,
preview
)
message
.
connect
(
'
content-sniffed
'
,
self
.
_on_content_sniffed
)
message
.
connect
(
'
content-sniffed
'
,
self
.
_on_content_sniffed
,
preview
)
self
.
_session
.
queue_message
(
message
,
self
.
_on_finished
,
preview
)
session
=
self
.
_get_session
(
preview
.
account
)
session
.
queue_message
(
message
,
self
.
_on_finished
,
preview
)
def
_check_certificate
(
self
,
message
):
def
_check_certificate
(
self
,
message
,
preview
):
_https_used
,
_tls_certificate
,
tls_errors
=
message
.
get_https_status
()
_https_used
,
_tls_certificate
,
tls_errors
=
message
.
get_https_status
()
if
not
self
.
config
[
'
VERIFY
'
]:
if
not
self
.
config
[
'
VERIFY
'
]:
...
@@ -327,21 +369,23 @@ class UrlImagePreviewPlugin(GajimPlugin):
...
@@ -327,21 +369,23 @@ class UrlImagePreviewPlugin(GajimPlugin):
if
tls_errors
:
if
tls_errors
:
phrase
=
get_tls_error_phrase
(
tls_errors
)
phrase
=
get_tls_error_phrase
(
tls_errors
)
log
.
warning
(
'
TLS verification failed: %s
'
,
phrase
)
log
.
warning
(
'
TLS verification failed: %s
'
,
phrase
)
self
.
_session
.
cancel_message
(
message
,
Soup
.
Status
.
CANCELLED
)
session
=
self
.
_get_session
(
preview
.
account
)
session
.
cancel_message
(
message
,
Soup
.
Status
.
CANCELLED
)
return
return
def
_on_content_sniffed
(
self
,
message
,
type_
,
_params
):
def
_on_content_sniffed
(
self
,
message
,
type_
,
_params
,
preview
):
size
=
message
.
props
.
response_headers
.
get_content_length
()
size
=
message
.
props
.
response_headers
.
get_content_length
()
uri
=
message
.
props
.
uri
.
to_string
(
False
)
uri
=
message
.
props
.
uri
.
to_string
(
False
)
session
=
self
.
_get_session
(
preview
.
account
)
if
type_
not
in
ACCEPTED_MIME_TYPES
:
if
type_
not
in
ACCEPTED_MIME_TYPES
:
log
.
info
(
'
Not allowed content type: %s, %s
'
,
type_
,
uri
)
log
.
info
(
'
Not allowed content type: %s, %s
'
,
type_
,
uri
)
self
.
_
session
.
cancel_message
(
message
,
Soup
.
Status
.
CANCELLED
)
session
.
cancel_message
(
message
,
Soup
.
Status
.
CANCELLED
)
return
return
if
size
==
0
or
size
>
int
(
self
.
config
[
'
MAX_FILE_SIZE
'
]):
if
size
==
0
or
size
>
int
(
self
.
config
[
'
MAX_FILE_SIZE
'
]):
log
.
info
(
'
File size (%s) too big or unknown (zero) for URL:
\'
%s
\'
'
,
log
.
info
(
'
File size (%s) too big or unknown (zero) for URL:
\'
%s
\'
'
,
size
,
uri
)
size
,
uri
)
self
.
_
session
.
cancel_message
(
message
,
Soup
.
Status
.
CANCELLED
)
session
.
cancel_message
(
message
,
Soup
.
Status
.
CANCELLED
)
return
return
def
_on_finished
(
self
,
_session
,
message
,
preview
):
def
_on_finished
(
self
,
_session
,
message
,
preview
):
...
@@ -499,7 +543,7 @@ class UrlImagePreviewPlugin(GajimPlugin):
...
@@ -499,7 +543,7 @@ class UrlImagePreviewPlugin(GajimPlugin):
class
Preview
:
class
Preview
:
def
__init__
(
self
,
uri
,
urlparts
,
orig_path
,
thumb_path
,
def
__init__
(
self
,
uri
,
urlparts
,
orig_path
,
thumb_path
,
start_mark
,
end_mark
,
size
,
control_id
):
start_mark
,
end_mark
,
size
,
control_id
,
account
):
self
.
_uri
=
uri
self
.
_uri
=
uri
self
.
_urlparts
=
urlparts
self
.
_urlparts
=
urlparts
self
.
_filename
=
filename_from_uri
(
self
.
_uri
)
self
.
_filename
=
filename_from_uri
(
self
.
_uri
)
...
@@ -510,6 +554,7 @@ class Preview:
...
@@ -510,6 +554,7 @@ class Preview:
self
.
start_mark
=
start_mark
self
.
start_mark
=
start_mark
self
.
end_mark
=
end_mark
self
.
end_mark
=
end_mark
self
.
thumbnail
=
None
self
.
thumbnail
=
None
self
.
account
=
account
self
.
key
,
self
.
iv
=
None
,
None
self
.
key
,
self
.
iv
=
None
,
None
if
self
.
is_aes_encrypted
:
if
self
.
is_aes_encrypted
:
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment