podchat
Version:
Javascript SDK to use POD's Chat Service
1,142 lines (1,060 loc) • 46.8 kB
JavaScript
import Utility from "../../utility/utility";
import {CHAT_ERRORS, imageExtentions, imageMimeTypes, SERVICES_PATH} from "../constants";
import Mime from "mime";
import SizeOf from "image-size";
// const https = require('https');
// const fs = require('fs');
function FileMethods(app) {
function cancelFileDownload (params, callback) {
if (params) {
if (typeof params.uniqueId == 'string') {
var uniqueId = params.uniqueId;
app.store.httpRequestObject[eval('uniqueId')] && app.store.httpRequestObject[eval('uniqueId')].abort();
app.store.httpRequestObject[eval('uniqueId')] && delete (app.store.httpRequestObject[eval('uniqueId')]);
callback && callback(uniqueId);
}
}
return;
}
function getImageFromPodspaceV2(params, callback) {
var downloadUniqueId = Utility.generateUUID(),
getImageData = {
size: params.size,
quality: params.quality,
crop: params.crop
};
if (params) {
if (params.hashCode && typeof params.hashCode == 'string') {
getImageData.hash = params.hashCode;
} else {
callback({
hasError: true,
error: 'Enter a file hash to get'
});
return;
}
if (params.responseType === 'link') {
var returnLink = app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS
+ SERVICES_PATH.PODSPACE_DOWNLOAD_IMAGE_V2.replace('{fileHash}', params.hashCode) + `?size=${params.size}&quality=${params.quality}&crop=${params.crop}`;
//+ SERVICES_PATH.PODSPACE_DOWNLOAD_IMAGE + `?hash=${params.hashCode}&_token_=${token}&_token_issuer_=1&size=${params.size}&quality=${params.quality}&crop=${params.crop}`;
callback({
hasError: false,
type: 'link',
result: returnLink
});
} else if (params.responseType === 'base64') {
app.httpRequest.httpRequest({
url: app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS
+ SERVICES_PATH.PODSPACE_DOWNLOAD_IMAGE_V2.replace('{fileHash}', params.hashCode) + `?size=${params.size}&quality=${params.quality}&crop=${params.crop}`,
method: 'GET',
uniqueId: downloadUniqueId,
responseType: 'blob',
headers: {
'Authorization': 'Bearer ' + app.sdkParams.token
},
enableDownloadProgressEvents: params.enableDownloadProgressEvents,
hashCode: params.hashCode
//data: getImageData
}, function (result) {
if (!result.hasError) {
var fr = new FileReader();
fr.onloadend = function () {
callback({
hasError: result.hasError,
type: 'base64',
result: fr.result
});
}
fr.readAsDataURL(result);
} else {
callback({
hasError: true,
result
});
}
});
return {
uniqueId: downloadUniqueId,
cancel: function () {
cancelFileDownload({
uniqueId: downloadUniqueId
}, function () {
app.sdkParams.consoleLogging && console.log(`"${downloadUniqueId}" - Image download has been canceled!`);
});
}
};
}
/* else if (params.responseType === 'file') {
const options = {
hostname: 'podspace.sandpod.ir',
path: SERVICES_PATH.PODSPACE_DOWNLOAD_IMAGE_V2.replace('{fileHash}', params.hashCode) + `?size=${params.size}&quality=${params.quality}&crop=${params.crop}`,
headers: {
Authorization: 'Bearer ' + app.sdkParams.token
}
};
// console.log('=========== getImageFromPodspaceV2', params, app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS
// + SERVICES_PATH.PODSPACE_DOWNLOAD_IMAGE_V2.replace('{fileHash}', params.hashCode) + `?size=${params.size}&quality=${params.quality}&crop=${params.crop}`);
console.log('=========== getImageFromPodspaceV2 ', options);
https.get(options, (response) => {
// response.pipe(params.fileStream);
response.on("data", d => {
console.log('got data', {d})
callback({
hasError: false,
type: 'file',
result: {chunk: d}
});
})
let result = '';
// params.fileStream.on('finish', function() {
// params.fileStream.close(); // close() is async, call cb after close completes.
//
// callback({
// hasError: false,
// type: 'file',
// // result: {done: true}
// });
// });
// response.on('data', function (chunk) {
// result += chunk;
// });
//
// response.on('end', function () {
// console.log(result);
// });
}).on('error', function(error) { // Handle errors
callback({
hasError: true,
type: 'file',
result: {error}
});
// fs.unlink(dest); // Delete the file async. (But we don't check the result)
// if (cb) cb(err.message);
});
// if (!result.hasError) {
// callback({
// hasError: result.hasError,
// type: 'blob',
// result: result
// });
// } else {
// callback({
// hasError: true,
// result
// });
// }
} */
else {
// console.log('=========== getImageFromPodspaceV2', params, app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS
// + SERVICES_PATH.PODSPACE_DOWNLOAD_IMAGE_V2.replace('{fileHash}', params.hashCode) + `?size=${params.size}&quality=${params.quality}&crop=${params.crop}`);
// console.log('getImageFromPodspaceV2 ====> ', app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS
// + SERVICES_PATH.PODSPACE_DOWNLOAD_IMAGE_V2.replace('{fileHash}', params.hashCode) + `?size=${params.size}&quality=${params.quality}&crop=${params.crop}`,
// );
app.httpRequest.httpRequest({
url: app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS
+ SERVICES_PATH.PODSPACE_DOWNLOAD_IMAGE_V2.replace('{fileHash}', params.hashCode) + `?size=${params.size}&quality=${params.quality}&crop=${params.crop}`,
method: 'GET',
responseType: 'blob',
uniqueId: downloadUniqueId,
headers: {
'Authorization': 'Bearer ' + app.sdkParams.token
},
enableDownloadProgressEvents: params.enableDownloadProgressEvents,
hashCode: params.hashCode
//data: getImageData
}, function (result) {
if (!result.hasError) {
callback({
hasError: result.hasError,
type: 'blob',
result: result
});
} else {
callback({
hasError: true,
result
});
}
});
return {
uniqueId: downloadUniqueId,
cancel: function () {
cancelFileDownload({
uniqueId: downloadUniqueId
}, function () {
app.sdkParams.consoleLogging && console.log(`"${downloadUniqueId}" - Image download has been canceled!`);
});
}
};
}
}
}
function getFileFromPodspaceNew (params, callback) {
var downloadUniqueId = Utility.generateUUID(),
getFileData = {};
if (params) {
if (params.hashCode && typeof params.hashCode == 'string') {
getFileData.hash = params.hashCode;
} else {
callback({
hasError: true,
error: 'Enter a file hash to get'
});
return;
}
if (params.checkUserGroupAccess) {
getFileData.checkUserGroupAccess = true;
}
}
if (params.responseType === 'link') {
var returnLink = app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS + SERVICES_PATH.PODSPACE_DOWNLOAD_FILE_NEW.replace('{fileHash}', params.hashCode) + `?checkUserGroupAccess=true`;
callback({
hasError: false,
type: 'link',
result: returnLink
});
} else {
app.httpRequest.httpRequest({
url: app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS + SERVICES_PATH.PODSPACE_DOWNLOAD_FILE_NEW.replace('{fileHash}', params.hashCode) + `?checkUserGroupAccess=true`,
method: 'GET',
responseType: 'blob',
uniqueId: downloadUniqueId,
headers: {
'Authorization': 'Bearer ' + app.sdkParams.token
},
enableDownloadProgressEvents: params.enableDownloadProgressEvents,
hashCode: params.hashCode
//data: getFileData
}, function (result) {
if (!result.hasError) {
callback({
hasError: result.hasError,
result: result,
type: 'blob'
});
} else {
callback({
hasError: true
});
}
});
return {
uniqueId: downloadUniqueId,
cancel: function () {
cancelFileDownload({
uniqueId: downloadUniqueId
}, function () {
app.sdkParams.consoleLogging && console.log(`"${downloadUniqueId}" - File download has been canceled!`);
});
}
};
}
}
/**
* Get Image Download Link From PodSpace
*
* This functions gets an uploaded image download link from Pod Space File Server.
*
* @since 9.1.3
* @access private
*
* @param {string} hashCode HashCode of uploaded file
*
* @return {string} Image Link
*/
function getImageDownloadLinkFromPodspace (params, callback) {
if (params) {
if (params.hashCode && typeof params.hashCode == 'string') {
var downloadUrl = app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS + SERVICES_PATH.PODSPACE_DOWNLOAD_IMAGE + '?hash=' + params.hashCode;
callback && callback({
hasError: false,
downloadUrl: downloadUrl
});
return downloadUrl;
} else {
callback && callback({
hasError: true,
error: 'Enter a image hash to get download link!'
});
return;
}
}
}
function cancelFileUpload (params, callback) {
if (params) {
if (typeof params.uniqueId == 'string') {
var uniqueId = params.uniqueId;
app.store.httpRequestObject[eval('uniqueId')] && app.store.httpRequestObject[eval('uniqueId')].abort();
app.store.httpRequestObject[eval('uniqueId')] && delete (app.store.httpRequestObject[eval('uniqueId')]);
app.messageQueues.deleteFromChatUploadQueue({
message: {
uniqueId: uniqueId
}
}, callback);
}
}
return;
}
/**
* Upload File To Pod Space
*
* Upload files to Pod Space Server
*
* @since 3.9.9
* @access private
*
* @param {string} fileName A name for the file
* @param {file} file FILE: the file
* @param {string} userGroupHash Unique identifier of threads on podspace
* @param {string} token User Token
* @param {string} _token_issuer_ Token Issuer
*
* @link
*
* @return {object} Uploaded File Object
*/
function uploadFileToPodspace (params, callback) {
var fileName,
fileType,
fileSize,
fileExtension,
uploadUniqueId,
uploadThreadId,
userGroupHash;
if (Utility.isNode()) {
fileName = params.file.split('/')
.pop();
fileType = Mime.getType(params.file);
fileSize = app.fs.statSync(params.file).size;
fileExtension = params.file.split('.')
.pop();
} else {
fileName = params.file.name;
fileType = params.file.type;
fileSize = params.file.size;
fileExtension = params.file.name.split('.')
.pop();
}
var uploadFileData = {};
if (params) {
if (typeof params.file !== 'undefined') {
uploadFileData.file = params.file;
}
if (params.randomFileName) {
uploadFileData.filename = Utility.generateUUID() + '.' + fileExtension;
} else {
uploadFileData.filename = fileName;
}
uploadFileData.fileSize = fileSize;
if (parseInt(params.threadId) > 0) {
uploadThreadId = params.threadId;
uploadFileData.threadId = params.threadId;
} else {
uploadThreadId = 0;
uploadFileData.threadId = 0;
}
if (typeof params.uniqueId == 'string') {
uploadUniqueId = params.uniqueId;
uploadFileData.uniqueId = params.uniqueId;
} else {
uploadUniqueId = Utility.generateUUID();
uploadFileData.uniqueId = uploadUniqueId;
}
if (typeof params.userGroupHash == 'string') {
userGroupHash = params.userGroupHash;
uploadFileData.userGroupHash = params.userGroupHash;
} else {
callback({
hasError: true,
errorCode: 999,
errorMessage: '[SDK] You need to enter a userGroupHash to be able to upload on PodSpace!'
});
return;
}
if (typeof params.originalFileName == 'string') {
uploadFileData.originalFileName = params.originalFileName;
} else {
uploadFileData.originalFileName = fileName;
}
}
app.httpRequest.httpRequest({
url: app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS + SERVICES_PATH.PODSPACE_UPLOAD_FILE_TO_USERGROUP,
method: 'POST',
headers: {
'_token_': app.sdkParams.token,
'_token_issuer_': 1
},
data: uploadFileData,
uniqueId: uploadUniqueId
}, function (result) {
if (!result.hasError) {
try {
var response = (typeof result.result.responseText == 'string')
? JSON.parse(result.result.responseText)
: result.result.responseText;
callback({
hasError: response.hasError,
result: response.result
});
} catch (e) {
callback({
hasError: true,
errorCode: 999,
errorMessage: '[SDK] Problem in Parsing result'
});
}
} else {
callback({
hasError: true,
errorCode: result.errorCode,
errorMessage: result.errorMessage
});
}
});
return {
uniqueId: uploadUniqueId,
threadId: uploadThreadId,
participant: app.store.user.get(),
content: {
caption: params.content,
file: {
uniqueId: uploadUniqueId,
fileName: fileName,
fileSize: fileSize,
fileObject: params.file
}
}
};
}
function uploadFileToPodspaceUserGroupNew (params, callback) {
var fileName,
fileType,
fileSize,
fileExtension,
uploadUniqueId,
uploadThreadId;
if (Utility.isNode()) {
fileName = params.file.split('/')
.pop();
fileType = Mime.getType(params.file);
fileSize = app.fs.statSync(params.file).size;
fileExtension = params.file.split('.')
.pop();
} else {
fileName = params.file.name;
fileType = params.file.type;
fileSize = params.file.size;
fileExtension = params.file.name.split('.')
.pop();
}
// fileName = params.file.name;
//fileType = params.file.type;
// fileSize = params.file.size;
//fileExtension = params.file.name.split('.').pop();
var uploadFileData = {};
if (params) {
if (typeof params.file !== 'undefined') {
uploadFileData.file = params.file;
}
if (parseInt(params.threadId) > 0) {
uploadThreadId = params.threadId;
uploadFileData.threadId = params.threadId;
} else {
uploadThreadId = 0;
uploadFileData.threadId = 0;
}
if (typeof params.uniqueId == 'string') {
uploadUniqueId = params.uniqueId;
uploadFileData.uniqueId = params.uniqueId;
} else {
uploadUniqueId = Utility.generateUUID();
uploadFileData.uniqueId = uploadUniqueId;
}
if (typeof params.userGroupHash == 'string') {
uploadFileData.userGroupHash = params.userGroupHash;
} else {
callback({
hasError: true,
errorCode: 999,
errorMessage: '[SDK] You need to enter a userGroupHash to be able to upload on PodSpace!'
});
return;
}
if (typeof params.originalFileName == 'string') {
uploadFileData.originalFileName = params.originalFileName;
} else {
uploadFileData.originalFileName = fileName;
}
}
app.httpRequest.httpRequest({
url: app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS + SERVICES_PATH.PODSPACE_UPLOAD_FILE_TO_USERGROUP_NEW.replace('{userGroupHash}', uploadFileData.userGroupHash),
method: 'POST',
headers: {
'Authorization': 'Bearer ' + app.sdkParams.token,
...params.headers
},
data: uploadFileData,
uniqueId: uploadUniqueId
}, function (result) {
if (!result.hasError) {
try {
var response = (typeof result.result.responseText == 'string')
? JSON.parse(result.result.responseText)
: result.result.responseText;
callback({
hasError: response.hasError,
result: response.result
});
} catch (e) {
callback({
hasError: true,
errorCode: 999,
errorMessage: '[SDK] Problem in Parsing result'
});
}
} else {
callback({
hasError: true,
errorCode: result.errorCode,
errorMessage: result.errorMessage
});
}
});
return {
uniqueId: uploadUniqueId,
threadId: uploadThreadId,
participant: app.store.user.get(),
content: {
caption: params.content,
file: {
uniqueId: uploadUniqueId,
fileName: fileName,
fileSize: fileSize,
fileObject: params.file
}
}
};
}
function uploadImageToPodspaceUserGroupNew(params, callback) {
var fileName,
fileType,
fileSize,
fileWidth = 0,
fileHeight = 0,
fileExtension,
uploadUniqueId,
uploadThreadId;
var continueImageUpload = function (params) {
if (imageMimeTypes.indexOf(fileType) >= 0 || imageExtentions.indexOf(fileExtension) >= 0) {
var uploadImageData = {};
if (params) {
if (typeof params.image !== 'undefined') {
uploadImageData.file = params.image;
} else {
callback({
hasError: true,
errorCode: 999,
errorMessage: '[SDK] You need to send a image file!'
});
return;
}
if (typeof params.userGroupHash == 'string') {
uploadImageData.userGroupHash = params.userGroupHash;
} else {
callback({
hasError: true,
errorCode: 999,
errorMessage: '[SDK] You need to enter a userGroupHash to be able to upload on PodSpace!'
});
return;
}
if (params.randomFileName) {
uploadImageData.fileName = Utility.generateUUID() + '.' + fileExtension;
} else {
uploadImageData.filename = fileName;
}
uploadImageData.fileSize = fileSize;
if (parseInt(params.threadId) > 0) {
uploadThreadId = params.threadId;
uploadImageData.threadId = params.threadId;
} else {
uploadThreadId = 0;
uploadImageData.threadId = 0;
}
if (typeof params.uniqueId == 'string') {
uploadUniqueId = params.uniqueId;
uploadImageData.uniqueId = params.uniqueId;
} else {
uploadUniqueId = Utility.generateUUID();
uploadImageData.uniqueId = uploadUniqueId;
}
if (typeof params.originalFileName == 'string') {
uploadImageData.originalFileName = params.originalFileName;
} else {
uploadImageData.originalFileName = fileName;
}
uploadImageData.x = parseInt(params.xC) || 0;
uploadImageData.y = parseInt(params.yC) || 0;
uploadImageData.height = parseInt(params.hC) || fileHeight;
uploadImageData.weight = parseInt(params.wC) || fileWidth;
}
app.httpRequest.httpRequest({
url: app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS + SERVICES_PATH.PODSPACE_UPLOAD_IMAGE_TO_USERGROUP_NEW.replace('{userGroupHash}', uploadImageData.userGroupHash),
method: 'POST',
headers: {
'Authorization': 'Bearer ' + app.sdkParams.token,
...params.headers
},
data: uploadImageData,
uniqueId: uploadUniqueId
}, function (result) {
if (!result.hasError) {
try {
var response = (typeof result.result.responseText == 'string')
? JSON.parse(result.result.responseText)
: result.result.responseText;
if (response.status < 400) {
response.result.actualHeight = fileHeight;
response.result.actualWidth = fileWidth;
callback({
hasError: response.hasError,
result: response.result
});
} else {
callback({
hasError: true,
errorCode: response.errorCode,
errorMessage: response.message
});
}
} catch (e) {
app.sdkParams.consoleLogging && console.log(e)
callback({
hasError: true,
errorCode: 6300,
errorMessage: CHAT_ERRORS[6300]
});
}
} else {
callback({
hasError: true,
errorCode: result.errorCode,
errorMessage: result.errorMessage
});
}
});
return {
uniqueId: uploadUniqueId,
threadId: uploadThreadId,
participant: app.store.user.get(),
content: {
caption: params.content,
file: {
uniqueId: uploadUniqueId,
fileName: fileName,
fileSize: fileSize,
fileObject: params.file
}
}
};
} else {
callback({
hasError: true,
errorCode: 6301,
errorMessage: CHAT_ERRORS[6301]
});
}
}
if (Utility.isNode()) {
fileName = params.image.split('/')
.pop();
fileType = Mime.getType(params.image);
fileSize = app.fs.statSync(params.image).size;
fileExtension = params.image.split('.')
.pop();
var dimensions = SizeOf(params.image);
fileWidth = dimensions.width;
fileHeight = dimensions.height;
continueImageUpload(params);
} else {
fileName = params.image.name;
fileType = params.image.type;
fileSize = params.image.size;
fileExtension = params.image.name.split('.')
.pop();
var reader = new FileReader();
reader.onload = function (e) {
var image = new Image();
image.onload = function () {
fileWidth = this.width;
fileHeight = this.height;
continueImageUpload(params);
};
image.src = e.target.result;
};
reader.readAsDataURL(params.image);
}
}
/**
* Upload Image To Pod Space
*
* Upload images to Pod Space Image Server
*
* @since 3.9.9
* @access private
*
* @param {string} fileName A name for the file
* @param {file} image FILE: the image file (if its an image file)
* @param {float} xC Crop Start point x (if its an image file)
* @param {float} yC Crop Start point Y (if its an image file)
* @param {float} hC Crop size Height (if its an image file)
* @param {float} wC Crop size Weight (if its an image file)
* @param {string} userGroupHash Unique identifier of threads on podspace
* @param {string} token User Token
* @param {string} _token_issuer_ Token Issuer
*
* @link https://podspace.pod.ir/apidocs/?srv=/userGroup/uploadImage/
*
* @return {object} Uploaded Image Object
*/
function uploadImageToPodspaceUserGroup(params, callback) {
var fileName,
fileType,
fileSize,
fileWidth = 0,
fileHeight = 0,
fileExtension,
uploadUniqueId,
uploadThreadId;
var continueImageUpload = function (params) {
let uploadImageData, userGroupHash;
if (imageMimeTypes.indexOf(fileType) >= 0 || imageExtentions.indexOf(fileExtension) >= 0) {
uploadImageData = {};
if (params) {
if (typeof params.image !== 'undefined') {
uploadImageData.file = params.image;
} else {
callback({
hasError: true,
errorCode: 999,
errorMessage: '[SDK] You need to send a image file!'
});
return;
}
if (typeof params.userGroupHash == 'string') {
userGroupHash = params.userGroupHash;
uploadImageData.userGroupHash = params.userGroupHash;
} else {
callback({
hasError: true,
errorCode: 999,
errorMessage: '[SDK] You need to enter a userGroupHash to be able to upload on PodSpace!'
});
return;
}
if (params.randomFileName) {
uploadImageData.fileName = Utility.generateUUID() + '.' + fileExtension;
} else {
uploadImageData.filename = fileName;
}
uploadImageData.fileSize = fileSize;
if (parseInt(params.threadId) > 0) {
uploadThreadId = params.threadId;
uploadImageData.threadId = params.threadId;
} else {
uploadThreadId = 0;
uploadImageData.threadId = 0;
}
if (typeof params.uniqueId == 'string') {
uploadUniqueId = params.uniqueId;
uploadImageData.uniqueId = params.uniqueId;
} else {
uploadUniqueId = Utility.generateUUID();
uploadImageData.uniqueId = uploadUniqueId;
}
if (typeof params.originalFileName == 'string') {
uploadImageData.originalFileName = params.originalFileName;
} else {
uploadImageData.originalFileName = fileName;
}
uploadImageData.xC = parseInt(params.xC) || 0;
uploadImageData.yC = parseInt(params.yC) || 0;
uploadImageData.hC = parseInt(params.hC) || fileHeight;
uploadImageData.wC = parseInt(params.wC) || fileWidth;
}
app.httpRequest.httpRequest({
url: app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS + SERVICES_PATH.PODSPACE_UPLOAD_IMAGE_TO_USERGROUP,
method: 'POST',
headers: {
'_token_': app.sdkParams.token,
'_token_issuer_': 1
},
data: uploadImageData,
uniqueId: uploadUniqueId
}, function (result) {
if (!result.hasError) {
try {
var response = (typeof result.result.responseText == 'string')
? JSON.parse(result.result.responseText)
: result.result.responseText;
if (typeof response.hasError !== 'undefined' && !response.hasError) {
response.result.actualHeight = fileHeight;
response.result.actualWidth = fileWidth;
callback({
hasError: response.hasError,
result: response.result
});
} else {
callback({
hasError: true,
errorCode: response.errorCode,
errorMessage: response.message
});
}
} catch (e) {
console.log(e)
callback({
hasError: true,
errorCode: 6300,
errorMessage: CHAT_ERRORS[6300]
});
}
} else {
callback({
hasError: true,
errorCode: result.errorCode,
errorMessage: result.errorMessage
});
}
});
return {
uniqueId: uploadUniqueId,
threadId: uploadThreadId,
participant: app.store.user.get(),
content: {
caption: params.content,
file: {
uniqueId: uploadUniqueId,
fileName: fileName,
fileSize: fileSize,
fileObject: params.file
}
}
};
} else {
callback({
hasError: true,
errorCode: 6301,
errorMessage: CHAT_ERRORS[6301]
});
}
}
if (Utility.isNode()) {
fileName = params.image.split('/')
.pop();
fileType = Mime.getType(params.image);
fileSize = app.fs.statSync(params.image).size;
fileExtension = params.image.split('.')
.pop();
var dimensions = SizeOf(params.image);
fileWidth = dimensions.width;
fileHeight = dimensions.height;
continueImageUpload(params);
} else {
fileName = params.image.name;
fileType = params.image.type;
fileSize = params.image.size;
fileExtension = params.image.name.split('.')
.pop();
var reader = new FileReader();
reader.onload = function (e) {
var image = new Image();
image.onload = function () {
fileWidth = this.width;
fileHeight = this.height;
continueImageUpload(params);
};
image.src = e.target.result;
};
reader.readAsDataURL(params.image);
}
}
/**
* Upload Image To Pod Space Publically
*
* Upload images to Pod Space Image Server
*
* @since 3.9.9
* @access private
*
* @param {string} fileName A name for the file
* @param {file} image FILE: the image file (if its an image file)
* @param {float} xC Crop Start point x (if its an image file)
* @param {float} yC Crop Start point Y (if its an image file)
* @param {float} hC Crop size Height (if its an image file)
* @param {float} wC Crop size Weight (if its an image file)
* @param {string} token User Token
* @param {string} _token_issuer_ Token Issuer
*
* @link https://podspace.pod.ir/apidocs/?srv=/nzh/drive/uploadImage
*
* @return {object} Uploaded Image Object
*/
function uploadImageToPodspace (params, callback) {
var fileName,
fileType,
fileSize,
fileWidth = 0,
fileHeight = 0,
fileExtension,
uploadUniqueId,
uploadThreadId;
if (Utility.isNode()) {
fileName = params.image.split('/')
.pop();
fileType = Mime.getType(params.image);
fileSize = app.fs.statSync(params.image).size;
fileExtension = params.image.split('.')
.pop();
} else {
fileName = params.image.name;
fileType = params.image.type;
fileSize = params.image.size;
fileExtension = params.image.name.split('.')
.pop();
var reader = new FileReader();
reader.onload = function (e) {
var image = new Image();
image.onload = function () {
fileWidth = this.width;
fileHeight = this.height;
continueImageUpload(params);
};
image.src = e.target.result;
};
reader.readAsDataURL(params.image);
}
let continueImageUpload = function (params) {
if (imageMimeTypes.indexOf(fileType) >= 0 || imageExtentions.indexOf(fileExtension) >= 0) {
let uploadImageData = {};
if (params) {
if (typeof params.image !== 'undefined') {
uploadImageData.file = params.image;
} else {
callback({
hasError: true,
errorCode: 999,
errorMessage: '[SDK] You need to send a image file!'
});
return;
}
if (params.randomFileName) {
uploadImageData.fileName = Utility.generateUUID() + '.' + fileExtension;
} else {
uploadImageData.filename = fileName;
}
uploadImageData.fileSize = fileSize;
if (parseInt(params.threadId) > 0) {
uploadThreadId = params.threadId;
uploadImageData.threadId = params.threadId;
} else {
uploadThreadId = 0;
uploadImageData.threadId = 0;
}
if (typeof params.uniqueId == 'string') {
uploadUniqueId = params.uniqueId;
uploadImageData.uniqueId = params.uniqueId;
} else {
uploadUniqueId = Utility.generateUUID();
uploadImageData.uniqueId = uploadUniqueId;
}
if (typeof params.originalFileName == 'string') {
uploadImageData.originalFileName = params.originalFileName;
} else {
uploadImageData.originalFileName = fileName;
}
uploadImageData.xC = parseInt(params.xC) || 0;
uploadImageData.yC = parseInt(params.yC) || 0;
uploadImageData.hC = parseInt(params.hC) || fileHeight;
uploadImageData.wC = parseInt(params.wC) || fileWidth;
}
app.httpRequest.httpRequest({
url: app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS + SERVICES_PATH.PODSPACE_UPLOAD_IMAGE,
method: 'POST',
headers: {
'_token_': app.sdkParams.token,
'_token_issuer_': 1
},
data: uploadImageData,
uniqueId: uploadUniqueId
}, function (result) {
if (!result.hasError) {
try {
var response = (typeof result.result.responseText == 'string')
? JSON.parse(result.result.responseText)
: result.result.responseText;
if (typeof response.hasError !== 'undefined' && !response.hasError) {
callback({
hasError: response.hasError,
result: response.result
});
} else {
callback({
hasError: true,
errorCode: response.errorCode,
errorMessage: response.message
});
}
} catch (e) {
console.log(e)
callback({
hasError: true,
errorCode: 6300,
errorMessage: CHAT_ERRORS[6300]
});
}
} else {
callback({
hasError: true,
errorCode: result.errorCode,
errorMessage: result.errorMessage
});
}
});
return {
uniqueId: uploadUniqueId,
threadId: uploadThreadId,
participant: app.store.user.get(),
content: {
caption: params.content,
file: {
uniqueId: uploadUniqueId,
fileName: fileName,
fileSize: fileSize,
fileObject: params.file
}
}
};
} else {
callback({
hasError: true,
errorCode: 6301,
errorMessage: CHAT_ERRORS[6301]
});
}
}
}
return {
cancelFileDownload,
cancelFileUpload,
getImageFromPodspaceV2,
getFileFromPodspaceNew,
getImageDownloadLinkFromPodspace,
uploadFileToPodspace,
uploadFileToPodspaceUserGroupNew,
uploadImageToPodspaceUserGroupNew,
uploadImageToPodspaceUserGroup,
uploadImageToPodspace
};
}
export default FileMethods;