@onyx-p/imlib-web 1.4.6 → 1.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.esm.js +96 -10
- package/index.umd.js +96 -9
- package/package.json +1 -1
- package/types/index.d.ts +4 -0
package/index.esm.js
CHANGED
@@ -26758,6 +26758,24 @@ function calcPosition(width, height, thumbnailConfig) {
|
|
26758
26758
|
return scale > thumbnailConfig.scale ? gtScale() : ltScale();
|
26759
26759
|
}
|
26760
26760
|
|
26761
|
+
function formatDurationSeconds(timeSeconds) {
|
26762
|
+
const seconds = Math.max(0, timeSeconds);
|
26763
|
+
const secondsPart = seconds % 60;
|
26764
|
+
const minutesPart = Math.floor(seconds / 60 % 60);
|
26765
|
+
const hoursPart = Math.floor(seconds / 3600);
|
26766
|
+
if (hoursPart > 0) {
|
26767
|
+
return `${hoursPart}:${minutesPart.toString().padStart(2, '0')}:${secondsPart.toString().padStart(2, '0')}`;
|
26768
|
+
} else {
|
26769
|
+
return `${minutesPart}:${secondsPart.toString().padStart(2, '0')}`;
|
26770
|
+
}
|
26771
|
+
}
|
26772
|
+
|
26773
|
+
const DefaultThumbnailConfig = {
|
26774
|
+
maxHeight: 500,
|
26775
|
+
maxWidth: 500,
|
26776
|
+
quality: 0.6,
|
26777
|
+
scale: 2.4
|
26778
|
+
};
|
26761
26779
|
class Img {
|
26762
26780
|
async create(file) {
|
26763
26781
|
try {
|
@@ -26769,13 +26787,7 @@ class Img {
|
|
26769
26787
|
compressWidth,
|
26770
26788
|
compressHeight
|
26771
26789
|
} = compress(image, 0.85, file.type);
|
26772
|
-
const
|
26773
|
-
maxHeight: 160,
|
26774
|
-
maxWidth: 160,
|
26775
|
-
quality: 0.6,
|
26776
|
-
scale: 2.4
|
26777
|
-
};
|
26778
|
-
const thumbnail = getThumbnail(image, config);
|
26790
|
+
const thumbnail = getThumbnail(image, DefaultThumbnailConfig);
|
26779
26791
|
return {
|
26780
26792
|
success: true,
|
26781
26793
|
message: new ImageMessage({
|
@@ -26912,6 +26924,66 @@ class File {
|
|
26912
26924
|
return content;
|
26913
26925
|
}
|
26914
26926
|
}
|
26927
|
+
class Sight {
|
26928
|
+
async create(file) {
|
26929
|
+
try {
|
26930
|
+
if (file.size > 100 * 1024 * 1024) {
|
26931
|
+
return {
|
26932
|
+
success: false
|
26933
|
+
};
|
26934
|
+
}
|
26935
|
+
const videoUrl = getBlobUrl(file);
|
26936
|
+
const video = document.createElement('video');
|
26937
|
+
video.src = videoUrl;
|
26938
|
+
await new Promise((resolve, reject) => {
|
26939
|
+
video.onloadedmetadata = resolve;
|
26940
|
+
video.onerror = reject;
|
26941
|
+
});
|
26942
|
+
const duration = video.duration;
|
26943
|
+
const width = video.videoWidth;
|
26944
|
+
const height = video.videoHeight;
|
26945
|
+
const scale = Math.min(DefaultThumbnailConfig.maxWidth / width, DefaultThumbnailConfig.maxHeight / height, DefaultThumbnailConfig.scale);
|
26946
|
+
const thumbnailWidth = Math.floor(width * scale);
|
26947
|
+
const thumbnailHeight = Math.floor(height * scale);
|
26948
|
+
const canvas = document.createElement('canvas');
|
26949
|
+
canvas.width = thumbnailWidth;
|
26950
|
+
canvas.height = thumbnailHeight;
|
26951
|
+
const ctx = canvas.getContext('2d');
|
26952
|
+
ctx?.drawImage(video, 0, 0, thumbnailWidth, thumbnailHeight);
|
26953
|
+
const thumbnailBlob = await new Promise(resolve => {
|
26954
|
+
canvas.toBlob(blob => resolve(blob), 'image/jpeg', DefaultThumbnailConfig.quality);
|
26955
|
+
});
|
26956
|
+
revokeBlobUrl(videoUrl);
|
26957
|
+
return {
|
26958
|
+
success: true,
|
26959
|
+
message: new VideoMessage({
|
26960
|
+
videoObjectKey: "",
|
26961
|
+
thumbnailObjectKey: "",
|
26962
|
+
during: formatDurationSeconds(duration),
|
26963
|
+
width,
|
26964
|
+
height,
|
26965
|
+
extension: getBlobExtension(file)
|
26966
|
+
}),
|
26967
|
+
files: [file, thumbnailBlob]
|
26968
|
+
};
|
26969
|
+
} catch (error) {
|
26970
|
+
return {
|
26971
|
+
success: false
|
26972
|
+
};
|
26973
|
+
}
|
26974
|
+
}
|
26975
|
+
updateMessageRemoteUrlProperty(messageContent, uploadedResult) {
|
26976
|
+
let content = deepClone(messageContent);
|
26977
|
+
const {
|
26978
|
+
urls: [videoObjectKey, thumbnailObjectKey],
|
26979
|
+
encryptedKey
|
26980
|
+
} = uploadedResult;
|
26981
|
+
content.videoObjectKey = videoObjectKey;
|
26982
|
+
content.thumbnailObjectKey = thumbnailObjectKey;
|
26983
|
+
content.encryptKey = encryptedKey;
|
26984
|
+
return content;
|
26985
|
+
}
|
26986
|
+
}
|
26915
26987
|
var FileType;
|
26916
26988
|
(function (FileType) {
|
26917
26989
|
FileType[FileType["IMAGE"] = 1] = "IMAGE";
|
@@ -26936,6 +27008,9 @@ const getMediaMessageCreator = fileType => {
|
|
26936
27008
|
case FileType.FILE:
|
26937
27009
|
creator = new File();
|
26938
27010
|
break;
|
27011
|
+
case FileType.SIGHT:
|
27012
|
+
creator = new Sight();
|
27013
|
+
break;
|
26939
27014
|
}
|
26940
27015
|
return creator;
|
26941
27016
|
};
|
@@ -26947,7 +27022,8 @@ async function sendMessage$1(conversation, message, options) {
|
|
26947
27022
|
const sendImageMessage$1 = createSendFunction.bind(null, FileType.IMAGE);
|
26948
27023
|
const sendGIFMessage$1 = createSendFunction.bind(null, FileType.GIF);
|
26949
27024
|
const sendHQVoiceMessage$1 = createSendFunction.bind(null, FileType.AUDIO);
|
26950
|
-
const
|
27025
|
+
const sendSightMessage$1 = createSendFunction.bind(null, FileType.AUDIO);
|
27026
|
+
const sendFileMessage$1 = createSendFunction.bind(null, FileType.SIGHT);
|
26951
27027
|
const sendRecallMessage = async (conversation, options) => {
|
26952
27028
|
const dialogId = getFullDialogId(conversation);
|
26953
27029
|
RecallMessageStore.addMessage(options.messageUId);
|
@@ -27093,7 +27169,7 @@ async function send(message, sentArgs) {
|
|
27093
27169
|
SentMessageStore.addMessage(sentArgs.messageId);
|
27094
27170
|
const baseParams = {
|
27095
27171
|
localId: Long.fromString(sentArgs.messageId),
|
27096
|
-
mediaFlag:
|
27172
|
+
mediaFlag: message.messageType !== MessageTypes.TEXT,
|
27097
27173
|
mediaConstructor: message.messageType,
|
27098
27174
|
msgPreContent: '',
|
27099
27175
|
msgPostContent: postEncryptedString,
|
@@ -27230,6 +27306,7 @@ class IMClient extends EventEmitter {
|
|
27230
27306
|
sendGIFMessage = sendGIFMessage$1;
|
27231
27307
|
sendHQVoiceMessage = sendHQVoiceMessage$1;
|
27232
27308
|
sendFileMessage = sendFileMessage$1;
|
27309
|
+
sendSightMessage = sendSightMessage$1;
|
27233
27310
|
recallMsg = sendRecallMessage;
|
27234
27311
|
async getRemoteHistoryMessages(conversation, options) {
|
27235
27312
|
const dialogId = getFullDialogId(conversation);
|
@@ -28593,6 +28670,15 @@ const sendFileMessage = async (conversation, msgBody, hooks, sendOptions) => {
|
|
28593
28670
|
_logSendError(conversation, response.code);
|
28594
28671
|
return response;
|
28595
28672
|
};
|
28673
|
+
const sendSightMessage = async (conversation, msgBody, hooks, sendOptions) => {
|
28674
|
+
assert('conversation', conversation, AssertRules.CONVERSATION, true);
|
28675
|
+
assert('uploader', imConfig.getUploader(), AssertRules.OBJECT, true);
|
28676
|
+
assert('msgBody.file', msgBody.file, file => file instanceof Blob && file.type === 'video/mp4', true);
|
28677
|
+
_logSendBefore(conversation);
|
28678
|
+
const response = await imClient.sendSightMessage(conversation, msgBody, hooks, sendOptions);
|
28679
|
+
_logSendError(conversation, response.code);
|
28680
|
+
return response;
|
28681
|
+
};
|
28596
28682
|
const recallMessage = async (conversation, options) => {
|
28597
28683
|
assert('options.messageUId', options.messageUId, AssertRules.STRING, true);
|
28598
28684
|
assert('options.sentTime', options.sentTime, AssertRules.NUMBER, true);
|
@@ -28692,4 +28778,4 @@ const _logSendError = (conversation, errorCode) => {
|
|
28692
28778
|
}
|
28693
28779
|
};
|
28694
28780
|
|
28695
|
-
export { ConnectionStatus, ConversationType, ErrorCode, ErrorDesc, Events, FileMessage, GIFMessage, VoiceMessage as HQVoiceMessage, ImageMessage, LogLevel, MentionedType, MessageDirection, MessageTypes, NotificationLevel, NotificationStatus, ReceivedStatus, SentStatus, TextMessage, VideoMessage, addEventListener, clearAllMessagesUnreadStatus, clearHistoryMessages, clearMessagesUnreadStatus, clearTextMessageDraft, connect, deleteMessages, disconnect, getAllConversationState, getAllUnreadMentionedCount, getBlockedConversationList, getConnectionStatus, getConversation, getConversationList, getConversationNotificationLevel, getConversationNotificationStatus, getHistoryMessages, getRemoteHistoryMessages, getServerTime, getTextMessageDraft, getTopConversationList, getTotalUnreadCount, getUnreadCount, getUnreadMentionedCount, init, logOut, mockLogin, onceEventListener, recallMessage, registerMessageType, removeConversation, removeEventListener, request, saveTextMessageDraft, sendFileMessage, sendGIFMessage, sendHQVoiceMessage, sendImageMessage, sendMessage, sendTextMessage, setConversationNotificationStatus, setConversationToTop, setUserLogged };
|
28781
|
+
export { ConnectionStatus, ConversationType, ErrorCode, ErrorDesc, Events, FileMessage, GIFMessage, VoiceMessage as HQVoiceMessage, ImageMessage, LogLevel, MentionedType, MessageDirection, MessageTypes, NotificationLevel, NotificationStatus, ReceivedStatus, SentStatus, TextMessage, VideoMessage, addEventListener, clearAllMessagesUnreadStatus, clearHistoryMessages, clearMessagesUnreadStatus, clearTextMessageDraft, connect, deleteMessages, disconnect, getAllConversationState, getAllUnreadMentionedCount, getBlockedConversationList, getConnectionStatus, getConversation, getConversationList, getConversationNotificationLevel, getConversationNotificationStatus, getHistoryMessages, getRemoteHistoryMessages, getServerTime, getTextMessageDraft, getTopConversationList, getTotalUnreadCount, getUnreadCount, getUnreadMentionedCount, init, logOut, mockLogin, onceEventListener, recallMessage, registerMessageType, removeConversation, removeEventListener, request, saveTextMessageDraft, sendFileMessage, sendGIFMessage, sendHQVoiceMessage, sendImageMessage, sendMessage, sendSightMessage, sendTextMessage, setConversationNotificationStatus, setConversationToTop, setUserLogged };
|
package/index.umd.js
CHANGED
@@ -26764,6 +26764,24 @@
|
|
26764
26764
|
return scale > thumbnailConfig.scale ? gtScale() : ltScale();
|
26765
26765
|
}
|
26766
26766
|
|
26767
|
+
function formatDurationSeconds(timeSeconds) {
|
26768
|
+
const seconds = Math.max(0, timeSeconds);
|
26769
|
+
const secondsPart = seconds % 60;
|
26770
|
+
const minutesPart = Math.floor(seconds / 60 % 60);
|
26771
|
+
const hoursPart = Math.floor(seconds / 3600);
|
26772
|
+
if (hoursPart > 0) {
|
26773
|
+
return `${hoursPart}:${minutesPart.toString().padStart(2, '0')}:${secondsPart.toString().padStart(2, '0')}`;
|
26774
|
+
} else {
|
26775
|
+
return `${minutesPart}:${secondsPart.toString().padStart(2, '0')}`;
|
26776
|
+
}
|
26777
|
+
}
|
26778
|
+
|
26779
|
+
const DefaultThumbnailConfig = {
|
26780
|
+
maxHeight: 500,
|
26781
|
+
maxWidth: 500,
|
26782
|
+
quality: 0.6,
|
26783
|
+
scale: 2.4
|
26784
|
+
};
|
26767
26785
|
class Img {
|
26768
26786
|
async create(file) {
|
26769
26787
|
try {
|
@@ -26775,13 +26793,7 @@
|
|
26775
26793
|
compressWidth,
|
26776
26794
|
compressHeight
|
26777
26795
|
} = compress(image, 0.85, file.type);
|
26778
|
-
const
|
26779
|
-
maxHeight: 160,
|
26780
|
-
maxWidth: 160,
|
26781
|
-
quality: 0.6,
|
26782
|
-
scale: 2.4
|
26783
|
-
};
|
26784
|
-
const thumbnail = getThumbnail(image, config);
|
26796
|
+
const thumbnail = getThumbnail(image, DefaultThumbnailConfig);
|
26785
26797
|
return {
|
26786
26798
|
success: true,
|
26787
26799
|
message: new ImageMessage({
|
@@ -26918,6 +26930,66 @@
|
|
26918
26930
|
return content;
|
26919
26931
|
}
|
26920
26932
|
}
|
26933
|
+
class Sight {
|
26934
|
+
async create(file) {
|
26935
|
+
try {
|
26936
|
+
if (file.size > 100 * 1024 * 1024) {
|
26937
|
+
return {
|
26938
|
+
success: false
|
26939
|
+
};
|
26940
|
+
}
|
26941
|
+
const videoUrl = getBlobUrl(file);
|
26942
|
+
const video = document.createElement('video');
|
26943
|
+
video.src = videoUrl;
|
26944
|
+
await new Promise((resolve, reject) => {
|
26945
|
+
video.onloadedmetadata = resolve;
|
26946
|
+
video.onerror = reject;
|
26947
|
+
});
|
26948
|
+
const duration = video.duration;
|
26949
|
+
const width = video.videoWidth;
|
26950
|
+
const height = video.videoHeight;
|
26951
|
+
const scale = Math.min(DefaultThumbnailConfig.maxWidth / width, DefaultThumbnailConfig.maxHeight / height, DefaultThumbnailConfig.scale);
|
26952
|
+
const thumbnailWidth = Math.floor(width * scale);
|
26953
|
+
const thumbnailHeight = Math.floor(height * scale);
|
26954
|
+
const canvas = document.createElement('canvas');
|
26955
|
+
canvas.width = thumbnailWidth;
|
26956
|
+
canvas.height = thumbnailHeight;
|
26957
|
+
const ctx = canvas.getContext('2d');
|
26958
|
+
ctx?.drawImage(video, 0, 0, thumbnailWidth, thumbnailHeight);
|
26959
|
+
const thumbnailBlob = await new Promise(resolve => {
|
26960
|
+
canvas.toBlob(blob => resolve(blob), 'image/jpeg', DefaultThumbnailConfig.quality);
|
26961
|
+
});
|
26962
|
+
revokeBlobUrl(videoUrl);
|
26963
|
+
return {
|
26964
|
+
success: true,
|
26965
|
+
message: new VideoMessage({
|
26966
|
+
videoObjectKey: "",
|
26967
|
+
thumbnailObjectKey: "",
|
26968
|
+
during: formatDurationSeconds(duration),
|
26969
|
+
width,
|
26970
|
+
height,
|
26971
|
+
extension: getBlobExtension(file)
|
26972
|
+
}),
|
26973
|
+
files: [file, thumbnailBlob]
|
26974
|
+
};
|
26975
|
+
} catch (error) {
|
26976
|
+
return {
|
26977
|
+
success: false
|
26978
|
+
};
|
26979
|
+
}
|
26980
|
+
}
|
26981
|
+
updateMessageRemoteUrlProperty(messageContent, uploadedResult) {
|
26982
|
+
let content = deepClone(messageContent);
|
26983
|
+
const {
|
26984
|
+
urls: [videoObjectKey, thumbnailObjectKey],
|
26985
|
+
encryptedKey
|
26986
|
+
} = uploadedResult;
|
26987
|
+
content.videoObjectKey = videoObjectKey;
|
26988
|
+
content.thumbnailObjectKey = thumbnailObjectKey;
|
26989
|
+
content.encryptKey = encryptedKey;
|
26990
|
+
return content;
|
26991
|
+
}
|
26992
|
+
}
|
26921
26993
|
var FileType;
|
26922
26994
|
(function (FileType) {
|
26923
26995
|
FileType[FileType["IMAGE"] = 1] = "IMAGE";
|
@@ -26942,6 +27014,9 @@
|
|
26942
27014
|
case FileType.FILE:
|
26943
27015
|
creator = new File();
|
26944
27016
|
break;
|
27017
|
+
case FileType.SIGHT:
|
27018
|
+
creator = new Sight();
|
27019
|
+
break;
|
26945
27020
|
}
|
26946
27021
|
return creator;
|
26947
27022
|
};
|
@@ -26953,7 +27028,8 @@
|
|
26953
27028
|
const sendImageMessage$1 = createSendFunction.bind(null, FileType.IMAGE);
|
26954
27029
|
const sendGIFMessage$1 = createSendFunction.bind(null, FileType.GIF);
|
26955
27030
|
const sendHQVoiceMessage$1 = createSendFunction.bind(null, FileType.AUDIO);
|
26956
|
-
const
|
27031
|
+
const sendSightMessage$1 = createSendFunction.bind(null, FileType.AUDIO);
|
27032
|
+
const sendFileMessage$1 = createSendFunction.bind(null, FileType.SIGHT);
|
26957
27033
|
const sendRecallMessage = async (conversation, options) => {
|
26958
27034
|
const dialogId = getFullDialogId(conversation);
|
26959
27035
|
RecallMessageStore.addMessage(options.messageUId);
|
@@ -27099,7 +27175,7 @@
|
|
27099
27175
|
SentMessageStore.addMessage(sentArgs.messageId);
|
27100
27176
|
const baseParams = {
|
27101
27177
|
localId: Long.fromString(sentArgs.messageId),
|
27102
|
-
mediaFlag:
|
27178
|
+
mediaFlag: message.messageType !== MessageTypes.TEXT,
|
27103
27179
|
mediaConstructor: message.messageType,
|
27104
27180
|
msgPreContent: '',
|
27105
27181
|
msgPostContent: postEncryptedString,
|
@@ -27236,6 +27312,7 @@
|
|
27236
27312
|
sendGIFMessage = sendGIFMessage$1;
|
27237
27313
|
sendHQVoiceMessage = sendHQVoiceMessage$1;
|
27238
27314
|
sendFileMessage = sendFileMessage$1;
|
27315
|
+
sendSightMessage = sendSightMessage$1;
|
27239
27316
|
recallMsg = sendRecallMessage;
|
27240
27317
|
async getRemoteHistoryMessages(conversation, options) {
|
27241
27318
|
const dialogId = getFullDialogId(conversation);
|
@@ -28599,6 +28676,15 @@
|
|
28599
28676
|
_logSendError(conversation, response.code);
|
28600
28677
|
return response;
|
28601
28678
|
};
|
28679
|
+
const sendSightMessage = async (conversation, msgBody, hooks, sendOptions) => {
|
28680
|
+
assert('conversation', conversation, AssertRules.CONVERSATION, true);
|
28681
|
+
assert('uploader', imConfig.getUploader(), AssertRules.OBJECT, true);
|
28682
|
+
assert('msgBody.file', msgBody.file, file => file instanceof Blob && file.type === 'video/mp4', true);
|
28683
|
+
_logSendBefore(conversation);
|
28684
|
+
const response = await imClient.sendSightMessage(conversation, msgBody, hooks, sendOptions);
|
28685
|
+
_logSendError(conversation, response.code);
|
28686
|
+
return response;
|
28687
|
+
};
|
28602
28688
|
const recallMessage = async (conversation, options) => {
|
28603
28689
|
assert('options.messageUId', options.messageUId, AssertRules.STRING, true);
|
28604
28690
|
assert('options.sentTime', options.sentTime, AssertRules.NUMBER, true);
|
@@ -28745,6 +28831,7 @@
|
|
28745
28831
|
exports.sendHQVoiceMessage = sendHQVoiceMessage;
|
28746
28832
|
exports.sendImageMessage = sendImageMessage;
|
28747
28833
|
exports.sendMessage = sendMessage;
|
28834
|
+
exports.sendSightMessage = sendSightMessage;
|
28748
28835
|
exports.sendTextMessage = sendTextMessage;
|
28749
28836
|
exports.setConversationNotificationStatus = setConversationNotificationStatus;
|
28750
28837
|
exports.setConversationToTop = setConversationToTop;
|
package/package.json
CHANGED
package/types/index.d.ts
CHANGED
@@ -195,6 +195,10 @@ export declare const sendHQVoiceMessage: (conversation: IConversationOption, msg
|
|
195
195
|
* 发送文件消息
|
196
196
|
*/
|
197
197
|
export declare const sendFileMessage: (conversation: IConversationOption, msgBody: ISendBody, hooks?: IUploadHooks, sendOptions?: IUploadMessageOption) => IPromiseResult<IReceivedMessage>;
|
198
|
+
/**
|
199
|
+
* 发送短视频消息
|
200
|
+
*/
|
201
|
+
export declare const sendSightMessage: (conversation: IConversationOption, msgBody: ISendBody, hooks?: IUploadHooks, sendOptions?: IUploadMessageOption) => IPromiseResult<IReceivedMessage>;
|
198
202
|
/**
|
199
203
|
* 撤回消息
|
200
204
|
* @param options
|