openEventsPlatformApp/plugins/cordova-plugin-x-socialsharing/src/windows/SocialSharingProxy.js
plugins/cordova-plugin-x-socialsharing/src/windows/SocialSharingProxy.jsRaw
1var cordova = require('cordova');
2
3module.exports = {
4 share: function (win, fail, args) {
5 //Text Message
6 var message = args[0];
7 //Title
8 var subject = args[1];
9 //File(s) Path
10 var fileOrFileArray = args[2];
11 //Web link
12 var url = args[3];
13
14 var folder = Windows.Storage.ApplicationData.current.temporaryFolder;
15
16 var getExtension = function (strBase64) {
17 return strBase64.substring(strBase64.indexOf("/") + 1, strBase64.indexOf(";base64"));
18 };
19
20 var replaceAll = function (str, find, replace) {
21 return str.replace(new RegExp(find, 'g'), replace);
22 };
23
24 var sanitizeFilename = function (name) {
25 return replaceAll(name, "[:\\\\/*?|<> ]", "_");
26 };
27
28 var getFileName = function (position, fileExtension) {
29 var fileName = (subject ? sanitizeFilename(subject) : "file") + (position == 0 ? "" : "_" + position) + "." + fileExtension;
30 return fileName;
31 };
32
33 var createTemporalFile = function (fileName, buffer) {
34
35 var filePath = "";
36 return folder.createFileAsync(fileName, Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file) {
37 filePath = file.path;
38 return Windows.Storage.FileIO.writeBufferAsync(file, buffer);
39 }).then(function(){
40 return Windows.Storage.StorageFile.getFileFromPathAsync(filePath);
41 });
42 };
43
44 var doShare = function (e) {
45 e.request.data.properties.title = subject?subject: "Sharing";
46 if (message) e.request.data.setText(message);
47 if (url) e.request.data.setWebLink(new Windows.Foundation.Uri(url));
48 if (fileOrFileArray.length > 0) {
49 var deferral = e.request.getDeferral();
50 var storageItems = [];
51 var filesCount = fileOrFileArray.length;
52
53 var completeFile = function () {
54 if (!--filesCount) {
55 storageItems.length && e.request.data.setStorageItems(storageItems);
56 deferral.complete();
57 }
58 };
59
60 for (var i = 0; i < fileOrFileArray.length; i++) {
61
62 var file = fileOrFileArray[i];
63 if (file.indexOf("data:") >= 0) {
64 var fileName = getFileName(i, getExtension(file));
65 var buffer = Windows.Security.Cryptography.CryptographicBuffer.decodeFromBase64String(file.split(',')[1]);
66 if (buffer) {
67 createTemporalFile(fileName, buffer).done(
68 function (file) {
69 storageItems.push(file);
70 completeFile();
71 },
72 function () {
73 completeFile();
74 }
75 );
76 }
77 else {
78 completeFile();
79 }
80 }
81 else {
82 Windows.Storage.StorageFile.getFileFromPathAsync(file).done(
83 function (file) {
84 storageItems.push(file);
85 completeFile();
86 },
87 function () {
88 completeFile();
89 }
90 );
91 }
92 }
93 }
94 };
95
96
97 var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
98
99 dataTransferManager.addEventListener("datarequested", doShare);
100
101 try {
102 Windows.ApplicationModel.DataTransfer.DataTransferManager.showShareUI();
103 win(true);
104 } catch (err) {
105 fail(err);
106 }
107 },
108
109 canShareViaEmail: function (win, fail, args) {
110 win(true);
111 },
112
113 shareViaEmail: function (win, fail, args) {
114 //Text Message
115 var message = args[0];
116 //Title
117 var subject = args[1];
118 //File(s) Path
119 var fileOrFileArray = args[5];
120
121 var doShare = function (e) {
122 e.request.data.properties.title = subject ? subject : "Sharing";
123 if (message) {
124 var htmlFormat = Windows.ApplicationModel.DataTransfer.HtmlFormatHelper.createHtmlFormat(message);
125 e.request.data.setHtmlFormat(htmlFormat);
126 }
127
128 if (fileOrFileArray.length > 0) {
129 var deferral = e.request.getDeferral();
130 var storageItems = [];
131 var filesCount = fileOrFileArray.length;
132 for (var i = 0; i < fileOrFileArray.length; i++) {
133 Windows.Storage.StorageFile.getFileFromPathAsync(fileOrFileArray[i]).done(
134 function (index, file) {
135 var path = fileOrFileArray[index];
136 var streamRef = Windows.Storage.Streams.RandomAccessStreamReference.createFromFile(file);
137 e.request.data.resourceMap[path] = streamRef;
138 storageItems.push(file);
139 if (!--filesCount) {
140 e.request.data.setStorageItems(storageItems);
141 deferral.complete();
142 }
143 }.bind(this, i),
144 function () {
145 if (!--filesCount) {
146 e.request.data.setStorageItems(storageItems);
147 deferral.complete();
148 }
149 }
150 );
151 }
152 }
153 };
154
155 var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
156
157 dataTransferManager.addEventListener("datarequested", doShare);
158
159 try {
160 Windows.ApplicationModel.DataTransfer.DataTransferManager.showShareUI();
161 win(true);
162 } catch (err) {
163 fail(err);
164 }
165 },
166
167 shareViaSMS: function (win, fail, args) {
168 var chatMessage = new Windows.ApplicationModel.Chat.ChatMessage();
169 chatMessage.body = args[0].message;
170 if (!!args[1]) {
171 chatMessage.recipients.push(args[1]);
172 }
173 Windows.ApplicationModel.Chat.ChatMessageManager.showComposeSmsMessageAsync(chatMessage).done(win, fail);
174 }
175};
176
177require("cordova/exec/proxy").add("SocialSharing", module.exports);