Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
BC
public
liblinphone
Commits
a399cb05
Commit
a399cb05
authored
Aug 23, 2017
by
Erwan Croze
👋🏻
Browse files
Fix C# wrapper for UWP
parent
6df37d30
Changes
2
Hide whitespace changes
Inline
Side-by-side
wrappers/csharp/genwrapper.py
View file @
a399cb05
#!/usr/bin/python
# Copyright (C) 2017 Belledonne Communications SARL
#
#
# 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.
#
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
...
...
@@ -58,7 +58,7 @@ class CsharpTranslator(object):
def
translate_method_name
(
self
,
name
,
recursive
=
False
,
topAncestor
=
None
):
translatedName
=
name
.
to_camel_case
(
lower
=
True
)
if
name
.
prev
is
None
or
not
recursive
or
name
.
prev
is
topAncestor
:
return
translatedName
...
...
@@ -129,7 +129,7 @@ class CsharpTranslator(object):
return
False
if
dllImport
else
True
elif
type
(
_type
)
is
AbsApi
.
EnumType
:
return
False
if
dllImport
else
True
def
translate_type
(
self
,
_type
,
isArg
,
dllImport
=
True
):
if
type
(
_type
)
is
AbsApi
.
EnumType
:
if
dllImport
and
isArg
:
...
...
@@ -156,10 +156,10 @@ class CsharpTranslator(object):
raise
AbsApi
.
Error
(
'translation of bctbx_list_t of enums'
)
else
:
raise
AbsApi
.
Error
(
'translation of bctbx_list_t of unknow type !'
)
def
translate_argument
(
self
,
arg
,
dllImport
=
True
):
return
'{0} {1}'
.
format
(
self
.
translate_type
(
arg
.
type
,
True
,
dllImport
),
self
.
translate_argument_name
(
arg
.
name
))
def
throws_exception
(
self
,
return_type
):
if
type
(
return_type
)
is
AbsApi
.
BaseType
:
if
return_type
.
name
==
'status'
:
...
...
@@ -178,7 +178,7 @@ class CsharpTranslator(object):
if
arg
is
not
method
.
args
[
0
]
or
not
static
:
methodElems
[
'params'
]
+=
', '
methodElems
[
'params'
]
+=
self
.
translate_argument
(
arg
)
methodDict
=
{}
methodDict
[
'prototype'
]
=
"static extern {return} {name}({params});"
.
format
(
**
methodElems
)
...
...
@@ -235,7 +235,7 @@ class CsharpTranslator(object):
methodDict
[
'impl'
][
'args'
]
+=
self
.
translate_argument
(
arg
,
False
)
return
methodDict
###########################################################################################################################################
def
translate_property_getter
(
self
,
prop
,
name
,
static
=
False
):
...
...
@@ -311,7 +311,7 @@ class CsharpTranslator(object):
methodDict
[
'setter_c_name'
]
=
methodDictSet
[
'setter_c_name'
]
return
methodDict
def
translate_property
(
self
,
prop
):
res
=
[]
name
=
prop
.
name
.
to_camel_case
()
...
...
@@ -323,7 +323,7 @@ class CsharpTranslator(object):
elif
prop
.
setter
is
not
None
:
res
.
append
(
self
.
translate_property_setter
(
prop
.
setter
,
name
))
return
res
###########################################################################################################################################
def
translate_listener
(
self
,
_class
,
method
):
...
...
@@ -350,7 +350,7 @@ class CsharpTranslator(object):
listenerDict
[
'delegate'
][
'interfaceClassName'
]
=
listenedClass
.
name
.
to_camel_case
()
listenerDict
[
'delegate'
][
'isSimpleListener'
]
=
not
listenedClass
.
multilistener
listenerDict
[
'delegate'
][
'isMultiListener'
]
=
listenedClass
.
multilistener
listenerDict
[
'delegate'
][
'params_public'
]
=
""
listenerDict
[
'delegate'
][
'params_private'
]
=
""
listenerDict
[
'delegate'
][
'params'
]
=
""
...
...
@@ -378,7 +378,7 @@ class CsharpTranslator(object):
else
:
listenerDict
[
'delegate'
][
'first_param'
]
=
argName
listenerDict
[
'delegate'
][
'params'
]
=
'thiz'
listenerDict
[
'delegate'
][
'params_public'
]
+=
normalType
+
" "
+
argName
listenerDict
[
'delegate'
][
'params_private'
]
+=
dllImportType
+
" "
+
argName
...
...
@@ -434,7 +434,7 @@ class CsharpTranslator(object):
methodDict
[
'is_generic'
]
=
True
return
methodDict
###########################################################################################################################################
def
translate_enum
(
self
,
enum
):
...
...
@@ -470,6 +470,8 @@ class CsharpTranslator(object):
classDict
=
{}
classDict
[
'className'
]
=
_class
.
name
.
to_camel_case
()
classDict
[
'isLinphoneFactory'
]
=
_class
.
name
.
to_camel_case
()
==
"Factory"
classDict
[
'isLinphoneCall'
]
=
_class
.
name
.
to_camel_case
()
==
"Call"
classDict
[
'isLinphoneCore'
]
=
_class
.
name
.
to_camel_case
()
==
"Core"
classDict
[
'doc'
]
=
self
.
docTranslator
.
translate
(
_class
.
briefDescription
)
classDict
[
'dllImports'
]
=
[]
...
...
@@ -482,12 +484,12 @@ class CsharpTranslator(object):
else
:
classDict
[
'dllImports'
].
append
(
self
.
generate_add_for_listener_callbacks
(
_class
,
listenerName
))
classDict
[
'dllImports'
].
append
(
self
.
generate_remove_for_listener_callbacks
(
_class
,
listenerName
))
for
method
in
_class
.
classMethods
:
try
:
if
'get'
in
method
.
name
.
to_word_list
():
methodDict
=
self
.
translate_property_getter
(
method
,
method
.
name
.
to_camel_case
(),
True
)
#The following doesn't work because there a at least one method that has both getter and setter,
#The following doesn't work because there a at least one method that has both getter and setter,
#and because it doesn't do both of them at once, property is declared twice
#elif 'set' in method.name.to_word_list():
# methodDict = self.translate_property_setter(method, method.name.to_camel_case(), True)
...
...
@@ -521,7 +523,7 @@ class CsharpTranslator(object):
interfaceDict
[
'methods'
]
=
[]
for
method
in
interface
.
methods
:
interfaceDict
[
'methods'
].
append
(
self
.
translate_listener
(
interface
,
method
))
return
interfaceDict
###########################################################################################################################################
...
...
@@ -549,7 +551,7 @@ class WrapperImpl(object):
self
.
enums
=
enums
self
.
interfaces
=
interfaces
self
.
classes
=
classes
###########################################################################################################################################
def
render
(
renderer
,
item
,
path
):
...
...
@@ -569,21 +571,29 @@ def main():
argparser
.
add_argument
(
'-o --output'
,
type
=
str
,
help
=
'the directory where to generate the source files'
,
dest
=
'outputdir'
,
default
=
'.'
)
argparser
.
add_argument
(
'-n --name'
,
type
=
str
,
help
=
'the name of the genarated source file'
,
dest
=
'outputfile'
,
default
=
'LinphoneWrapper.cs'
)
args
=
argparser
.
parse_args
()
entries
=
os
.
listdir
(
args
.
outputdir
)
project
=
CApi
.
Project
()
project
.
initFromDir
(
args
.
xmldir
)
project
.
check
()
parser
=
AbsApi
.
CParser
(
project
)
parser
.
functionBl
=
[
'linphone_vcard_get_belcard'
,
'linphone_core_get_current_vtable'
]
parser
.
functionBl
=
\
[
'linphone_vcard_get_belcard'
,
\
'linphone_core_get_current_vtable'
,
\
'linphone_call_set_native_video_window_id'
,
\
'linphone_call_get_native_video_window_id'
,
\
'linphone_core_get_native_preview_window_id'
,
\
'linphone_core_set_native_preview_window_id'
,
\
'linphone_core_set_native_video_window_id'
,
\
'linphone_core_get_native_video_window_id'
]
parser
.
classBl
+=
'LinphoneCoreVTable'
parser
.
methodBl
.
remove
(
'getCurrentCallbacks'
)
parser
.
parse_all
()
translator
=
CsharpTranslator
()
renderer
=
pystache
.
Renderer
()
enums
=
[]
for
item
in
parser
.
enumsIndex
.
items
():
if
item
[
1
]
is
not
None
:
...
...
@@ -610,4 +620,4 @@ def main():
render
(
renderer
,
wrapper
,
args
.
outputdir
+
"/"
+
args
.
outputfile
)
if
__name__
==
'__main__'
:
main
()
\ No newline at end of file
main
()
wrappers/csharp/wrapper_impl.mustache
View file @
a399cb05
...
...
@@ -376,6 +376,62 @@ namespace Linphone
return fromNativePtr
<CoreListener>
(coreCbsPtr, false);
}
{{/
isLinphoneFactory
}}
{{#
isLinphoneCall
}}
[DllImport(LinphoneWrapper.LIB_NAME)]
static extern IntPtr linphone_call_get_native_video_window_id(IntPtr thiz);
[DllImport(LinphoneWrapper.LIB_NAME)]
static extern void linphone_call_set_native_video_window_id(IntPtr thiz, IntPtr id);
/// Get the native window handle of the video window, casted as an unsigned long.
public string NativeVideoWindowId
{
get
{
return Marshal.PtrToStringUni(linphone_call_get_native_video_window_id(nativePtr));
}
set
{
linphone_call_set_native_video_window_id(nativePtr, Marshal.StringToHGlobalUni(value));
}
}
{{/
isLinphoneCall
}}
{{#
isLinphoneCore
}}
[DllImport(LinphoneWrapper.LIB_NAME)]
static extern IntPtr linphone_core_get_native_video_window_id(IntPtr thiz);
[DllImport(LinphoneWrapper.LIB_NAME)]
static extern void linphone_core_set_native_video_window_id(IntPtr thiz, IntPtr id);
/// Get the native window handle of the video window.
public string NativeVideoWindowId
{
get
{
return Marshal.PtrToStringUni(linphone_core_get_native_video_window_id(nativePtr));
}
set
{
linphone_core_set_native_video_window_id(nativePtr, Marshal.StringToHGlobalUni(value));
}
}
[DllImport(LinphoneWrapper.LIB_NAME)]
static extern IntPtr linphone_core_get_native_preview_window_id(IntPtr thiz);
[DllImport(LinphoneWrapper.LIB_NAME)]
static extern void linphone_core_set_native_preview_window_id(IntPtr thiz, IntPtr id);
/// Get the native window handle of the video preview window.
public string NativePreviewWindowId
{
get
{
return Marshal.PtrToStringUni(linphone_core_get_native_preview_window_id(nativePtr));
}
set
{
linphone_core_set_native_preview_window_id(nativePtr, Marshal.StringToHGlobalUni(value));
}
}
{{/
isLinphoneCore
}}
{{#
dllImports
}}
[DllImport(LinphoneWrapper.LIB_NAME)]
{{{
prototype
}}}
...
...
@@ -400,7 +456,7 @@ namespace Linphone
return Marshal.PtrToStringAnsi(stringPtr);
{{/
is_string
}}
{{#
is_bool
}}
return
{{
getter_c_name
}}
(
{{
getter_nativePtr
}}
)
=
=
1
;
return
{{
getter_c_name
}}
(
{{
getter_nativePtr
}}
)
!
=
0
;
{{/
is_bool
}}
{{#
is_class
}}
IntPtr ptr =
{{
getter_c_name
}}
(
{{
getter_nativePtr
}}
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment