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
af0db8a7
Commit
af0db8a7
authored
Nov 06, 2017
by
Sylvain Berfini
🐮
Browse files
Added new APIs to manipulate Contents inside ChatMessage
parent
1e2d9d9a
Changes
9
Hide whitespace changes
Inline
Side-by-side
coreapi/chat_file_transfer.c
View file @
af0db8a7
...
...
@@ -28,6 +28,3 @@
#include "c-wrapper/c-wrapper.h"
#include "chat/chat-room/chat-room.h"
LinphoneChatMessage
*
linphone_chat_room_create_file_transfer_message
(
LinphoneChatRoom
*
cr
,
const
LinphoneContent
*
initial_content
)
{
return
L_GET_C_BACK_PTR
(
L_GET_CPP_PTR_FROM_C_OBJECT
(
cr
)
->
createFileTransferMessage
(
initial_content
));
}
include/linphone/api/c-chat-message.h
View file @
af0db8a7
...
...
@@ -346,6 +346,34 @@ LINPHONE_PUBLIC LinphoneStatus linphone_chat_message_put_char(LinphoneChatMessag
*/
LINPHONE_PUBLIC
LinphoneChatMessageCbs
*
linphone_chat_message_get_callbacks
(
const
LinphoneChatMessage
*
msg
);
/**
* Adds a content to the ChatMessage
* @param[in] msg LinphoneChatMessage object
* @param[in] c_content LinphoneContent object
*/
LINPHONE_PUBLIC
void
linphone_chat_message_add_text_content
(
LinphoneChatMessage
*
msg
,
const
LinphoneContent
*
c_content
);
/**
* Returns true if the chat message has a text content
* @param[in] msg LinphoneChatMessage object
* @return true if it has one, false otherwise
*/
LINPHONE_PUBLIC
bool_t
linphone_chat_message_has_text_content
(
const
LinphoneChatMessage
*
msg
);
/**
* Returns true if the chat message has a file transfer content
* @param[in] msg LinphoneChatMessage object
* @return true if it has one, false otherwise
*/
LINPHONE_PUBLIC
bool_t
linphone_chat_message_has_file_content
(
const
LinphoneChatMessage
*
msg
);
/**
* Gets the text content if available as a string
* @param[in] msg LinphoneChatMessage object
* @return the LinphoneContent buffer if available, null otherwise
*/
LINPHONE_PUBLIC
const
char
*
linphone_chat_message_get_text_content
(
const
LinphoneChatMessage
*
msg
);
/**
* @}
*/
...
...
src/c-wrapper/api/c-chat-message.cpp
View file @
af0db8a7
...
...
@@ -297,6 +297,30 @@ LinphoneStatus linphone_chat_message_put_char(LinphoneChatMessage *msg, uint32_t
return
((
LinphoneStatus
)
L_GET_CPP_PTR_FROM_C_OBJECT
(
msg
)
->
putCharacter
(
character
));
}
void
linphone_chat_message_add_text_content
(
LinphoneChatMessage
*
msg
,
const
char
*
c_content
)
{
LinphonePrivate
::
Content
content
;
LinphonePrivate
::
ContentType
contentType
=
LinphonePrivate
::
ContentType
::
PlainText
;
content
.
setContentType
(
contentType
);
content
.
setBody
(
L_C_TO_STRING
(
c_content
));
L_GET_CPP_PTR_FROM_C_OBJECT
(
msg
)
->
addContent
(
content
);
}
bool_t
linphone_chat_message_has_text_content
(
const
LinphoneChatMessage
*
msg
)
{
return
L_GET_CPP_PTR_FROM_C_OBJECT
(
msg
)
->
hasTextContent
();
}
bool_t
linphone_chat_message_has_file_content
(
const
LinphoneChatMessage
*
msg
)
{
return
L_GET_CPP_PTR_FROM_C_OBJECT
(
msg
)
->
hasFileTransferContent
();
}
const
char
*
linphone_chat_message_get_text_content
(
const
LinphoneChatMessage
*
msg
)
{
LinphonePrivate
::
Content
content
=
L_GET_CPP_PTR_FROM_C_OBJECT
(
msg
)
->
getTextContent
();
if
(
content
==
LinphonePrivate
::
Content
::
Empty
)
{
return
NULL
;
}
return
L_STRING_TO_C
(
content
.
getBodyAsString
());
}
// =============================================================================
// Old listener
// =============================================================================
...
...
src/c-wrapper/api/c-chat-room.cpp
View file @
af0db8a7
...
...
@@ -305,6 +305,10 @@ bctbx_list_t * linphone_chat_room_get_composing_addresses(LinphoneChatRoom *cr)
return
result
;
}
LinphoneChatMessage
*
linphone_chat_room_create_file_transfer_message
(
LinphoneChatRoom
*
cr
,
const
LinphoneContent
*
initial_content
)
{
return
L_GET_C_BACK_PTR
(
L_GET_CPP_PTR_FROM_C_OBJECT
(
cr
)
->
createFileTransferMessage
(
initial_content
));
}
// =============================================================================
// Reference and user data handling functions.
// =============================================================================
...
...
src/chat/chat-message/chat-message.cpp
View file @
af0db8a7
...
...
@@ -1153,7 +1153,7 @@ void ChatMessagePrivate::send () {
LinphoneCall
*
call
=
nullptr
;
int
errorCode
=
0
;
if
((
currentSendStep
&
ChatMessagePrivate
::
Step
::
FileUpload
)
==
ChatMessagePrivate
::
Step
::
FileUpload
)
{
if
((
currentSendStep
&
ChatMessagePrivate
::
Step
::
FileUpload
)
==
ChatMessagePrivate
::
Step
::
FileUpload
)
{
lInfo
()
<<
"File upload step already done, skipping"
;
}
else
{
if
(
getFileTransferInformation
())
{
...
...
@@ -1516,6 +1516,46 @@ void ChatMessage::removeCustomHeader (const string &headerName) {
d
->
customHeaders
.
erase
(
headerName
);
}
bool
ChatMessage
::
hasTextContent
()
const
{
L_D
();
for
(
const
auto
&
c
:
d
->
contents
)
{
if
(
c
.
getContentType
()
==
ContentType
::
PlainText
)
{
return
true
;
}
}
return
false
;
}
const
Content
&
ChatMessage
::
getTextContent
()
const
{
L_D
();
for
(
const
auto
&
c
:
d
->
contents
)
{
if
(
c
.
getContentType
()
==
ContentType
::
PlainText
)
{
return
c
;
}
}
return
Content
::
Empty
;
}
bool
ChatMessage
::
hasFileTransferContent
()
const
{
L_D
();
for
(
const
auto
&
c
:
d
->
contents
)
{
if
(
c
.
getContentType
()
==
ContentType
::
FileTransfer
)
{
return
true
;
}
}
return
false
;
}
const
Content
&
ChatMessage
::
getFileTransferContent
()
const
{
L_D
();
for
(
const
auto
&
c
:
d
->
contents
)
{
if
(
c
.
getContentType
()
==
ContentType
::
FileTransfer
)
{
return
c
;
}
}
return
Content
::
Empty
;
}
// -----------------------------------------------------------------------------
void
ChatMessage
::
store
()
{
...
...
src/chat/chat-message/chat-message.h
View file @
af0db8a7
...
...
@@ -102,6 +102,12 @@ public:
void
addContent
(
const
Content
&
content
);
void
removeContent
(
const
Content
&
content
);
bool
hasTextContent
()
const
;
const
Content
&
getTextContent
()
const
;
bool
hasFileTransferContent
()
const
;
const
Content
&
getFileTransferContent
()
const
;
const
Content
&
getInternalContent
()
const
;
void
setInternalContent
(
const
Content
&
content
);
...
...
src/chat/chat-room/chat-room.cpp
View file @
af0db8a7
...
...
@@ -458,8 +458,7 @@ void ChatRoom::compose () {
shared_ptr
<
ChatMessage
>
ChatRoom
::
createFileTransferMessage
(
const
LinphoneContent
*
initialContent
)
{
shared_ptr
<
ChatMessage
>
chatMessage
=
createMessage
();
/* TODO
Content content;
/*Content content;
content.setContentType(ContentType::FileTransfer);
content.setBody(linphone_content_get_string_buffer(initialContent));
chatMessage->addContent(content);*/
...
...
src/content/content.cpp
View file @
af0db8a7
...
...
@@ -35,6 +35,8 @@ public:
string
contentDisposition
;
};
const
Content
Content
::
Empty
;
// -----------------------------------------------------------------------------
Content
::
Content
()
:
ClonableObject
(
*
new
ContentPrivate
)
{}
...
...
src/content/content.h
View file @
af0db8a7
...
...
@@ -63,6 +63,8 @@ public:
bool
isEmpty
()
const
;
static
const
Content
Empty
;
private:
L_DECLARE_PRIVATE
(
Content
);
};
...
...
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