FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cefpython/cefpython/download_handler.pyx at cefpython31 · pythonthings/cefpython · GitHub
pythonthings
cefpython
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cefpython
/
cefpython
/
download_handler.pyx
Copy path
More file actions
More file actions
Latest commit
History
History
History
99 lines (87 loc) · 4.04 KB
Breadcrumbs
cefpython
/
cefpython
/
download_handler.pyx
Copy path
File metadata and controls
99 lines (87 loc) · 4.04 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
#
Copyright (c) 2012-2014 The CEF Python authors. All rights reserved.
#
License: New BSD License.
#
Website: http://code.google.com/p/cefpython/
#
------------------------------------------------------------------------------
#
Globals
#
------------------------------------------------------------------------------
cdef
object
g_userDownloadHandlers
=
weakref.WeakValueDictionary()
cdef
int
g_userDownloadHandlerMaxId
=
0
#
------------------------------------------------------------------------------
#
PyDownloadHandler
#
------------------------------------------------------------------------------
cdef CefRefPtr[CefDownloadHandler] StoreUserDownloadHandler(
object
userDownloadHandler)
except
*
:
ValidateUserDownloadHandler(userDownloadHandler)
global
g_userDownloadHandlerMaxId
global
g_userDownloadHandlers
g_userDownloadHandlerMaxId
+=
1
g_userDownloadHandlers[g_userDownloadHandlerMaxId]
=
userDownloadHandler
cdef CefRefPtr[CefDownloadHandler] downloadHandler
=
(
<
CefRefPtr[CefDownloadHandler]?
>
new DownloadHandler(
g_userDownloadHandlerMaxId))
return
downloadHandler
cdef
object
GetPyDownloadHandler(
int
downloadHandlerId):
global
g_userDownloadHandlers
cdef
object
userDownloadHandler
cdef PyDownloadHandler pyDownloadHandler
if
downloadHandlerId
in
g_userDownloadHandlers:
userDownloadHandler
=
g_userDownloadHandlers[downloadHandlerId]
pyDownloadHandler
=
PyDownloadHandler(userDownloadHandler)
return
pyDownloadHandler
cdef
void
ValidateUserDownloadHandler(
object
handler)
except
*
:
assert
handler,
"
DownloadHandler is empty
"
has_OnData
=
hasattr
(handler,
"
OnData
"
)
and
(
callable
(
getattr
(handler,
"
OnData
"
)))
has_OnComplete
=
hasattr
(handler,
"
OnComplete
"
)
and
(
callable
(
getattr
(handler,
"
OnComplete
"
)))
assert
has_OnData,
"
DownloadHandler is missing OnData() method
"
assert
has_OnComplete,
"
DownloadHandler is missing OnComplete() method
"
cdef
class
PyDownloadHandler:
cdef
object
userDownloadHandler
def
__init__
(
self
, object
userDownloadHandler
):
assert
not
isinstance
(userDownloadHandler,
int
), (
"
DownloadHandler is not a valid object
"
)
self
.userDownloadHandler
=
userDownloadHandler
cdef
object
GetCallback(
self
,
str
funcName):
if
self
.userDownloadHandler
and
(
hasattr
(
self
.userDownloadHandler, funcName)
and
(
callable
(
getattr
(
self
.userDownloadHandler, funcName)))):
return
getattr
(
self
.userDownloadHandler, funcName)
#
------------------------------------------------------------------------------
#
C++ DownloadHandler
#
------------------------------------------------------------------------------
cdef public cpp_bool DownloadHandler_ReceivedData(
int
downloadHandlerId,
void
*
data,
int
data_size
)
except
*
with
gil:
cdef PyDownloadHandler pyDownloadHandler
cdef
object
callback
cdef py_bool ret
try
:
assert
IsThread(TID_UI),
"
Must be called on the UI thread
"
pyDownloadHandler
=
GetPyDownloadHandler(downloadHandlerId)
if
pyDownloadHandler:
callback
=
pyDownloadHandler.GetCallback(
"
OnData
"
)
if
callback:
ret
=
callback(VoidPtrToString(data, data_size))
return
bool
(ret)
return
False
except
:
(exc_type, exc_value, exc_trace)
=
sys.exc_info()
sys.excepthook(exc_type, exc_value, exc_trace)
cdef public
void
DownloadHandler_Complete(
int
downloadHandlerId
)
except
*
with
gil:
cdef PyDownloadHandler pyDownloadHandler
cdef
object
callback
try
:
assert
IsThread(TID_UI),
"
Must be called on the UI thread
"
pyDownloadHandler
=
GetPyDownloadHandler(downloadHandlerId)
if
pyDownloadHandler:
callback
=
pyDownloadHandler.GetCallback(
"
OnComplete
"
)
if
callback:
callback()
except
:
(exc_type, exc_value, exc_trace)
=
sys.exc_info()
sys.excepthook(exc_type, exc_value, exc_trace)
Back
|
FazBrowse Home
|
New Git URL