Open Cojad opened 8 years ago
I was trying to fix it, but I don't know any C++, so I failed at it :) but this is where I started:
diff --git a/python-tg.c b/python-tg.c
index 09885f3..5354a26 100644
--- a/python-tg.c
+++ b/python-tg.c
@@ -82,6 +82,7 @@ extern PyTypeObject tgl_MsgType;
//#include "interface.h"
//#include "auto/constants.h"
#include <tgl/tgl.h>
+#include <tgl/tgl-queries.h>
#include "interface.h"
#include <assert.h>
@@ -269,7 +270,7 @@ void py_diff_end (void) {
Py_XDECREF(result);
}
-void py_our_id (int id) {
+void py_our_id (tgl_peer_id_t id) {
if (!python_loaded) { return; }
PyObject *arglist, *result;
@@ -520,7 +521,8 @@ void py_contact_list_cb (struct tgl_state *TLSR, void *cb_extra, int success, in
Py_XDECREF(callable);
}
-void py_dialog_list_cb (struct tgl_state *TLSR, void *cb_extra, int success, int num, tgl_peer_id_t peers[], int msgs[], int unread[]) {
+void py_dialog_list_cb (struct tgl_state *TLSR, void *cb_extra, int success, int num, tgl_peer_id_t peers[], tgl_message_id_t *msgs[], int unread[]) {
+
assert (TLSR == TLS);
PyObject *callable = cb_extra;
PyObject *arglist = NULL;
@@ -783,7 +785,7 @@ void py_do_all (void) {
int len, len1, len2, len3;
int limit, offset;
- long msg_id = 0;
+ tgl_message_id_t *msg_id;
PyObject *pyObj1 = NULL;
PyObject *pyObj2 = NULL;
@@ -1264,7 +1266,7 @@ void py_add_action_enums(PyObject *m)
PyModule_AddIntConstant(m, "ACTION_CHAT_EDIT_TITLE", tgl_message_action_chat_edit_title);
PyModule_AddIntConstant(m, "ACTION_CHAT_EDIT_PHOTO", tgl_message_action_chat_edit_photo);
PyModule_AddIntConstant(m, "ACTION_CHAT_DELETE_PHOTO", tgl_message_action_chat_delete_photo);
- PyModule_AddIntConstant(m, "ACTION_CHAT_ADD_USER", tgl_message_action_chat_add_user);
+ PyModule_AddIntConstant(m, "ACTION_CHAT_ADD_USER", tgl_message_action_chat_add_users);
PyModule_AddIntConstant(m, "ACTION_CHAT_ADD_USER_BY_LINK", tgl_message_action_chat_add_user_by_link);
PyModule_AddIntConstant(m, "ACTION_CHAT_DELETE_USER", tgl_message_action_chat_delete_user);
PyModule_AddIntConstant(m, "ACTION_SET_MESSAGE_TTL", tgl_message_action_set_message_ttl);
diff --git a/python-tg.h b/python-tg.h
index bc724ea..7540e52 100644
--- a/python-tg.h
+++ b/python-tg.h
@@ -27,7 +27,7 @@
// Python functions
void py_init (const char *file);
void py_new_msg (struct tgl_message *M);
-void py_our_id (int id);
+void py_our_id (tgl_peer_id_t id);
void py_secret_chat_update (struct tgl_secret_chat *U, unsigned flags);
void py_user_update (struct tgl_user *U, unsigned flags);
void py_chat_update (struct tgl_chat *C, unsigned flags);
diff --git a/python-types.c b/python-types.c
index da3cd5a..0907a6c 100644
--- a/python-types.c
+++ b/python-types.c
@@ -59,8 +59,8 @@ tgl_Peer_init(tgl_Peer *self, PyObject *args, PyObject *kwds)
static char *kwlist[] = {"type", "id", NULL};
tgl_peer_id_t peer_id;
if(!PyArg_ParseTupleAndKeywords(args, kwds, "ii", kwlist,
- &peer_id.type,
- &peer_id.id))
+ &peer_id.peer_type,
+ &peer_id.peer_id))
{
PyErr_Format(PeerError, "Peer must specify type and id");
return -1;
@@ -77,7 +77,7 @@ tgl_Peer_getname (tgl_Peer *self, void *closure)
{
PyObject *ret;
- switch(self->peer->id.type) {
+ switch(self->peer->id.peer_type) {
case TGL_PEER_USER:
ret = PyUnicode_FromString(self->peer->user.print_name);
break;
@@ -102,9 +102,9 @@ tgl_Peer_getuser_id (tgl_Peer *self, void *closure)
{
PyObject *ret;
- switch(self->peer->id.type) {
+ switch(self->peer->id.peer_type) {
case TGL_PEER_USER:
- ret = PyLong_FromLong(self->peer->id.id);
+ ret = PyLong_FromLong(self->peer->id.peer_id);
break;
case TGL_PEER_CHAT:
PyErr_SetString(PeerError, "peer.type_name == 'chat' has no user_id");
@@ -130,7 +130,7 @@ tgl_Peer_getuser_list (tgl_Peer *self, void *closure)
int i;
struct tgl_chat_user *user_list;
- switch(self->peer->id.type) {
+ switch(self->peer->id.peer_type) {
case TGL_PEER_CHAT:
ret = PyList_New(0);
for(i = 0; i < self->peer->chat.user_list_size; i++) {
@@ -158,7 +158,7 @@ tgl_Peer_getuser_status(tgl_Peer *self, void *closure)
{
PyObject *ret;
- switch(self->peer->id.type) {
+ switch(self->peer->id.peer_type) {
case TGL_PEER_USER:
ret = PyDict_New();
PyDict_SetItemString(ret, "online", self->peer->user.status.online? Py_True : Py_False);
@@ -184,7 +184,7 @@ tgl_Peer_getphone (tgl_Peer *self, void *closure)
{
PyObject *ret;
- switch(self->peer->id.type) {
+ switch(self->peer->id.peer_type) {
case TGL_PEER_USER:
if(self->peer->user.phone)
ret = PyUnicode_FromString(self->peer->user.phone);
@@ -210,7 +210,7 @@ tgl_Peer_getusername (tgl_Peer *self, void *closure)
{
PyObject *ret;
- switch(self->peer->id.type) {
+ switch(self->peer->id.peer_type) {
case TGL_PEER_USER:
if(self->peer->user.username)
ret = PyUnicode_FromString(self->peer->user.username);
@@ -236,7 +236,7 @@ tgl_Peer_getfirst_name (tgl_Peer *self, void *closure)
{
PyObject *ret;
- switch(self->peer->id.type) {
+ switch(self->peer->id.peer_type) {
case TGL_PEER_USER:
if(self->peer->user.first_name)
ret = PyUnicode_FromString(self->peer->user.first_name);
@@ -262,7 +262,7 @@ tgl_Peer_getlast_name (tgl_Peer *self, void *closure)
{
PyObject *ret;
- switch(self->peer->id.type) {
+ switch(self->peer->id.peer_type) {
case TGL_PEER_USER:
if(self->peer->user.last_name)
ret = PyUnicode_FromString(self->peer->user.last_name);
@@ -288,7 +288,7 @@ tgl_Peer_getuser (tgl_Peer *self, void *closure)
{
PyObject *ret;
- switch(self->peer->id.type) {
+ switch(self->peer->id.peer_type) {
case TGL_PEER_ENCR_CHAT:
ret = tgl_Peer_FromTglPeer(tgl_peer_get(TLS, TGL_MK_USER (self->peer->encr_chat.user_id)));
break;
@@ -313,7 +313,7 @@ tgl_Peer_gettype_name(tgl_Peer* self)
{
PyObject *name;
- switch(self->peer->id.type) {
+ switch(self->peer->id.peer_type) {
case TGL_PEER_USER:
name = PyUnicode_FromString("user");
break;
@@ -334,7 +334,7 @@ tgl_Peer_getid (tgl_Peer *self, void *closure)
{
PyObject *ret;
- ret = PyLong_FromLong(self->peer->id.id);
+ ret = PyLong_FromLong(self->peer->id.peer_id);
Py_XINCREF(ret);
return ret;
@@ -345,7 +345,7 @@ tgl_Peer_gettype (tgl_Peer *self, void *closure)
{
PyObject *ret;
- ret = PyLong_FromLong(self->peer->id.type);
+ ret = PyLong_FromLong(self->peer->id.peer_type);
Py_XINCREF(ret);
return ret;
@@ -496,7 +496,7 @@ tgl_Peer_rename_chat (tgl_Peer *self, PyObject *args, PyObject *kwargs)
char * title;
PyObject *callback = NULL;
- if(self->peer->id.type != TGL_PEER_CHAT) {
+ if(self->peer->id.peer_type != TGL_PEER_CHAT) {
PyErr_SetString(PeerError, "Only a chat peer can be renamed");
Py_XINCREF(Py_False);
return Py_False;
@@ -698,7 +698,7 @@ tgl_Peer_chat_set_photo (tgl_Peer *self, PyObject *args, PyObject *kwargs)
char * filename;
PyObject *callback = NULL;
- if(self->peer->id.type != TGL_PEER_CHAT) {
+ if(self->peer->id.peer_type != TGL_PEER_CHAT) {
PyErr_SetString(PeerError, "Only a chat peer can have a chat photo set.");
Py_XINCREF(Py_False);
return Py_False;
@@ -732,7 +732,7 @@ tgl_Peer_chat_add_user (tgl_Peer *self, PyObject *args, PyObject *kwargs)
PyObject *peer;
PyObject *callback = NULL;
- if(self->peer->id.type != TGL_PEER_CHAT) {
+ if(self->peer->id.peer_type != TGL_PEER_CHAT) {
PyErr_SetString(PeerError, "Only a chat peer can have a user added.");
Py_XINCREF(Py_False);
return Py_False;
@@ -766,7 +766,7 @@ tgl_Peer_chat_del_user (tgl_Peer *self, PyObject *args, PyObject *kwargs)
PyObject *peer;
PyObject *callback = NULL;
- if(self->peer->id.type != TGL_PEER_CHAT) {
+ if(self->peer->id.peer_type != TGL_PEER_CHAT) {
PyErr_SetString(PeerError, "Only a chat peer can have a user deleted.");
Py_XINCREF(Py_False);
return Py_False;
@@ -827,7 +827,7 @@ tgl_Peer_info (tgl_Peer *self, PyObject *args, PyObject *kwargs)
PyObject *callback = NULL;
- if(self->peer->id.type == TGL_PEER_ENCR_CHAT) {
+ if(self->peer->id.peer_type == TGL_PEER_ENCR_CHAT) {
PyErr_SetString(PeerError, "Secret chats currently have no info.");
Py_XINCREF(Py_False);
return Py_False;
@@ -843,7 +843,7 @@ tgl_Peer_info (tgl_Peer *self, PyObject *args, PyObject *kwargs)
Py_INCREF(Py_None);
Py_XINCREF(api_call);
- if(self->peer->id.type == TGL_PEER_USER)
+ if(self->peer->id.peer_type == TGL_PEER_USER)
return py_user_info(Py_None, api_call);
else
return py_chat_info(Py_None, api_call);
@@ -970,13 +970,13 @@ tgl_Peer_repr(tgl_Peer *self)
{
PyObject *ret;
- switch(self->peer->id.type) {
+ switch(self->peer->id.peer_type) {
case TGL_PEER_USER:
#if PY_VERSION_HEX < 0x02070900
- ret = PyUnicode_FromFormat("<tgl.Peer: id=%ld>", self->peer->id.id);
+ ret = PyUnicode_FromFormat("<tgl.Peer: id=%ld>", self->peer->id.peer_id);
#else
ret = PyUnicode_FromFormat("<tgl.Peer: type=user, id=%ld, username=%R, name=%R, first_name=%R, last_name=%R, phone=%R>",
- self->peer->id.id,
+ self->peer->id.peer_id,
PyObject_GetAttrString((PyObject*)self, "username"),
PyObject_GetAttrString((PyObject*)self, "name"),
PyObject_GetAttrString((PyObject*)self, "first_name"),
@@ -987,11 +987,11 @@ tgl_Peer_repr(tgl_Peer *self)
break;
case TGL_PEER_CHAT:
ret = PyUnicode_FromFormat("<tgl.Peer: type=chat, id=%ld, name=%s>",
- self->peer->id.id, self->peer->chat.print_title);
+ self->peer->id.peer_id, self->peer->chat.print_title);
break;
case TGL_PEER_ENCR_CHAT:
ret = PyUnicode_FromFormat("<tgl.Peer: type=secret_chat, id=%ld, name=%s, user=%R>",
- self->peer->id.id, self->peer->encr_chat.print_name,
+ self->peer->id.peer_id, self->peer->encr_chat.print_name,
PyObject_GetAttrString((PyObject*)self, "user"));
break;
default:
@@ -1021,10 +1021,10 @@ tgl_Peer_RichCompare(PyObject *self, PyObject *other, int cmp)
} else {
switch (cmp) {
case Py_EQ:
- result = ((tgl_Peer*)self)->peer->id.id == ((tgl_Peer*)other)->peer->id.id ? Py_True : Py_False;
+ result = ((tgl_Peer*)self)->peer->id.peer_id == ((tgl_Peer*)other)->peer->id.peer_id ? Py_True : Py_False;
break;
case Py_NE:
- result = ((tgl_Peer*)self)->peer->id.id == ((tgl_Peer*)other)->peer->id.id ? Py_False : Py_True;
+ result = ((tgl_Peer*)self)->peer->id.peer_id == ((tgl_Peer*)other)->peer->id.peer_id ? Py_False : Py_True;
break;
case Py_LE:
case Py_GE:
@@ -1122,7 +1122,7 @@ tgl_Msg_getid (tgl_Msg *self, void *closure)
{
PyObject *ret;
- ret = PyLong_FromLong(self->msg->id);
+ ret = PyLong_FromLong(self->msg->permanent_id);
Py_XINCREF(ret);
return ret;
@@ -1456,11 +1456,11 @@ tgl_Msg_repr(tgl_Msg *self)
{
PyObject *ret;
#if PY_VERSION_HEX < 0x02070900
- ret = PyUnicode_FromFormat("<tgl.Msg id=%ld>", self->msg->id);
+ ret = PyUnicode_FromFormat("<tgl.Msg id=%ld>", self->msg->permanent_id);
#else
ret = PyUnicode_FromFormat("<tgl.Msg id=%ld, flags=%d, mention=%R, out=%R, unread=%R, service=%R, src=%R, "
"dest=%R, text=%R, media=%R, date=%R, fwd_src=%R, fwd_date=%R, reply_id=%R, reply=%R>",
- self->msg->id, self->msg->flags,
+ self->msg->permanent_id, self->msg->flags,
PyObject_GetAttrString((PyObject*)self, "mention"),
PyObject_GetAttrString((PyObject*)self, "out"),
PyObject_GetAttrString((PyObject*)self, "unread"),
Hi,
Its not working for me, i am facing below issue.
gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/python3.4m -DHAVE_CONFIG_H -Wall -Werror -Wextra -Wno-missing-field-initializers -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -c -MP -MD -MF dep/interface.d -MQ objs/interface.o -o objs/interface.o interface.c interface.c: In function ‘our_id_gw’: interface.c:3090:5: error: incompatible type for argument 1 of ‘py_our_id’ py_our_id (id); ^ In file included from interface.c:25:0: python-tg.h:30:6: note: expected ‘int’ but argument is of type ‘tgl_peer_id_t’ void py_our_id (int id); ^ Makefile:48: recipe for target 'objs/interface.o' failed make: *\ [objs/interface.o] Error 1
Please do needful help
https://github.com/vysheng/tg/pull/1137 I have somehow manage to fix part of python support with this patch. there are still things left broken. So I welcome for any suggestion.
In test branch file configure is set to disable python even with option --enable-python set. and if I fix configure file then make will throw error msg below:
I think this is due to id is no longer using int but tgl_peer_id_t. But I really have no idea how to correctly fix the code. I know test branch is more unstable but master branch is lack of supergroup support. So I have to use test branch.