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
linphone-iphone
Commits
aee1b055
Commit
aee1b055
authored
Apr 08, 2021
by
DanmeiChen
Browse files
add option to enable VFS
parent
443152f8
Pipeline
#27537
failed with stage
in 13 seconds
Changes
5
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
102 additions
and
37 deletions
+102
-37
Classes/LinphoneAppDelegate.m
Classes/LinphoneAppDelegate.m
+3
-3
Classes/LinphoneCoreSettingsStore.m
Classes/LinphoneCoreSettingsStore.m
+6
-0
Classes/LinphoneUI/UIChatBubblePhotoCell.m
Classes/LinphoneUI/UIChatBubblePhotoCell.m
+47
-14
Classes/LinphoneUI/UIChatBubbleTextCell.m
Classes/LinphoneUI/UIChatBubbleTextCell.m
+36
-20
Settings/InAppSettings.bundle/Chat.plist
Settings/InAppSettings.bundle/Chat.plist
+10
-0
No files found.
Classes/LinphoneAppDelegate.m
View file @
aee1b055
...
...
@@ -265,9 +265,9 @@
#ifdef USE_CRASHLYTICS
[
FIRApp
configure
];
#endif
if
([[
NSUserDefaults
standardUserDefaults
]
b
oolForKey
:
@"vfs_enabled"
]
&&
!
VFSUtil
.
activateVFS
)
{
if
([[
LinphoneManager
instance
]
lpConfigB
oolForKey
:
@"vfs_enabled
_preference
"
]
&&
!
VFSUtil
.
activateVFS
)
{
[
VFSUtil
oslogWithLog
:
@"[VFS] Error unable to activate."
level
:
OS_LOG_TYPE_ERROR
];
}
...
...
Classes/LinphoneCoreSettingsStore.m
View file @
aee1b055
...
...
@@ -339,6 +339,7 @@
int
maxSize
=
linphone_core_get_max_size_for_auto_download_incoming_files
(
LC
);
[
self
setObject
:
maxSize
==
0
?
@"Always"
:
(
maxSize
==-
1
?
@"Nerver"
:
@"Customize"
)
forKey
:
@"auto_download_mode"
];
[
self
setInteger
:
maxSize
forKey
:
@"auto_download_incoming_files_max_size"
];
[
self
setBool
:[
lm
lpConfigBoolForKey
:
@"vfs_enabled_preference"
withDefault
:
NO
]
forKey
:
@"vfs_enabled_mode"
];
[
self
setBool
:[
lm
lpConfigBoolForKey
:
@"auto_write_to_gallery_preference"
withDefault
:
YES
]
forKey
:
@"auto_write_to_gallery_mode"
];
}
...
...
@@ -780,6 +781,11 @@
}
linphone_core_set_max_size_for_auto_download_incoming_files
(
LC
,
maxSize
);
[
lm
lpConfigSetString
:[
self
stringForKey
:
@"auto_download_mode"
]
forKey
:
@"auto_download_mode"
];
BOOL
vfsEnabled
=
[
self
boolForKey
:
@"vfs_enabled_mode"
]
||
[
lm
lpConfigBoolForKey
:
@"vfs_enabled_preference"
];
if
(
vfsEnabled
)
{
[
lm
lpConfigSetBool
:
TRUE
forKey
:
@"vfs_enabled_preference"
];
[
self
setBool
:
TRUE
forKey
:
@"vfs_enabled_mode"
];
}
[
lm
lpConfigSetBool
:[
self
boolForKey
:
@"auto_write_to_gallery_mode"
]
forKey
:
@"auto_write_to_gallery_preference"
];
// network section
...
...
Classes/LinphoneUI/UIChatBubblePhotoCell.m
View file @
aee1b055
...
...
@@ -57,6 +57,15 @@
return
self
;
}
-
(
void
)
dealloc
{
NSString
*
filePath
=
[
LinphoneManager
getMessageAppDataForKey
:
@"encryptedfile"
inMessage
:
self
.
message
];
if
(
filePath
)
{
[[
NSFileManager
defaultManager
]
removeItemAtPath
:
filePath
error
:
NULL
];
[
LinphoneManager
setValueInMessageAppData
:
NULL
forKey
:
@"encryptedfile"
inMessage
:
self
.
message
];
}
}
-
(
void
)
onDelete
{
[
super
onDelete
];
}
...
...
@@ -92,6 +101,7 @@
}
[
super
setChatMessageForCbs
:
amessage
];
[
LinphoneManager
setValueInMessageAppData
:
NULL
forKey
:
@"encryptedfile"
inMessage
:
self
.
message
];
}
-
(
void
)
loadImageAsset
:(
PHAsset
*
)
asset
image
:
(
UIImage
*
)
image
{
...
...
@@ -161,6 +171,7 @@ static const CGFloat CELL_IMAGE_X_MARGIN = 100;
NSString
*
localImage
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localimage"
inMessage
:
self
.
message
];
NSString
*
localVideo
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localvideo"
inMessage
:
self
.
message
];
NSString
*
localFile
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localfile"
inMessage
:
self
.
message
];
NSString
*
filePath
=
[
LinphoneManager
getMessageAppDataForKey
:
@"encryptedfile"
inMessage
:
self
.
message
];
assert
(
is_external
||
localImage
||
localVideo
||
localFile
);
LinphoneContent
*
fileContent
=
linphone_chat_message_get_file_transfer_information
(
self
.
message
);
...
...
@@ -190,9 +201,17 @@ static const CGFloat CELL_IMAGE_X_MARGIN = 100;
NSString
*
fileType
=
[
NSString
stringWithUTF8String
:
linphone_content_get_type
(
fileContent
)];
NSString
*
fileName
=
[
NSString
stringWithUTF8String
:
linphone_content_get_name
(
fileContent
)];
NSString
*
filePath
=
[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:
fileName
];
if
(
!
filePath
)
{
char
*
cPath
=
linphone_content_get_plain_file_path
(
fileContent
);
if
(
cPath
)
{
filePath
=
[
NSString
stringWithUTF8String
:
cPath
];
ms_free
(
cPath
);
[
LinphoneManager
setValueInMessageAppData
:
filePath
forKey
:
@"encryptedfile"
inMessage
:
self
.
message
];
}
else
{
filePath
=
[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:
fileName
];
}
}
if
([[
NSFileManager
defaultManager
]
fileExistsAtPath
:
filePath
])
{
// already downloaded
if
(
!
assetIsLoaded
)
{
...
...
@@ -201,7 +220,7 @@ static const CGFloat CELL_IMAGE_X_MARGIN = 100;
if
([
key
isEqualToString
:
@"localimage"
])
{
// we did not load the image yet, so start doing so
if
(
_messageImageView
.
image
==
nil
)
{
NSData
*
data
=
[
NSData
dataWithContentsOfFile
:
filePath
];
NSData
*
data
=
[
NSData
dataWithContentsOfFile
:
filePath
];
UIImage
*
image
=
[[
UIImage
alloc
]
initWithData
:
data
];
if
(
image
)
{
[
self
loadImageAsset
:
nil
image
:
image
];
...
...
@@ -213,7 +232,7 @@ static const CGFloat CELL_IMAGE_X_MARGIN = 100;
}
}
else
if
([
key
isEqualToString
:
@"localvideo"
])
{
if
(
_messageImageView
.
image
==
nil
)
{
UIImage
*
image
=
[
UIChatBubbleTextCell
getImageFromVideoUrl
:[
ChatConversationView
getCacheFileUrl
:
file
Name
]];
UIImage
*
image
=
[
UIChatBubbleTextCell
getImageFromVideoUrl
:[
NSURL
fileURLWithPath
:
file
Path
]];
if
(
image
)
{
[
self
loadImageAsset
:
nil
image
:
image
];
_imageGestureRecognizer
.
enabled
=
NO
;
...
...
@@ -224,11 +243,11 @@ static const CGFloat CELL_IMAGE_X_MARGIN = 100;
}
}
else
if
([
key
isEqualToString
:
@"localfile"
])
{
if
([
fileType
isEqualToString
:
@"video"
])
{
UIImage
*
image
=
[
UIChatBubbleTextCell
getImageFromVideoUrl
:[
ChatConversationView
getCacheFileUrl
:
file
Name
]];
UIImage
*
image
=
[
UIChatBubbleTextCell
getImageFromVideoUrl
:[
NSURL
fileURLWithPath
:
file
Path
]];
[
self
loadImageAsset
:
nil
image
:
image
];
_imageGestureRecognizer
.
enabled
=
NO
;
}
else
if
([
fileName
hasSuffix
:
@"JPG"
]
||
[
fileName
hasSuffix
:
@"PNG"
]
||
[
fileName
hasSuffix
:
@"jpg"
]
||
[
fileName
hasSuffix
:
@"png"
])
{
NSData
*
data
=
[
ChatConversationView
getCacheFileData
:
file
Name
];
NSData
*
data
=
[
NSData
dataWithContentsOfFile
:
file
Path
];
UIImage
*
image
=
[[
UIImage
alloc
]
initWithData
:
data
];
[
self
loadImageAsset
:
nil
image
:
image
];
_imageGestureRecognizer
.
enabled
=
YES
;
...
...
@@ -390,14 +409,15 @@ static const CGFloat CELL_IMAGE_X_MARGIN = 100;
}
-
(
IBAction
)
onPlayClick
:(
id
)
sender
{
NSString
*
localVideo
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localvideo"
inMessage
:
self
.
message
];
NSString
*
localFile
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localfile"
inMessage
:
self
.
message
];
if
(
localVideo
&&
[[
NSFileManager
defaultManager
]
fileExistsAtPath
:[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:
localVideo
]])
{
AVPlayer
*
player
=
[
AVPlayer
playerWithURL
:[
ChatConversationView
getCacheFileUrl
:
localVideo
]];
[
self
playVideoByPlayer
:
player
];
return
;
}
else
if
(
localFile
&&
[[
NSFileManager
defaultManager
]
fileExistsAtPath
:[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:
localFile
]])
{
AVPlayer
*
player
=
[
AVPlayer
playerWithURL
:[
ChatConversationView
getCacheFileUrl
:
localFile
]];
NSString
*
filePath
=
[
LinphoneManager
getMessageAppDataForKey
:
@"encryptedfile"
inMessage
:
self
.
message
];
if
(
!
filePath
)
{
NSString
*
localVideo
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localvideo"
inMessage
:
self
.
message
];
NSString
*
localFile
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localfile"
inMessage
:
self
.
message
];
filePath
=
[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:(
localVideo
?:
localFile
)];
}
if
([[
NSFileManager
defaultManager
]
fileExistsAtPath
:
filePath
])
{
AVPlayer
*
player
=
[
AVPlayer
playerWithURL
:[
NSURL
fileURLWithPath
:
filePath
]];
[
self
playVideoByPlayer
:
player
];
return
;
}
...
...
@@ -449,6 +469,11 @@ static const CGFloat CELL_IMAGE_X_MARGIN = 100;
-
(
IBAction
)
onFileClick
:(
id
)
sender
{
ChatConversationView
*
view
=
VIEW
(
ChatConversationView
);
NSString
*
filePath
=
[
LinphoneManager
getMessageAppDataForKey
:
@"encryptedfile"
inMessage
:
self
.
message
];
if
(
filePath
)
{
[
view
openFileWithURL
:[
NSURL
URLWithString
:
filePath
]];
return
;
}
NSString
*
name
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localfile"
inMessage
:
self
.
message
];
if
([[
NSFileManager
defaultManager
]
fileExistsAtPath
:[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:
name
]])
{
[
view
openFileWithURL
:[
ChatConversationView
getCacheFileUrl
:
name
]];
...
...
@@ -487,6 +512,14 @@ static const CGFloat CELL_IMAGE_X_MARGIN = 100;
if
(
!
[
_messageImageView
isLoading
])
{
ImageView
*
view
=
VIEW
(
ImageView
);
[
PhoneMainView
.
instance
changeCurrentView
:
view
.
compositeViewDescription
];
NSString
*
filePath
=
[
LinphoneManager
getMessageAppDataForKey
:
@"encryptedfile"
inMessage
:
self
.
message
];
if
(
filePath
)
{
NSData
*
data
=
[
NSData
dataWithContentsOfFile
:
filePath
];
UIImage
*
image
=
[[
UIImage
alloc
]
initWithData
:
data
];
[
view
setImage
:
image
];
return
;
}
NSString
*
localImage
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localimage"
inMessage
:
self
.
message
];
NSString
*
localFile
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localfile"
inMessage
:
self
.
message
];
NSString
*
imageName
=
NULL
;
...
...
Classes/LinphoneUI/UIChatBubbleTextCell.m
View file @
aee1b055
...
...
@@ -278,25 +278,31 @@
NSString
*
localImage
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localimage"
inMessage
:
_message
];
NSString
*
localVideo
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localvideo"
inMessage
:
_message
];
NSString
*
localFile
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localfile"
inMessage
:
_message
];
/*FileTransferDelegate *thiz = [FileTransferDelegate messageDelegate:_message];
if (thiz) {
[thiz stop]
}*/
[
self
onDelete
];
if
(
localImage
){
dispatch_async
(
dispatch_get_main_queue
(),
^
{
[
_chatRoomDelegate
resendFile
:[
ChatConversationView
getCacheFileData
:
localImage
]
withName
:
localImage
type
:
@"image"
key
:
@"localimage"
message
:
self
.
textMessage
];
});
}
else
if
(
localVideo
)
{
dispatch_async
(
dispatch_get_main_queue
(),
^
{
[
_chatRoomDelegate
resendFile
:[
ChatConversationView
getCacheFileData
:
localVideo
]
withName
:
localVideo
type
:
@"video"
key
:
@"localvideo"
message
:
self
.
textMessage
];
});
}
else
if
(
localFile
)
{
dispatch_async
(
dispatch_get_main_queue
(),
^
{
[
_chatRoomDelegate
resendFile
:[
ChatConversationView
getCacheFileData
:
localFile
]
withName
:
localFile
type
:
@"image"
key
:
@"localfile"
message
:
self
.
textMessage
];
});
}
dispatch_async
(
dispatch_get_main_queue
(),
^
{
LinphoneContent
*
fileContent
=
linphone_chat_message_get_file_transfer_information
(
_message
);
NSData
*
data
=
NULL
;
char
*
cPath
=
linphone_content_get_plain_file_path
(
fileContent
);
if
(
cPath
)
{
NSString
*
filePath
=
[
NSString
stringWithUTF8String
:
linphone_content_get_plain_file_path
(
fileContent
)];
data
=
[
NSData
dataWithContentsOfFile
:
filePath
];
ms_free
(
cPath
);
[[
NSFileManager
defaultManager
]
removeItemAtPath
:
filePath
error
:
NULL
];
}
if
(
localImage
)
{
[
_chatRoomDelegate
resendFile
:
(
data
?:[
ChatConversationView
getCacheFileData
:
localImage
])
withName
:
localImage
type
:
@"image"
key
:
@"localimage"
message
:
self
.
textMessage
];
}
else
if
(
localVideo
)
{
[
_chatRoomDelegate
resendFile
:(
data
?:[
ChatConversationView
getCacheFileData
:
localVideo
])
withName
:
localVideo
type
:
@"video"
key
:
@"localvideo"
message
:
self
.
textMessage
];
}
else
{
[
_chatRoomDelegate
resendFile
:(
data
?:[
ChatConversationView
getCacheFileData
:
localFile
])
withName
:
localFile
type
:
@"image"
key
:
@"localfile"
message
:
self
.
textMessage
];
}
});
}
else
{
[
self
onDelete
];
double
delayInSeconds
=
0
.
4
;
...
...
@@ -403,6 +409,7 @@ static const CGFloat CELL_IMAGE_X_MARGIN = 100;
NSString
*
localImage
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localimage"
inMessage
:
chat
];
NSString
*
localFile
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localfile"
inMessage
:
chat
];
NSString
*
localVideo
=
[
LinphoneManager
getMessageAppDataForKey
:
@"localvideo"
inMessage
:
chat
];
NSString
*
filePath
=
[
LinphoneManager
getMessageAppDataForKey
:
@"encryptedfile"
inMessage
:
chat
];
CGSize
textSize
=
CGSizeMake
(
0
,
0
);
if
(
!
[
messageText
isEqualToString
:
@"🗻"
])
{
...
...
@@ -416,10 +423,12 @@ static const CGFloat CELL_IMAGE_X_MARGIN = 100;
if
(
localFile
)
{
UIImage
*
image
=
nil
;
NSString
*
type
=
[
NSString
stringWithUTF8String
:
linphone_content_get_type
(
fileContent
)];
NSString
*
filePath
=
[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:
localFile
];
if
(
!
filePath
)
{
filePath
=
[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:
localFile
];
}
if
([
type
isEqualToString
:
@"video"
])
{
if
([[
NSFileManager
defaultManager
]
fileExistsAtPath
:
filePath
])
{
image
=
[
self
getImageFromVideoUrl
:[
ChatConversationView
getCacheFileUrl
:
localFile
]];
image
=
[
self
getImageFromVideoUrl
:[
NSURL
fileURLWithPath
:
filePath
]];
}
else
{
image
=
[
self
getImageFromVideoUrl
:[
VIEW
(
ChatConversationView
)
getICloudFileUrl
:
localFile
]];
}
...
...
@@ -442,15 +451,22 @@ static const CGFloat CELL_IMAGE_X_MARGIN = 100;
return
CGSizeMake
(
CELL_MIN_WIDTH
+
CELL_MESSAGE_X_MARGIN
,
CELL_MIN_HEIGHT
+
CELL_MESSAGE_Y_MARGIN
+
textSize
.
height
+
20
);
}
if
(
localImage
&&
[[
NSFileManager
defaultManager
]
fileExistsAtPath
:[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:
localImage
]])
{
NSData
*
data
=
[
ChatConversationView
getCacheFileData
:
localImage
];
if
(
!
filePath
)
{
if
(
localImage
)
{
filePath
=
[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:
localImage
];
}
else
{
filePath
=
[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:
localVideo
];
}
}
if
(
localImage
&&
[[
NSFileManager
defaultManager
]
fileExistsAtPath
:
filePath
])
{
NSData
*
data
=
[
NSData
dataWithContentsOfFile
:
filePath
];
UIImage
*
image
=
[[
UIImage
alloc
]
initWithData
:
data
];
if
(
!
image
)
{
return
[
self
ViewHeightForFile
:
width
];
}
originalImageSize
=
image
.
size
;
}
else
if
(
localVideo
&&
[[
NSFileManager
defaultManager
]
fileExistsAtPath
:
[[
LinphoneManager
cacheDirectory
]
stringByAppendingPathComponent
:
localVideo
]
])
{
UIImage
*
image
=
[
UIChatBubbleTextCell
getImageFromVideoUrl
:[
ChatConversationView
getCacheFileUrl
:
localVideo
]];
}
else
if
(
localVideo
&&
[[
NSFileManager
defaultManager
]
fileExistsAtPath
:
filePath
])
{
UIImage
*
image
=
[
UIChatBubbleTextCell
getImageFromVideoUrl
:[
NSURL
URLWithString
:
filePath
]];
if
(
!
image
)
{
return
[
self
ViewHeightForFile
:
width
];
}
...
...
Settings/InAppSettings.bundle/Chat.plist
View file @
aee1b055
...
...
@@ -26,6 +26,16 @@
<string>
Customize
</string>
</array>
</dict>
<dict>
<key>
DefaultValue
</key>
<false/>
<key>
Key
</key>
<string>
vfs_enabled_mode
</string>
<key>
Title
</key>
<string>
Enable VFS
</string>
<key>
Type
</key>
<string>
PSToggleSwitchSpecifier
</string>
</dict>
<dict>
<key>
DefaultValue
</key>
<true/>
...
...
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