This commit is contained in:
Андрей Владимирович 2016-02-18 20:18:25 +03:00
parent f11f226890
commit 6164f189f2

View File

@ -1,8 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from ctypes import * from ctypes import *
from settings import Settings
from platform import system from platform import system
from toxcore_enums import * from toxcore_enums_and_consts import *
import os import os
@ -23,7 +22,7 @@ class ToxOptions(Structure):
class Tox(object): class Tox(object):
def __init__(self, name, path=None): def __init__(self, *args):
# load toxcore # load toxcore
if system() == 'Linux': if system() == 'Linux':
temp = os.path.dirname(os.path.abspath(__file__)) + '/libs/' temp = os.path.dirname(os.path.abspath(__file__)) + '/libs/'
@ -34,14 +33,7 @@ class Tox(object):
else: else:
raise OSError('Unknown system.') raise OSError('Unknown system.')
# load saved data if len(args) == 2:
if path is None:
path = Settings.get_default_path()
full_path = path + name + '.tox'
with open(full_path, 'rb') as fl:
savedata = fl.read()
settings = Settings()
# creating tox options struct # creating tox options struct
tox_err_options = c_int() tox_err_options = c_int()
self.libtoxcore.tox_options_new.restype = POINTER(ToxOptions) self.libtoxcore.tox_options_new.restype = POINTER(ToxOptions)
@ -50,6 +42,8 @@ class Tox(object):
raise MemoryError('The function failed to allocate enough memory for the options struct.') raise MemoryError('The function failed to allocate enough memory for the options struct.')
# filling tox options struct # filling tox options struct
savedata = args[0]
settings = args[1]
self.tox_options.contents.ipv6_enabled = settings['ipv6_enabled'] self.tox_options.contents.ipv6_enabled = settings['ipv6_enabled']
self.tox_options.contents.udp_enabled = settings['udp_enabled'] self.tox_options.contents.udp_enabled = settings['udp_enabled']
self.tox_options.contents.proxy_type = settings['proxy_type'] self.tox_options.contents.proxy_type = settings['proxy_type']
@ -86,10 +80,14 @@ class Tox(object):
elif tox_err == TOX_ERR_NEW['TOX_ERR_NEW_LOAD_ENCRYPTED']: elif tox_err == TOX_ERR_NEW['TOX_ERR_NEW_LOAD_ENCRYPTED']:
raise ArgumentError('The byte array to be loaded contained an encrypted save.') raise ArgumentError('The byte array to be loaded contained an encrypted save.')
elif tox_err == TOX_ERR_NEW['TOX_ERR_NEW_LOAD_BAD_FORMAT']: elif tox_err == TOX_ERR_NEW['TOX_ERR_NEW_LOAD_BAD_FORMAT']:
raise ArgumentError('The data format was invalid. This can happen when loading data that was saved by an' raise ArgumentError('The data format was invalid. This can happen when loading data that was saved by'
' older version of Tox, or when the data has been corrupted. When loading from badly' ' an older version of Tox, or when the data has been corrupted. When loading from'
' formatted data, some data may have been loaded, and the rest is discarded. Passing' ' badly formatted data, some data may have been loaded, and the rest is discarded.'
' an invalid length parameter also causes this error.') ' Passing an invalid length parameter also causes this error.')
elif len(args) == 1:
self._tox_pointer = args[0]
else:
raise ArgumentError('1 or 2 arguments expected')
def get_savedata_size(self): def get_savedata_size(self):
return self.libtoxcore.tox_get_savedata_size(self._tox_pointer) return self.libtoxcore.tox_get_savedata_size(self._tox_pointer)
@ -137,10 +135,22 @@ class Tox(object):
c_callback = tox_self_connection_status_cb(callback) c_callback = tox_self_connection_status_cb(callback)
self.libtoxcore.tox_callback_self_connection_status(self._tox_pointer, c_callback, c_void_p(user_data)) self.libtoxcore.tox_callback_self_connection_status(self._tox_pointer, c_callback, c_void_p(user_data))
def iteration_interval(self):
return int(self.libtoxcore.tox_iteration_interval(self._tox_pointer).value)
def iterate(self):
self.libtoxcore.tox_iterate(self._tox_pointer)
def self_get_address(self, address=None):
if address is None:
address = create_string_buffer(TOX_ADDRESS_SIZE)
self.libtoxcore.tox_self_get_address(self._tox_pointer, address)
return address
def __del__(self): def __del__(self):
if hasattr(self, 'tox_options'):
self.libtoxcore.tox_kill(self._tox_pointer) self.libtoxcore.tox_kill(self._tox_pointer)
self.libtoxcore.tox_options_free(self.tox_options) self.libtoxcore.tox_options_free(self.tox_options)
if __name__ == '__main__': if __name__ == '__main__':
t = Tox('tox_save') pass