minor update
This commit is contained in:
parent
c8e0adcb3e
commit
403f5e7468
17
README.md
17
README.md
@ -1,12 +1,12 @@
|
||||
# toxygen_wrapper
|
||||
|
||||
ctypes wrapping of [Tox](https://tox.chat/) libtoxcore
|
||||
<https://github.com/TokTok/c-toxcore>
|
||||
into Python. Taken from the wrapper directory of the now abandoned
|
||||
<https://github.com/TokTok/c-toxcore> into Python.
|
||||
Taken from the wrapper directory of the now abandoned
|
||||
<https://github.com/toxygen-project/toxygen> `next_gen` branch
|
||||
by Ingvar.
|
||||
|
||||
The basics of NGC groups are supported.
|
||||
The basics of NGC groups are supported, as well as AV and toxencryptsave.
|
||||
|
||||
## Install
|
||||
|
||||
@ -22,7 +22,7 @@ No prerequisites in Python3.
|
||||
There are a number of other wrappings into Python of Tox core.
|
||||
This one uses CTYPES which has its merits - there is no need to
|
||||
recompile anything as with Cython - change the Python file and it's done.
|
||||
CTYPES code can be brittle, segfaulting if you got things wrong,
|
||||
CTYPES code can be brittle, segfaulting if you've got things wrong,
|
||||
but if your wrapping is right, it is very efficient and easy to work on.
|
||||
|
||||
Others include:
|
||||
@ -30,11 +30,12 @@ Others include:
|
||||
* <https://github.com/TokTok/py-toxcore-c> Cython bindings.
|
||||
Incomplete and not really actively supported. Maybe it will get
|
||||
worked on in the future, but TokTok seems to be working on
|
||||
java, rust, go, etc. bindings instead.
|
||||
java, rust, scalla, go, etc. bindings instead.
|
||||
No support for NGC groups or toxencryptsave.
|
||||
|
||||
* <https://github.com/oxij/PyTox>
|
||||
forked from https://github.com/aitjcize/PyTox
|
||||
by Wei-Ning Huang <aitjcize@gmail.com>.
|
||||
Abandonned. Hardcore C wrapping which is not easy to keep up to date.
|
||||
|
||||
|
||||
Hardcore C wrapping which is not easy to keep up to date.
|
||||
No support for NGC or toxencryptsave. Abandonned.
|
||||
This was the basis for the TokTok/py-toxcore-c code until recently.
|
||||
|
5
wrapper/__init__.py
Normal file
5
wrapper/__init__.py
Normal file
@ -0,0 +1,5 @@
|
||||
# -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*-
|
||||
# You need a libs directory beside this directory
|
||||
# and you need to link your libtoxcore.so and libtoxav.so
|
||||
# and libtoxencryptsave.so into ../libs/
|
||||
# Link all 3 to libtoxcore.so if you have only libtoxcore.so
|
@ -1,4 +1,5 @@
|
||||
# -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import sys
|
||||
from ctypes import CDLL
|
||||
|
@ -1,14 +1,16 @@
|
||||
# -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*-
|
||||
from ctypes import *
|
||||
from datetime import datetime
|
||||
import logging
|
||||
|
||||
from wrapper.toxcore_enums_and_consts import *
|
||||
from wrapper.toxav import ToxAV
|
||||
from wrapper.libtox import LibToxCore
|
||||
try:
|
||||
from wrapper.toxcore_enums_and_consts import *
|
||||
from wrapper.toxav import ToxAV
|
||||
from wrapper.libtox import LibToxCore
|
||||
except:
|
||||
from toxcore_enums_and_consts import *
|
||||
from toxav import ToxAV
|
||||
from libtox import LibToxCore
|
||||
|
||||
global LOG
|
||||
LOG = logging.getLogger('app.'+__name__)
|
||||
def LOG_ERROR(a): print('EROR> '+a)
|
||||
def LOG_WARN(a): print('WARN> '+a)
|
||||
def LOG_INFO(a): print('INFO> '+a)
|
||||
@ -163,6 +165,7 @@ class Tox:
|
||||
|
||||
def kill(self):
|
||||
if hasattr(self, 'AV'): del self.AV
|
||||
LOG_DEBUG(f"tox_kill")
|
||||
try:
|
||||
Tox.libtoxcore.tox_kill(self._tox_pointer)
|
||||
except Exception as e:
|
||||
@ -270,7 +273,7 @@ class Tox:
|
||||
:return: True on success.
|
||||
|
||||
"""
|
||||
# LOG_DEBUG(f"tox_bootstrap")
|
||||
LOG_DEBUG(f"tox_bootstrap={address}")
|
||||
address = bytes(address, 'utf-8')
|
||||
tox_err_bootstrap = c_int()
|
||||
try:
|
||||
@ -340,9 +343,9 @@ class Tox:
|
||||
"""
|
||||
iRet = Tox.libtoxcore.tox_self_get_connection_status(self._tox_pointer)
|
||||
if iRet > 2:
|
||||
# LOG_ERROR(f"self_get_connection_status {iRet} > 2")
|
||||
# return 0
|
||||
pass
|
||||
LOG_ERROR(f"self_get_connection_status {iRet} > 2")
|
||||
return 0
|
||||
LOG_TRACE(f"self_get_connection_status {iRet}")
|
||||
return iRet
|
||||
|
||||
def callback_self_connection_status(self, callback):
|
||||
@ -363,7 +366,6 @@ class Tox:
|
||||
|
||||
"""
|
||||
if callback is None:
|
||||
LOG_DEBUG(f"tox_callback_self_connection_status")
|
||||
Tox.libtoxcore.tox_callback_self_connection_status(self._tox_pointer,
|
||||
POINTER(None)())
|
||||
self.self_connection_status_cb = None
|
||||
@ -391,13 +393,14 @@ class Tox:
|
||||
if user_data is not None:
|
||||
user_data = c_char_p(user_data)
|
||||
try:
|
||||
LOG_TRACE(f"tox_iterate")
|
||||
Tox.libtoxcore.tox_iterate(self._tox_pointer, user_data)
|
||||
except Exception as e:
|
||||
# Fatal Python error: Segmentation fault
|
||||
LOG_ERROR(f"iterate {e!s}")
|
||||
else:
|
||||
LOG_TRACE(f"tox_iterate")
|
||||
|
||||
LOG_TRACE(f"iterate")
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
# Internal client information (Tox address/id)
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
@ -1223,7 +1226,6 @@ class Tox:
|
||||
pointer (c_void_p) to user_data
|
||||
:param user_data: pointer (c_void_p) to user data
|
||||
"""
|
||||
LOG_DEBUG(f"tox_callback_friend_request")
|
||||
if callback is None:
|
||||
Tox.libtoxcore.tox_callback_friend_request(self._tox_pointer,
|
||||
POINTER(None)())
|
||||
@ -2169,12 +2171,12 @@ class Tox:
|
||||
error = c_int()
|
||||
size = self.group_peer_get_name_size(group_number, peer_id)
|
||||
name = create_string_buffer(size)
|
||||
LOG_DEBUG(f"tox_group_peer_get_name")
|
||||
result = Tox.libtoxcore.tox_group_peer_get_name(self._tox_pointer, group_number, peer_id, name, byref(error))
|
||||
if error.value:
|
||||
LOG_ERROR(f" {error.value}")
|
||||
raise RuntimeError(f"tox_group_peer_get_name {error.value}")
|
||||
sRet = str(name[:], 'utf-8', errors='ignore')
|
||||
LOG_DEBUG(f"tox_group_peer_get_name {sRet}")
|
||||
return sRet
|
||||
|
||||
def group_peer_get_status(self, group_number, peer_id):
|
||||
@ -2312,6 +2314,7 @@ class Tox:
|
||||
|
||||
error = c_int()
|
||||
try:
|
||||
LOG_DEBUG(f"tox_group_get_topic_size")
|
||||
result = Tox.libtoxcore.tox_group_get_topic_size(self._tox_pointer, group_number, byref(error))
|
||||
except Exception as e:
|
||||
LOG_WARN(f" Exception {e}")
|
||||
@ -2349,6 +2352,7 @@ class Tox:
|
||||
return value is unspecified.
|
||||
"""
|
||||
error = c_int()
|
||||
LOG_DEBUG(f"tox_group_get_name_size")
|
||||
result = Tox.libtoxcore.tox_group_get_name_size(self._tox_pointer, group_number, byref(error))
|
||||
if error.value:
|
||||
LOG_ERROR(f" {error.value}")
|
||||
@ -2383,6 +2387,7 @@ class Tox:
|
||||
|
||||
error = c_int()
|
||||
buff = create_string_buffer(TOX_GROUP_CHAT_ID_SIZE)
|
||||
LOG_DEBUG(f"tox_group_get_chat_id")
|
||||
result = Tox.libtoxcore.tox_group_get_chat_id(self._tox_pointer,
|
||||
group_number,
|
||||
buff, byref(error))
|
||||
@ -2647,7 +2652,7 @@ class Tox:
|
||||
error = c_int()
|
||||
# uint32_t message_id = 0;
|
||||
message_id = c_int() # or POINTER(None)()
|
||||
|
||||
|
||||
LOG_DEBUG(f"tox_group_send_message")
|
||||
# bool tox_group_send_message(const Tox *tox, uint32_t group_number, Tox_Message_Type type, const uint8_t *message, size_t length, uint32_t *message_id, Tox_Err_Group_Send_Message *error)
|
||||
result = Tox.libtoxcore.tox_group_send_message(self._tox_pointer,
|
||||
@ -2774,7 +2779,7 @@ class Tox:
|
||||
f.restype = c_uint32
|
||||
nick = bytes(nick, 'utf-8')
|
||||
invite_data = bytes(invite_data, 'utf-8')
|
||||
|
||||
|
||||
if False: # API change
|
||||
peer_info = self.group_self_peer_info_new()
|
||||
peer_info.contents.nick = c_char_p(nick)
|
||||
@ -2833,7 +2838,7 @@ class Tox:
|
||||
Tox.libtoxcore.tox_callback_group_peer_join(self._tox_pointer, POINTER(None)())
|
||||
self.group_peer_join_cb = None
|
||||
return
|
||||
|
||||
|
||||
LOG_DEBUG(f"tox_callback_group_peer_join")
|
||||
c_callback = CFUNCTYPE(None, c_void_p, c_uint32, c_uint32, c_void_p)
|
||||
self.group_peer_join_cb = c_callback(callback)
|
||||
@ -2853,7 +2858,8 @@ class Tox:
|
||||
Tox.libtoxcore.tox_callback_group_peer_exit(self._tox_pointer, POINTER(None)())
|
||||
self.group_peer_exit_cb = None
|
||||
return
|
||||
|
||||
|
||||
LOG_DEBUG(f"tox_callback_group_peer_exit")
|
||||
c_callback = CFUNCTYPE(None, c_void_p,
|
||||
c_uint32, # group_number,
|
||||
c_uint32, # peer_id,
|
||||
@ -2863,14 +2869,15 @@ class Tox:
|
||||
c_char_p, # message
|
||||
c_size_t, # message length
|
||||
c_void_p) # user_data
|
||||
self.group_peer_exit_cb = c_callback(callback)
|
||||
try:
|
||||
self.group_peer_exit_cb = c_callback(callback)
|
||||
Tox.libtoxcore.tox_callback_group_peer_exit(self._tox_pointer, self.group_peer_exit_cb)
|
||||
LOG_DEBUG(f"tox_callback_group_peer_exit")
|
||||
Tox.libtoxcore.tox_callback_group_peer_exit(self._tox_pointer, self.group_peer_exit_cb)
|
||||
except Exception as e:
|
||||
LOG_ERROR(f"tox_callback_group_peer_exit {e}") # req
|
||||
else:
|
||||
LOG_DEBUG(f"tox_callback_group_peer_exit")
|
||||
|
||||
|
||||
def callback_group_self_join(self, callback, user_data):
|
||||
"""
|
||||
Set the callback for the `group_self_join` event. Pass NULL to unset.
|
||||
@ -2887,16 +2894,18 @@ class Tox:
|
||||
Tox.libtoxcore.tox_callback_group_self_join(self._tox_pointer, POINTER(None)())
|
||||
self.group_self_join_cb = None
|
||||
return
|
||||
|
||||
|
||||
LOG_DEBUG(f"tox_callback_group_self_join")
|
||||
c_callback = CFUNCTYPE(None, c_void_p, c_uint32, c_void_p)
|
||||
self.group_self_join_cb = c_callback(callback)
|
||||
try:
|
||||
LOG_DEBUG(f"tox_callback_group_self_join")
|
||||
Tox.libtoxcore.tox_callback_group_self_join(self._tox_pointer, self.group_self_join_cb)
|
||||
except Exception as e:
|
||||
LOG_ERROR(f"tox_callback_group_self_join {e}") # req
|
||||
else:
|
||||
LOG_DEBUG(f"tox_callback_group_self_join")
|
||||
|
||||
|
||||
def callback_group_join_fail(self, callback, user_data):
|
||||
"""
|
||||
Set the callback for the `group_join_fail` event. Pass NULL to unset.
|
||||
@ -2908,7 +2917,7 @@ class Tox:
|
||||
Tox.libtoxcore.tox_callback_group_join_fail(self._tox_pointer, POINTER(None)())
|
||||
self.group_join_fail_cb = None
|
||||
return
|
||||
|
||||
|
||||
LOG_DEBUG(f"tox_callback_group_join_fail")
|
||||
c_callback = CFUNCTYPE(None, c_void_p, c_uint32, c_int, c_uint32, c_void_p)
|
||||
self.group_join_fail_cb = c_callback(callback)
|
||||
@ -3036,12 +3045,13 @@ class Tox:
|
||||
c_callback = CFUNCTYPE(None, c_void_p, c_uint32, c_uint32, c_uint32, c_int, c_void_p)
|
||||
self.group_moderation_cb = c_callback(callback)
|
||||
try:
|
||||
LOG_DEBUG(f"tox_callback_group_moderation")
|
||||
Tox.libtoxcore.tox_callback_group_moderation(self._tox_pointer, self.group_moderation_cb)
|
||||
except Exception as e:
|
||||
LOG_ERROR(f"tox_callback_group_moderation {e}") # req
|
||||
else:
|
||||
LOG_DEBUG(f"tox_callback_group_moderation")
|
||||
|
||||
|
||||
def group_toggle_set_ignore(self, group_number, peer_id, ignore):
|
||||
"""
|
||||
Ignore or unignore a peer.
|
||||
|
@ -1,13 +1,11 @@
|
||||
# -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*-
|
||||
|
||||
import logging
|
||||
from ctypes import c_int, POINTER, c_void_p, byref, ArgumentError, c_uint32, CFUNCTYPE, c_size_t, c_uint8, c_uint16
|
||||
from ctypes import c_char_p, c_int32, c_bool, cast
|
||||
|
||||
from wrapper.libtox import LibToxAV
|
||||
from wrapper.toxav_enums import *
|
||||
|
||||
LOG = logging.getLogger('app.'+__name__)
|
||||
def LOG_ERROR(a): print('EROR> '+a)
|
||||
def LOG_WARN(a): print('WARN> '+a)
|
||||
def LOG_INFO(a): print('INFO> '+a)
|
||||
|
@ -1,8 +1,13 @@
|
||||
# -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*-
|
||||
|
||||
from ctypes import c_size_t, create_string_buffer, byref, c_int, ArgumentError, c_char_p, c_bool
|
||||
|
||||
from wrapper import libtox
|
||||
from wrapper.toxencryptsave_enums_and_consts import *
|
||||
try:
|
||||
from wrapper import libtox
|
||||
from wrapper.toxencryptsave_enums_and_consts import *
|
||||
except:
|
||||
import libtox
|
||||
from toxencryptsave_enums_and_consts import *
|
||||
|
||||
class ToxEncryptSave:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user