{ "id": "155117", "key": "TIMOB-20470", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "17706", "name": "Release 5.4.0", "archived": false, "released": true, "releaseDate": "2016-08-11" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2016-04-05T02:05:02.000+0000", "created": "2016-02-24T22:13:19.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [ "permissions" ], "versions": [ { "id": "16997", "name": "Release 5.2.0", "archived": false, "released": true, "releaseDate": "2016-02-23" } ], "issuelinks": [ { "id": "52109", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "inwardIssue": { "id": "161378", "key": "TIMOB-23562", "fields": { "summary": "Android 6.0: reading to tempDirectory fails without External storage permissions", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "50707", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "154419", "key": "TIMOB-20251", "fields": { "summary": "Android 6.0: java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } } ], "assignee": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2016-07-15T06:25:36.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10202", "name": "Android", "description": "Android Platform" } ], "description": "h3. Steps to Reproduce\nI played around with the latest 5.2.0 SDK and Nexus 6P... for the most part everything seems to work except for one case with runtime permission.\n\nif I use Ti.Filesystem.tempDirectory as my storage and created the permission checks, this still fails on first try even if you accept the Permission.\n\nLog:\n[INFO] : Permission granted? true\n[ERROR] : TiFileProxy: (KrollRuntimeThread) [66154,66154] IOException encountered\n[ERROR] : TiFileProxy: java.io.FileNotFoundException: /storage/emulated/0/Android/data/com.apptest.tempdirperm/cache/_tmp/GettingStartedTitanium_Linux.pdf: open failed: ENOENT (No such file or directory)\n[ERROR] : TiFileProxy: at libcore.io.IoBridge.open(IoBridge.java:452)\n[ERROR] : TiFileProxy: at java.io.FileOutputStream.(FileOutputStream.java:87)\n[ERROR] : TiFileProxy: at org.appcelerator.titanium.io.TiFile.getOutputStream(TiFile.java:273)\n[ERROR] : TiFileProxy: at org.appcelerator.titanium.io.TiFile.open(TiFile.java:336)\n[ERROR] : TiFileProxy: at org.appcelerator.titanium.io.TiFile.write(TiFile.java:382)\n[ERROR] : TiFileProxy: at org.appcelerator.titanium.TiFileProxy.write(TiFileProxy.java:290)\n[ERROR] : TiFileProxy: at org.appcelerator.kroll.runtime.v8.V8Object.nativeCallProperty(Native Method)\n[ERROR] : TiFileProxy: at org.appcelerator.kroll.runtime.v8.V8Object.callProperty(V8Object.java:73)\n[ERROR] : TiFileProxy: at org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:1155)\n[ERROR] : TiFileProxy: at android.os.Handler.dispatchMessage(Handler.java:98)\n[ERROR] : TiFileProxy: at android.os.Looper.loop(Looper.java:148)\n[ERROR] : TiFileProxy: at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:118)\n[ERROR] : TiFileProxy: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)\n[ERROR] : TiFileProxy: at libcore.io.Posix.open(Native Method)\n[ERROR] : TiFileProxy: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)\n[ERROR] : TiFileProxy: at libcore.io.IoBridge.open(IoBridge.java:438)\n[ERROR] : TiFileProxy: ... 11 more\n[INFO] : ALERT: (KrollRuntimeThread) [41,66195] File exist? false}}\n\nSteps to recreate:\nCreate new Mobile App Project and paste in code to index.js\nCompile and run, make sure it is a clean install on device\nClick the 'Hello, World' to trigger the download and permission.\nAccept the permission on popup.\nAccessing the file in temporary directory fails. (alert will say file does not exist)\nClose the app\nCheck permission in settings > app permission (storage should be enabled)\nRestart the app\nClick 'Hello, World' again to trigger download.\nAlert will now say file exists.\n\nWorkaround: \nIf I switch the Ti.Filesystem.tempDirectory to Ti.Filesystem.applicationDataDirectory, I do not run into the issue of having to restart the app to open the file. But I have to make sure those files are deleted after use.\nIt would be best to use temporary directory so that the files are automatically removed after app is closed.\n\nh3. Actual Result\nFile does not exist in tempDirectory when permission is enabled on RunTime.\n\nh3. Expected Result\nFile should exist in tempDirectory.", "attachment": [ { "id": "58328", "filename": "index.js", "author": { "name": "echeung@leviton.com", "key": "echeung@leviton.com", "displayName": "Eric Cheung", "active": true, "timeZone": "America/Havana" }, "created": "2016-02-24T22:13:31.000+0000", "size": 981, "mimeType": "application/javascript" }, { "id": "58327", "filename": "Screenshot_20160224-165334.png", "author": { "name": "echeung@leviton.com", "key": "echeung@leviton.com", "displayName": "Eric Cheung", "active": true, "timeZone": "America/Havana" }, "created": "2016-02-24T22:13:30.000+0000", "size": 86518, "mimeType": "image/png" }, { "id": "58326", "filename": "Screenshot_20160224-165342.png", "author": { "name": "echeung@leviton.com", "key": "echeung@leviton.com", "displayName": "Eric Cheung", "active": true, "timeZone": "America/Havana" }, "created": "2016-02-24T22:13:29.000+0000", "size": 64817, "mimeType": "image/png" } ], "flagged": false, "summary": "Android 6.0 (Post 5.2.0 SDK): java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)", "creator": { "name": "echeung@leviton.com", "key": "echeung@leviton.com", "displayName": "Eric Cheung", "active": true, "timeZone": "America/Havana" }, "subtasks": [], "reporter": { "name": "echeung@leviton.com", "key": "echeung@leviton.com", "displayName": "Eric Cheung", "active": true, "timeZone": "America/Havana" }, "environment": null, "closedSprints": [ { "id": 614, "state": "closed", "name": "2016 Sprint 07 SDK", "startDate": "2016-03-26T00:38:56.432Z", "endDate": "2016-04-09T00:38:00.000Z", "completeDate": "2016-04-11T04:41:08.231Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "377982", "author": { "name": "echeung@leviton.com", "key": "echeung@leviton.com", "displayName": "Eric Cheung", "active": true, "timeZone": "America/Havana" }, "body": "Ti.Filesystem.tempDirectory cannot access filesystem even if Storage Permissions is allowed after the *very first* run-time prompt. After the app restart, permission works as normal for temp directory.", "updateAuthor": { "name": "echeung@leviton.com", "key": "echeung@leviton.com", "displayName": "Eric Cheung", "active": true, "timeZone": "America/Havana" }, "created": "2016-02-26T14:29:05.000+0000", "updated": "2016-02-26T14:29:05.000+0000" }, { "id": "377986", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Looks like something we didn't fix with TIMOB-20251", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-02-26T15:08:46.000+0000", "updated": "2016-02-26T15:08:46.000+0000" }, { "id": "379578", "author": { "name": "shawnlan", "key": "shawnlan", "displayName": "Shawn Lan", "active": true, "timeZone": "America/Los_Angeles" }, "body": "What if you do a setTimeout in the permission request callback?\r\n\r\nMaybe the permission is not yet available immediately right after the callback is called.", "updateAuthor": { "name": "shawnlan", "key": "shawnlan", "displayName": "Shawn Lan", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-03-12T02:27:25.000+0000", "updated": "2016-03-12T02:27:25.000+0000" }, { "id": "380198", "author": { "name": "peterladis", "key": "peterladis", "displayName": "Peter Ladis", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Im having the same issue in production for my android marshmallow users. Any update on this fix?\r\n", "updateAuthor": { "name": "peterladis", "key": "peterladis", "displayName": "Peter Ladis", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-03-20T21:35:37.000+0000", "updated": "2016-03-20T21:35:37.000+0000" }, { "id": "380319", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "[~echeung@leviton.com] Could you try this.\r\n\r\nWriting it this way will allow it to work:-\r\n{code}\r\n function getFile() {\r\n var url = \"http://www.appcelerator.com/wp-content/uploads/GettingStartedTitanium_Linux.pdf\";\r\n var fileName = \"GettingStartedTitanium_Linux.pdf\";\r\n \r\n var httpClient = Ti.Network.createHTTPClient();\r\n httpClient.onerror = function(e) {\r\n alert('Download Error: ' + e.error);\r\n };\r\n// Adding this to see progress\r\n httpClient.ondatastream = function(e) {\r\n Ti.API.info('ondatastream called, progress = '+e.progress);\r\n };\r\n httpClient.onload = function(e) {\r\n \r\n var tempDir = Ti.Filesystem.getFile(Ti.Filesystem.tempDirectory);\r\n if(!tempDir.exists()){\r\n tempDir.createDirectory();\r\n }\r\n var f = Ti.Filesystem.getFile(Ti.Filesystem.tempDirectory, fileName);\r\n var file = f.write(this.responseData);\r\n alert('File exist? ' + f.exists());\r\n };\r\n httpClient.open('GET', url);\r\n httpClient.send();\r\n}\r\n{code}\r\n\r\nIf it's okay, I'll resolve this ticket.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-03-22T04:38:34.000+0000", "updated": "2016-03-22T04:40:03.000+0000" }, { "id": "380345", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~msamah] shouldn't we handle creation of the temp directory?", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-03-22T09:54:07.000+0000", "updated": "2016-03-22T09:54:07.000+0000" }, { "id": "380357", "author": { "name": "falko", "key": "falko", "displayName": "Andrey Tkachenko", "active": true, "timeZone": "Europe/Moscow" }, "body": "Ashraf Abu this is my test:\r\n\r\n{code:javascript}\r\nvar f = Ti.Filesystem.getFile(Ti.Filesystem.tempDirectory);\r\n\tTi.API.info('directory exists', f.exists());\r\n\tf.createDirectory();\r\n\tTi.API.info('directory exists', f.exists());\r\n f = Ti.Filesystem.getFile(Ti.Filesystem.tempDirectory, 'fileter.txt');\t\r\n f.write('writing to the file would be enough to create it');\r\n\tTi.API.info('file exists', f.exists());\r\n alert(f.read());\r\n{code}\r\n\r\nResult:\r\n\r\n{code}\r\n[INFO] : directory exists false\r\n[INFO] : directory exists false\r\n[ERROR] : TiFileProxy: (KrollRuntimeThread) [67422,67422] IOException encountered\r\n[ERROR] : TiFileProxy: java.io.FileNotFoundException: /storage/emulated/0/Android/data/falkolab.test556/cache/_tmp/fileter.txt: open failed: ENOENT (No such file or directory)\r\n[ERROR] : TiFileProxy: \tat libcore.io.IoBridge.open(IoBridge.java:452)\r\n[ERROR] : TiFileProxy: \tat java.io.FileOutputStream.(FileOutputStream.java:87)\r\n[ERROR] : TiFileProxy: \tat org.appcelerator.titanium.io.TiFile.getOutputStream(TiFile.java:273)\r\n...\r\n{code}\r\n\r\n", "updateAuthor": { "name": "falko", "key": "falko", "displayName": "Andrey Tkachenko", "active": true, "timeZone": "Europe/Moscow" }, "created": "2016-03-22T12:49:35.000+0000", "updated": "2016-03-22T12:49:35.000+0000" }, { "id": "380453", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "I'll check this out more.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-03-23T01:55:02.000+0000", "updated": "2016-03-23T01:55:02.000+0000" }, { "id": "380474", "author": { "name": "falko", "key": "falko", "displayName": "Andrey Tkachenko", "active": true, "timeZone": "Europe/Moscow" }, "body": "It must be fixed in 5.2.1.GA. Which meaning to release sdk if it not usable in last Android ?", "updateAuthor": { "name": "falko", "key": "falko", "displayName": "Andrey Tkachenko", "active": true, "timeZone": "Europe/Moscow" }, "created": "2016-03-23T06:45:26.000+0000", "updated": "2016-03-23T06:46:11.000+0000" }, { "id": "380476", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "With ref to the code I wrote earlier, fully written it should be:-\r\n{code}\r\nfunction doClick(e) {\r\n if (!Ti.Filesystem.hasStoragePermissions()) {\r\n Ti.Filesystem.requestStoragePermissions(function(result) {\r\n console.log('Permission granted? ' + result.success);\r\n if (result.success) {\r\n getFile();\r\n }\r\n else {\r\n alert('Permission denied.');\r\n }\r\n });\r\n }\r\n else {\r\n getFile();\r\n }\r\n}\r\n\r\nfunction getFile() {\r\n var url = \"http://www.appcelerator.com/wp-content/uploads/GettingStartedTitanium_Linux.pdf\";\r\n var fileName = \"GettingStartedTitanium_Linux.pdf\";\r\n \r\n var httpClient = Ti.Network.createHTTPClient();\r\n httpClient.onerror = function(e) {\r\n alert('Download Error: ' + e.error);\r\n };\r\n// Adding this to see progress\r\n httpClient.ondatastream = function(e) {\r\n Ti.API.info('ondatastream called, progress = '+e.progress);\r\n };\r\n httpClient.onload = function(e) {\r\n \r\n var tempDir = Ti.Filesystem.getFile(Ti.Filesystem.tempDirectory);\r\n if(!tempDir.exists()){\r\n tempDir.createDirectory();\r\n }\r\n var f = Ti.Filesystem.getFile(Ti.Filesystem.tempDirectory, fileName);\r\n var file = f.write(this.responseData);\r\n alert('File exist? ' + f.exists());\r\n };\r\n httpClient.open('GET', url);\r\n httpClient.send();\r\n}\r\n\r\n$.index.open();\r\n{code}\r\n\r\nPermission is still required. Directory needing to be created seems to be an Android 6 thing/issue. Meanwhile, the issue does have a workaround which is to create the dir (with permissions).\r\n\r\nEven though this workaround exists, this should continue to be looked into.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-03-23T07:44:05.000+0000", "updated": "2016-03-23T07:44:05.000+0000" }, { "id": "381296", "author": { "name": "chmiiller", "key": "chmiiller", "displayName": "Carlos Henrique Zinato", "active": true, "timeZone": "America/Los_Angeles" }, "body": "some news on that?", "updateAuthor": { "name": "chmiiller", "key": "chmiiller", "displayName": "Carlos Henrique Zinato", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-04-01T14:17:17.000+0000", "updated": "2016-04-01T14:17:17.000+0000" }, { "id": "381450", "author": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "body": "https://github.com/appcelerator/titanium_mobile/pull/7913", "updateAuthor": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "created": "2016-04-04T12:30:07.000+0000", "updated": "2016-04-04T12:30:07.000+0000" }, { "id": "381660", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "PR https://github.com/appcelerator/titanium_mobile/pull/7913 reviewed and merged.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-04-05T02:03:38.000+0000", "updated": "2016-04-05T02:03:38.000+0000" }, { "id": "381703", "author": { "name": "falko", "key": "falko", "displayName": "Andrey Tkachenko", "active": true, "timeZone": "Europe/Moscow" }, "body": "We must notify the developer that the files can in some cases be available to other applications.\r\n\r\nFiles will be in private storage if {{getCacheDir}} but {{getExternalCacheDir}} not:\r\n{quote}\r\nThere is no security enforced with these files. For example, any application holding WRITE_EXTERNAL_STORAGE can write to these files.\r\n{quote}\r\n\r\nAlso:\r\n{quote}\r\nStarting in KITKAT, no permissions are required to read or write to the returned path; it's always accessible to the calling app. This only applies to paths generated for package name of the calling application. To access paths belonging to other packages, WRITE_EXTERNAL_STORAGE and/or READ_EXTERNAL_STORAGE are required.\r\n{quote}\r\n\r\nIn both cases this note for Android, may be for iOS:\r\n{quote}\r\nThe returned path may change over time if different shared storage media is inserted, so only relative paths should be persisted.\r\n{quote}\r\n\r\n[getCacheDir()|http://developer.android.com/intl/ru/reference/android/content/Context.html#getCacheDir%28%29]\r\n[getExternalCacheDir()|http://developer.android.com/intl/ru/reference/android/content/Context.html#getExternalCacheDir%28%29]\r\n", "updateAuthor": { "name": "falko", "key": "falko", "displayName": "Andrey Tkachenko", "active": true, "timeZone": "Europe/Moscow" }, "created": "2016-04-05T07:10:28.000+0000", "updated": "2016-04-05T07:10:28.000+0000" }, { "id": "381707", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~bimmel] ^^", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-04-05T07:59:59.000+0000", "updated": "2016-04-05T07:59:59.000+0000" }, { "id": "382309", "author": { "name": "chmiiller", "key": "chmiiller", "displayName": "Carlos Henrique Zinato", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Guys, I'm having this problem on Android 6 using the latest SDK 5.2.2.GA.\r\nJust downloaded the 5.4.0 and it's gone. What should I do? What do you think is better?\r\nIs there a way to merge these fixes into the current SDK (5.2.2)? Because I can not wait till the GA release of 5.4.\r\nThanks in advance", "updateAuthor": { "name": "chmiiller", "key": "chmiiller", "displayName": "Carlos Henrique Zinato", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-04-11T10:42:59.000+0000", "updated": "2016-04-11T10:42:59.000+0000" }, { "id": "382390", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "[~chmiiller] You could cherry-pick the changes https://github.com/appcelerator/titanium_mobile/pull/7913 into the 5.2.X branch and create a custom SDK for yourself. Related info: http://docs.appcelerator.com/platform/latest/#!/guide/Building_the_Titanium_SDK_From_Source\r\n\r\n5.4.0 is not GA yet.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-04-12T02:18:29.000+0000", "updated": "2016-04-12T02:28:07.000+0000" }, { "id": "382458", "author": { "name": "chmiiller", "key": "chmiiller", "displayName": "Carlos Henrique Zinato", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Ok good, thanks", "updateAuthor": { "name": "chmiiller", "key": "chmiiller", "displayName": "Carlos Henrique Zinato", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-04-12T10:09:26.000+0000", "updated": "2016-04-12T10:09:26.000+0000" }, { "id": "387998", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Verified the fix.\r\n\r\nNo {{java.io.FileNotFoundException}} seen & the file could be accessed.\r\nClosing.\r\n\r\nEnvironment:\r\nAppc Studio : 4.6.0.201605201934\r\nTi SDK : 5.4.0.v20160608165242\r\nTi CLI : 5.0.8\r\nAlloy : 1.8.7\r\nMAC El Capitan : 10.11.4\r\nAppc NPM : 4.2.7-2\r\nAppc CLI : 5.4.0-11\r\nNode: 4.4.4\r\nNexus 6 - Android 6.0.0", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-06-10T01:02:43.000+0000", "updated": "2016-06-10T01:02:43.000+0000" }, { "id": "390770", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "[~lchoudhary] There seems to be some issues in TIMOB-23562\r\n\r\nCould you also check that TIMOB-23562 is a valid bug which affects this ticket? And if so, either reopen this ticket or do whatever actions you deem necessary.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-15T04:47:32.000+0000", "updated": "2016-07-15T04:47:32.000+0000" }, { "id": "390776", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "[~lokeshchdhry] Ignore my last comment. It's another thing which I'll address in TIMOB-23562.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-15T06:25:36.000+0000", "updated": "2016-07-15T06:25:36.000+0000" } ], "maxResults": 23, "total": 23, "startAt": 0 } } }