Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
savoirfairelinux
jami-client-macos
Commits
98827a19
Commit
98827a19
authored
Apr 06, 2021
by
Kateryna Kostiuk
Browse files
swarm: add invitation view
Change-Id: Idbc414eafc50127e8eb9d976226f1bdee81540c0
parent
3037dabb
Changes
8
Expand all
Show whitespace changes
Inline
Side-by-side
src/ConversationVC.h
View file @
98827a19
...
@@ -34,6 +34,11 @@ namespace lrc {
...
@@ -34,6 +34,11 @@ namespace lrc {
@interface
ConversationVC
:
NSViewController
<
LeaveMessageDelegate
>
@interface
ConversationVC
:
NSViewController
<
LeaveMessageDelegate
>
/**
* KVO to switch between request/conversation view
*/
@property
(
assign
)
BOOL
isRequest
;
-
(
void
)
initFrame
;
-
(
void
)
initFrame
;
-
(
void
)
showWithAnimation
:(
BOOL
)
animate
;
-
(
void
)
showWithAnimation
:(
BOOL
)
animate
;
-
(
void
)
hideWithAnimation
:(
BOOL
)
animate
;
-
(
void
)
hideWithAnimation
:(
BOOL
)
animate
;
...
...
src/ConversationVC.mm
View file @
98827a19
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
*/
*/
#import "ConversationVC.h"
#import "ConversationVC.h"
#import "delegates/ImageManipulationDelegate.h"
#import <qstring.h>
#import <qstring.h>
#import <QPixmap>
#import <QPixmap>
...
@@ -27,6 +28,8 @@
...
@@ -27,6 +28,8 @@
#import <QuickLook/QuickLook.h>
#import <QuickLook/QuickLook.h>
#import <Quartz/Quartz.h>
#import <Quartz/Quartz.h>
#import <globalinstances.h>
#import "views/IconButton.h"
#import "views/IconButton.h"
#import "views/HoverButton.h"
#import "views/HoverButton.h"
#import "views/IMTableCellView.h"
#import "views/IMTableCellView.h"
...
@@ -47,6 +50,18 @@
...
@@ -47,6 +50,18 @@
__unsafe_unretained
IBOutlet
HoverButton
*
addContactButton
;
__unsafe_unretained
IBOutlet
HoverButton
*
addContactButton
;
__unsafe_unretained
IBOutlet
NSLayoutConstraint
*
sentContactRequestWidth
;
__unsafe_unretained
IBOutlet
NSLayoutConstraint
*
sentContactRequestWidth
;
// invitation view
__unsafe_unretained
IBOutlet
NSView
*
invitationView
;
__unsafe_unretained
IBOutlet
NSImageView
*
invitationAvatar
;
__unsafe_unretained
IBOutlet
NSTextField
*
invitationTitle
;
__unsafe_unretained
IBOutlet
NSTextField
*
invitationMessage
;
__unsafe_unretained
IBOutlet
NSTextField
*
invitationLabel
;
__unsafe_unretained
IBOutlet
NSView
*
invitationBox
;
__unsafe_unretained
IBOutlet
NSButton
*
invitationBlock
;
__unsafe_unretained
IBOutlet
NSButton
*
invitationRefuse
;
__unsafe_unretained
IBOutlet
NSButton
*
invitationAccept
;
__unsafe_unretained
IBOutlet
NSStackView
*
invitationControls
;
__unsafe_unretained
IBOutlet
NSButton
*
sentContactRequestButton
;
__unsafe_unretained
IBOutlet
NSButton
*
sentContactRequestButton
;
IBOutlet
MessagesVC
*
messagesViewVC
;
IBOutlet
MessagesVC
*
messagesViewVC
;
LeaveMessageVC
*
leaveMessageVC
;
LeaveMessageVC
*
leaveMessageVC
;
...
@@ -95,10 +110,47 @@ NSInteger const SEND_PANEL_MAX_HEIGHT = 120;
...
@@ -95,10 +110,47 @@ NSInteger const SEND_PANEL_MAX_HEIGHT = 120;
leaveMessageConversations
=
[[
NSMutableArray
alloc
]
init
];
leaveMessageConversations
=
[[
NSMutableArray
alloc
]
init
];
leaveMessageVC
.
delegate
=
self
;
leaveMessageVC
.
delegate
=
self
;
[
messagesViewVC
setAVModel
:
avModel
];
[
messagesViewVC
setAVModel
:
avModel
];
//setup the invitation view
invitationView
.
wantsLayer
=
true
;
invitationView
.
layer
.
backgroundColor
=
[[
NSColor
windowBackgroundColor
]
CGColor
];
NSString
*
invitationText
=
NSLocalizedString
(
@"Hello,
\n
Would you like to join the conversation?"
,
@"Incoming conversation request title"
);
[
self
setInvitationText
:
invitationText
];
invitationBox
.
wantsLayer
=
true
;
invitationBox
.
layer
.
cornerRadius
=
20.0
;
invitationBox
.
layer
.
backgroundColor
=
[[
NSColor
controlColor
]
CGColor
];
invitationBox
.
shadow
=
[[
NSShadow
alloc
]
init
];
invitationBox
.
layer
.
shadowOpacity
=
0.2
;
invitationBox
.
layer
.
shadowColor
=
[[
NSColor
colorWithRed
:
0
green
:
0
blue
:
0
alpha
:
0.3
]
CGColor
];
invitationBox
.
layer
.
shadowOffset
=
NSMakeSize
(
0
,
-
3
);
invitationBox
.
layer
.
shadowRadius
=
10
;
[
NSDistributedNotificationCenter
.
defaultCenter
addObserver
:
self
selector
:
@selector
(
themeChanged
:
)
name
:
@"AppleInterfaceThemeChangedNotification"
object
:
nil
];
}
}
return
self
;
return
self
;
}
}
-
(
void
)
deinit
{
[
NSDistributedNotificationCenter
.
defaultCenter
removeObserver
:
self
];
}
-
(
void
)
themeChanged
:(
NSNotification
*
)
notification
{
dispatch_after
(
dispatch_time
(
DISPATCH_TIME_NOW
,
0.1
*
NSEC_PER_SEC
),
dispatch_get_main_queue
(),
^
{
invitationBox
.
layer
.
backgroundColor
=
[[
NSColor
controlColor
]
CGColor
];
invitationView
.
layer
.
backgroundColor
=
[[
NSColor
windowBackgroundColor
]
CGColor
];
});
}
-
(
void
)
setInvitationText
:(
NSString
*
)
text
{
NSFont
*
font
=
[
NSFont
systemFontOfSize
:
18
weight
:
NSFontWeightMedium
];
NSMutableParagraphStyle
*
paragraphStyle
=
[[
NSMutableParagraphStyle
alloc
]
init
];
[
paragraphStyle
setLineSpacing
:
4.0
];
paragraphStyle
.
alignment
=
NSTextAlignmentCenter
;
NSDictionary
*
attrDic
=
[
NSDictionary
dictionaryWithObjectsAndKeys
:
font
,
NSFontAttributeName
,
paragraphStyle
,
NSParagraphStyleAttributeName
,
[
NSColor
controlTextColor
],
NSForegroundColorAttributeName
,
nil
];
NSAttributedString
*
attrString
=
[[
NSAttributedString
alloc
]
initWithString
:
text
attributes
:
attrDic
];
[
invitationTitle
setAttributedStringValue
:
attrString
];
}
-
(
NSViewController
*
)
getMessagesView
{
-
(
NSViewController
*
)
getMessagesView
{
return
messagesViewVC
;
return
messagesViewVC
;
}
}
...
@@ -176,6 +228,11 @@ NSInteger const SEND_PANEL_MAX_HEIGHT = 120;
...
@@ -176,6 +228,11 @@ NSInteger const SEND_PANEL_MAX_HEIGHT = 120;
modelSortedConnection_
=
QObject
::
connect
(
convModel_
,
&
lrc
::
api
::
ConversationModel
::
modelChanged
,
modelSortedConnection_
=
QObject
::
connect
(
convModel_
,
&
lrc
::
api
::
ConversationModel
::
modelChanged
,
[
self
](){
[
self
](){
cachedConv_
=
nil
;
cachedConv_
=
nil
;
auto
*
conv
=
[
self
getCurrentConversation
];
if
(
conv
==
nil
)
return
;
[
self
updateInvitationView
:
conv
];
});
});
filterChangedConnection_
=
QObject
::
connect
(
convModel_
,
&
lrc
::
api
::
ConversationModel
::
filterChanged
,
filterChangedConnection_
=
QObject
::
connect
(
convModel_
,
&
lrc
::
api
::
ConversationModel
::
filterChanged
,
[
self
](){
[
self
](){
...
@@ -184,6 +241,11 @@ NSInteger const SEND_PANEL_MAX_HEIGHT = 120;
...
@@ -184,6 +241,11 @@ NSInteger const SEND_PANEL_MAX_HEIGHT = 120;
newConversationConnection_
=
QObject
::
connect
(
convModel_
,
&
lrc
::
api
::
ConversationModel
::
newConversation
,
newConversationConnection_
=
QObject
::
connect
(
convModel_
,
&
lrc
::
api
::
ConversationModel
::
newConversation
,
[
self
](){
[
self
](){
cachedConv_
=
nil
;
cachedConv_
=
nil
;
auto
*
conv
=
[
self
getCurrentConversation
];
if
(
conv
==
nil
)
return
;
[
self
updateInvitationView
:
conv
];
});
});
conversationRemovedConnection_
=
QObject
::
connect
(
convModel_
,
&
lrc
::
api
::
ConversationModel
::
conversationRemoved
,
conversationRemovedConnection_
=
QObject
::
connect
(
convModel_
,
&
lrc
::
api
::
ConversationModel
::
conversationRemoved
,
[
self
](){
[
self
](){
...
@@ -210,11 +272,52 @@ NSInteger const SEND_PANEL_MAX_HEIGHT = 120;
...
@@ -210,11 +272,52 @@ NSInteger const SEND_PANEL_MAX_HEIGHT = 120;
try
{
try
{
[
addContactButton
setHidden
:((
convModel_
->
owner
.
contactModel
->
getContact
(
conv
->
participants
[
0
]).
profileInfo
.
type
!=
lrc
:
:
api
::
profile
::
Type
::
TEMPORARY
)
||
accountType
==
lrc
::
api
::
profile
::
Type
::
SIP
)];
[
addContactButton
setHidden
:((
convModel_
->
owner
.
contactModel
->
getContact
(
conv
->
participants
[
0
]).
profileInfo
.
type
!=
lrc
:
:
api
::
profile
::
Type
::
TEMPORARY
)
||
accountType
==
lrc
::
api
::
profile
::
Type
::
SIP
)];
}
catch
(
std
::
out_of_range
&
e
)
{
}
catch
(
std
::
out_of_range
&
e
)
{
[
addContactButton
setHidden
:
true
];
NSLog
(
@"contact out of range"
);
NSLog
(
@"contact out of range"
);
}
}
if
(
!
conv
->
allMessagesLoaded
)
{
if
(
!
conv
->
allMessagesLoaded
)
{
convModel_
->
loadConversationMessages
(
convUid_
,
0
);
convModel_
->
loadConversationMessages
(
convUid_
,
0
);
}
}
@autoreleasepool
{
auto
&
imageManip
=
reinterpret_cast
<
Interfaces
::
ImageManipulationDelegate
&>
(
GlobalInstances
::
pixmapManipulator
());
auto
image
=
QtMac
::
toNSImage
(
qvariant_cast
<
QPixmap
>
(
imageManip
.
conversationPhoto
(
*
conv
,
convModel_
->
owner
,
QSize
(
110
,
110
))));
[
invitationAvatar
setImage
:
image
];
}
[
self
updateInvitationView
:
conv
];
}
-
(
void
)
updateInvitationView
:(
const
lrc
::
api
::
conversation
::
Info
*
)
conversation
{
self
.
isRequest
=
conversation
->
isRequest
;
NSString
*
bestName
=
bestNameForConversation
(
*
conversation
,
*
convModel_
);
bool
showInvitationView
=
conversation
->
isRequest
||
(
convModel_
->
owner
.
profileInfo
.
type
==
lrc
::
api
::
profile
::
Type
::
JAMI
&&
conversation
->
interactions
.
size
()
==
0
);
invitationView
.
hidden
=
!
showInvitationView
;
invitationBlock
.
enabled
=
!
conversation
->
needsSyncing
&&
conversation
->
isRequest
;
invitationRefuse
.
enabled
=
!
conversation
->
needsSyncing
&&
conversation
->
isRequest
;
invitationAccept
.
enabled
=
!
conversation
->
needsSyncing
&&
conversation
->
isRequest
;
invitationControls
.
hidden
=
conversation
->
needsSyncing
||
!
conversation
->
isRequest
;
invitationLabel
.
hidden
=
conversation
->
needsSyncing
||
!
conversation
->
isRequest
;
invitationMessage
.
hidden
=
conversation
->
isRequest
&&
!
conversation
->
needsSyncing
;
if
(
!
showInvitationView
)
{
return
;
}
if
(
conversation
->
isRequest
&&
conversation
->
needsSyncing
)
{
NSString
*
syncTitle
=
[
NSString
stringWithFormat
:
NSLocalizedString
(
@"We are waiting for %@ connects to synchronize the conversation."
,
@"Synchronization label for conversation {Name}"
),
bestName
];
invitationMessage
.
stringValue
=
syncTitle
;
NSString
*
waitSync
=
NSLocalizedString
(
@"You have accepted the conversation request."
,
@"Synchronization explanation label"
);
[
self
setInvitationText
:
waitSync
];
}
else
if
(
conversation
->
isRequest
)
{
NSString
*
invitationReceived
=
NSLocalizedString
(
@"Hello,
\n
Would you like to join the conversation?"
,
@"Incoming conversation request title"
);
[
self
setInvitationText
:
invitationReceived
];
}
else
{
NSString
*
sendInvitationText1
=
NSLocalizedString
(
@"Send him/her a contact request to be able to exchange together."
,
@"Send request explanation"
);
invitationMessage
.
stringValue
=
sendInvitationText1
;
NSString
*
sendInvitationText
=
[
NSString
stringWithFormat
:
NSLocalizedString
(
@"%@ is not in your contacts."
,
@"Send request to {Name}"
),
bestName
];
[
self
setInvitationText
:
sendInvitationText
];
}
}
}
-
(
void
)
initFrame
-
(
void
)
initFrame
...
@@ -328,4 +431,16 @@ NSInteger const SEND_PANEL_MAX_HEIGHT = 120;
...
@@ -328,4 +431,16 @@ NSInteger const SEND_PANEL_MAX_HEIGHT = 120;
[
leaveMessageConversations
removeObject
:
convUid_
.
toNSString
()];
[
leaveMessageConversations
removeObject
:
convUid_
.
toNSString
()];
}
}
-
(
IBAction
)
acceptInvitation
:(
id
)
sender
{
convModel_
->
makePermanent
(
convUid_
);
}
-
(
IBAction
)
refuseInvitation
:(
id
)
sender
{
convModel_
->
removeConversation
(
convUid_
);
}
-
(
IBAction
)
blockInvitation
:(
id
)
sender
{
convModel_
->
removeConversation
(
convUid_
,
true
);
}
@end
@end
src/MessagesVC.h
View file @
98827a19
...
@@ -42,7 +42,6 @@
...
@@ -42,7 +42,6 @@
* if message.length is > 0, button is enabled, otherwise disabled
* if message.length is > 0, button is enabled, otherwise disabled
*/
*/
@property
(
retain
)
NSString
*
message
;
@property
(
retain
)
NSString
*
message
;
/**
/**
* This is a KVO method to bind the pending files collection view visibility
* This is a KVO method to bind the pending files collection view visibility
*/
*/
...
@@ -52,6 +51,7 @@
...
@@ -52,6 +51,7 @@
* This is a KVO method to bind the enable state of send button
* This is a KVO method to bind the enable state of send button
*/
*/
@property
BOOL
enableSendButton
;
@property
BOOL
enableSendButton
;
@property
(
nonatomic
,
weak
)
NSView
*
containerView
;
-
(
void
)
setAVModel
:
(
lrc
::
api
::
AVModel
*
)
avmodel
;
-
(
void
)
setAVModel
:
(
lrc
::
api
::
AVModel
*
)
avmodel
;
-
(
void
)
checkIfcomposingMsg
;
-
(
void
)
checkIfcomposingMsg
;
...
...
src/SmartViewVC.mm
View file @
98827a19
...
@@ -86,9 +86,6 @@ NSInteger const TOTALMSGS_TAG = 600;
...
@@ -86,9 +86,6 @@ NSInteger const TOTALMSGS_TAG = 600;
NSInteger
const
TOTALINVITES_TAG
=
700
;
NSInteger
const
TOTALINVITES_TAG
=
700
;
NSInteger
const
DATE_TAG
=
800
;
NSInteger
const
DATE_TAG
=
800
;
NSInteger
const
SNIPPET_TAG
=
900
;
NSInteger
const
SNIPPET_TAG
=
900
;
NSInteger
const
ADD_BUTTON_TAG
=
1000
;
NSInteger
const
REFUSE_BUTTON_TAG
=
1100
;
NSInteger
const
BLOCK_BUTTON_TAG
=
1200
;
// Segment indices for smartlist selector
// Segment indices for smartlist selector
NSInteger
const
CONVERSATION_SEG
=
0
;
NSInteger
const
CONVERSATION_SEG
=
0
;
...
@@ -551,25 +548,9 @@ NSInteger const REQUEST_SEG = 1;
...
@@ -551,25 +548,9 @@ NSInteger const REQUEST_SEG = 1;
NSLog
(
@"contact out of range"
);
NSLog
(
@"contact out of range"
);
}
}
NSButton
*
addContactButton
=
[
result
viewWithTag
:
ADD_BUTTON_TAG
];
if
(
conversation
.
isRequest
)
{
NSButton
*
refuseContactButton
=
[
result
viewWithTag
:
REFUSE_BUTTON_TAG
];
NSButton
*
blockContactButton
=
[
result
viewWithTag
:
BLOCK_BUTTON_TAG
];
[
addContactButton
setHidden
:
YES
];
[
refuseContactButton
setHidden
:
YES
];
[
blockContactButton
setHidden
:
YES
];
if
(
profileType
(
conversation
,
*
convModel_
)
==
lrc
::
api
::
profile
::
Type
::
PENDING
)
{
[
lastInteractionDate
setHidden
:
true
];
[
lastInteractionDate
setHidden
:
true
];
[
interactionSnippet
setHidden
:
true
];
[
interactionSnippet
setHidden
:
true
];
[
addContactButton
setHidden
:
NO
];
[
refuseContactButton
setHidden
:
NO
];
[
blockContactButton
setHidden
:
NO
];
[
addContactButton
setAction
:
@selector
(
acceptInvitation
:)];
[
addContactButton
setTarget
:
self
];
[
refuseContactButton
setAction
:
@selector
(
refuseInvitation
:)];
[
refuseContactButton
setTarget
:
self
];
[
blockContactButton
setAction
:
@selector
(
blockPendingContact
:)];
[
blockContactButton
setTarget
:
self
];
return
result
;
return
result
;
}
}
...
@@ -699,14 +680,11 @@ NSInteger const REQUEST_SEG = 1;
...
@@ -699,14 +680,11 @@ NSInteger const REQUEST_SEG = 1;
if
(
!
convOpt
.
has_value
())
if
(
!
convOpt
.
has_value
())
return
;
return
;
lrc
::
api
::
conversation
::
Info
&
conversation
=
*
convOpt
;
lrc
::
api
::
conversation
::
Info
&
conversation
=
*
convOpt
;
@try
{
if
(
conversation
.
participants
.
size
()
>
0
)
{
auto
contact
=
convModel_
->
owner
.
contactModel
->
getContact
(
conversation
.
participants
[
0
]);
if
(
conversation
.
participants
[
0
]
==
selectedUid_
)
{
if
(
!
contact
.
profileInfo
.
uri
.
isEmpty
()
&&
contact
.
profileInfo
.
uri
.
compare
(
selectedUid_
)
==
0
)
{
selectedUid_
=
uid
;
selectedUid_
=
uid
;
convModel_
->
selectConversation
(
uid
);
convModel_
->
selectConversation
(
uid
);
}
}
}
@catch
(
NSException
*
exception
)
{
return
;
}
}
}
}
...
@@ -746,7 +724,7 @@ NSInteger const REQUEST_SEG = 1;
...
@@ -746,7 +724,7 @@ NSInteger const REQUEST_SEG = 1;
if
(
selectedUid_
==
uid
)
{
if
(
selectedUid_
==
uid
)
{
return
YES
;
return
YES
;
}
}
@
try
{
try
{
auto
contact
=
convModel_
->
owner
.
contactModel
->
getContact
(
conversation
.
participants
[
0
]);
auto
contact
=
convModel_
->
owner
.
contactModel
->
getContact
(
conversation
.
participants
[
0
]);
if
((
contact
.
profileInfo
.
uri
.
isEmpty
()
&&
contact
.
profileInfo
.
type
!=
lrc
::
api
::
profile
::
Type
::
SIP
)
||
contact
.
profileInfo
.
type
==
lrc
::
api
::
profile
::
Type
::
INVALID
)
{
if
((
contact
.
profileInfo
.
uri
.
isEmpty
()
&&
contact
.
profileInfo
.
type
!=
lrc
::
api
::
profile
::
Type
::
SIP
)
||
contact
.
profileInfo
.
type
==
lrc
::
api
::
profile
::
Type
::
INVALID
)
{
return
YES
;
return
YES
;
...
@@ -755,7 +733,7 @@ NSInteger const REQUEST_SEG = 1;
...
@@ -755,7 +733,7 @@ NSInteger const REQUEST_SEG = 1;
convModel_
->
selectConversation
(
uid
);
convModel_
->
selectConversation
(
uid
);
[
self
.
view
.
window
makeFirstResponder
:
smartView
];
[
self
.
view
.
window
makeFirstResponder
:
smartView
];
return
YES
;
return
YES
;
}
@
catch
(
NSException
*
exception
)
{
}
catch
(
std
::
out_of_range
&
e
)
{
return
YES
;
return
YES
;
}
}
}
}
...
@@ -811,7 +789,7 @@ NSInteger const REQUEST_SEG = 1;
...
@@ -811,7 +789,7 @@ NSInteger const REQUEST_SEG = 1;
return
nil
;
return
nil
;
lrc
::
api
::
conversation
::
Info
&
conversation
=
*
convOpt
;
lrc
::
api
::
conversation
::
Info
&
conversation
=
*
convOpt
;
@
try
{
try
{
auto
contact
=
convModel_
->
owner
.
contactModel
->
getContact
(
conversation
.
participants
[
0
]);
auto
contact
=
convModel_
->
owner
.
contactModel
->
getContact
(
conversation
.
participants
[
0
]);
if
(
contact
.
profileInfo
.
type
==
lrc
::
api
::
profile
::
Type
::
INVALID
)
{
if
(
contact
.
profileInfo
.
type
==
lrc
::
api
::
profile
::
Type
::
INVALID
)
{
return
nil
;
return
nil
;
...
@@ -876,7 +854,7 @@ NSInteger const REQUEST_SEG = 1;
...
@@ -876,7 +854,7 @@ NSInteger const REQUEST_SEG = 1;
}
}
return
theMenu
;
return
theMenu
;
}
}
@
catch
(
NSException
*
exception
)
{
catch
(
std
::
out_of_range
&
e
)
{
return
nil
;
return
nil
;
}
}
}
}
...
...
ui/Base.lproj/Conversation.strings
View file @
98827a19
...
@@ -58,3 +58,12 @@
...
@@ -58,3 +58,12 @@
/* Class = "CocoaBindingsConnection"; ibShadowedIsNilPlaceholder = "Type a message"; ObjectID = "rQj-9q-WQ6"; */
/* Class = "CocoaBindingsConnection"; ibShadowedIsNilPlaceholder = "Type a message"; ObjectID = "rQj-9q-WQ6"; */
"rQj-9q-WQ6.ibShadowedIsNilPlaceholder" = "Type a message";
"rQj-9q-WQ6.ibShadowedIsNilPlaceholder" = "Type a message";
/* Class = "NSButtonCell"; title = "BLOCK"; ObjectID = "HSp-y7-w6n"; */
"HSp-y7-w6n.title" = "BLOCK";
/* Class = "NSButtonCell"; title = "REFUSE"; ObjectID = "pIg-Hr-SJn"; */
"pIg-Hr-SJn.title" = "REFUSE";
/* Class = "NSButtonCell"; title = "ACCEPT"; ObjectID = "xiC-2C-Zf4"; */
"xiC-2C-Zf4.title" = "ACCEPT";
ui/Base.lproj/Conversation.xib
View file @
98827a19
This diff is collapsed.
Click to expand it.
ui/Base.lproj/Localizable.strings
View file @
98827a19
...
@@ -304,3 +304,26 @@
...
@@ -304,3 +304,26 @@
/* share button tooltip */
/* share button tooltip */
"Share" = "Share";
"Share" = "Share";
/* Synchronization label for conversation {Name} */
"We are waiting for %@ connects to synchronize the conversation." = "We are waiting for %@ connects to synchronize the conversation.";
/* Incoming conversation request title */
"Hello, \nWould you like to join the conversation?" = "Hello, \nWould you like to join the conversation?";
/* Invitation request from {Name} */
"%@ has sent you a request for a conversation." = "%@ has sent you a request for a conversation.";
/* Synchronization explanation label */
"You have accepted the conversation request." = "You have accepted the conversation request.";
/* Send request to {Name} */
"%@ is not in your contacts." = "%@ is not in your contacts.";
/* Send request explanation */
"Send him/her a contact request to be able to exchange together." = "Send him/her a contact request to be able to exchange together.";
/* Wait for request acceptance from {Name} */
"%@ has not yet accepted your contact request." = "%@ has not yet accepted your contact request.";
/* Wait for request acceptance from {Name} explanation */
"%@ must accept your contact request to answer you." = "%@ must accept your contact request to answer you.";
ui/Base.lproj/RingWindow.xib
View file @
98827a19
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
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