Ver código fonte

Merge pull request #219 from threema-ch/issue-134

Fix line breaks when pasting

Fixes #134.
Danilo Bargen 8 anos atrás
pai
commit
e42aade66c
2 arquivos alterados com 40 adições e 26 exclusões
  1. 5 2
      src/directives/compose_area.ts
  2. 35 24
      src/services/webclient.ts

+ 5 - 2
src/directives/compose_area.ts

@@ -119,12 +119,14 @@ export default [
                 // Emoji images are converted to their alt text in this process.
                 function submitText(): Promise<any> {
                     let text = '';
+
+                    // Extract text
                     // tslint:disable-next-line: prefer-for-of (see #98)
                     for (let i = 0; i < composeDiv[0].childNodes.length; i++) {
                         const node = composeDiv[0].childNodes[i];
                         switch (node.nodeType) {
                             case Node.TEXT_NODE:
-                                text += node.nodeValue;
+                                text += node.nodeValue.trim();
                                 break;
                             case Node.ELEMENT_NODE:
                                 const tag = node.tagName.toLowerCase();
@@ -139,6 +141,7 @@ export default [
                                 $log.warn(logTag, 'Unhandled node:', node);
                         }
                     }
+
                     return new Promise((resolve, reject) => {
                         let submitTexts = (strings: string[]) => {
                             let messages: threema.TextMessageData[] = [];
@@ -153,7 +156,7 @@ export default [
                                 .catch(reject);
                         };
 
-                        let fullText = text.trim();
+                        const fullText = text.trim().replace(/\r/g, '');
                         if (fullText.length > scope.maxTextLength) {
                             let pieces: string[] = stringService.byteChunk(fullText, scope.maxTextLength, 50);
                             let confirm = $mdDialog.confirm()

+ 35 - 24
src/services/webclient.ts

@@ -857,20 +857,28 @@ export class WebClientService {
                        message: threema.MessageData): Promise<Promise<any>> {
         return new Promise<any> (
             (resolve, reject) => {
+
                 // Decide on subtype
                 let subType;
                 switch (type) {
                     case 'text':
                         subType = WebClientService.SUB_TYPE_TEXT_MESSAGE;
+
+                        const textMessage = message as threema.TextMessageData;
+                        const msgLength = textMessage.text.length;
+
                         // Ignore empty text messages
-                        let textSize = (message as threema.TextMessageData).text.length;
-                        if (textSize === 0) {
+                        if (msgLength === 0) {
                             return reject();
-                        } else if (textSize > WebClientService.MAX_TEXT_LENGTH) {
+                        }
+
+                        // Ignore text messages that are too long.
+                        if (msgLength > WebClientService.MAX_TEXT_LENGTH) {
                             return reject(this.$translate.instant('error.TEXT_TOO_LONG', {
                                 max: WebClientService.MAX_TEXT_LENGTH,
                             }));
                         }
+
                         break;
                     case 'file':
                         // validate max file size
@@ -954,27 +962,30 @@ export class WebClientService {
                     [WebClientService.ARGUMENT_TEMPORARY_ID]: temporaryMessage.temporaryId,
                 };
 
-                // send message and handling error promise
-                this._sendCreatePromise(subType, args, message)
-                    .catch((error) => {
-                        this.$log.error('error sending message', error);
-                        // remove temporary message
-                        this.messages.removeTemporary(receiver, temporaryMessage.temporaryId);
-
-                        let errorMessage;
-                        switch (error) {
-                            case 'file_too_large':
-                                errorMessage = this.$translate.instant('error.FILE_TOO_LARGE');
-                                break;
-                            default:
-                                errorMessage = this.$translate.instant('error.ERROR_OCCURRED');
-                        }
-                        this.alerts.push({
-                            source: 'sendMessage',
-                            type: 'alert',
-                            message: errorMessage,
-                        } as threema.Alert);
-                    });
+                // Send message and handling error promise
+                this._sendCreatePromise(subType, args, message).catch((error) => {
+                    this.$log.error('Error sending message:', error);
+
+                    // Remove temporary message
+                    this.messages.removeTemporary(receiver, temporaryMessage.temporaryId);
+
+                    // Determine error message
+                    let errorMessage;
+                    switch (error) {
+                        case 'file_too_large':
+                            errorMessage = this.$translate.instant('error.FILE_TOO_LARGE');
+                            break;
+                        default:
+                            errorMessage = this.$translate.instant('error.ERROR_OCCURRED');
+                    }
+
+                    // Show alert
+                    this.alerts.push({
+                        source: 'sendMessage',
+                        type: 'alert',
+                        message: errorMessage,
+                    } as threema.Alert);
+                });
                 resolve();
             });
     }