arnaucube
arnaucube/openEventsPlatformAppPublic Self-hosted repository
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);