{ "id": "173995", "key": "TIMOB-27320", "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": [], "resolution": null, "resolutiondate": null, "created": "2019-08-08T14:55:35.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "engSchedule" ], "versions": [ { "id": "20827", "name": "Release 8.2.0", "archived": false, "released": true, "releaseDate": "2019-09-19" } ], "issuelinks": [ { "id": "57802", "type": { "id": "10001", "name": "Cloners", "inward": "is cloned into", "outward": "is cloned from" }, "inwardIssue": { "id": "173996", "key": "TIMOB-27321", "fields": { "summary": "iOS: Ti.Stream.pump with Ti.Stream.write async operations don't actually run async/interleaved", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "Medium", "id": "3" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "57803", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "144873", "key": "TIMOB-18583", "fields": { "summary": "TiAPI: Create Node-compatible filesystem module API", "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": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } } ], "assignee": { "name": "amukherjee", "key": "amukherjee", "displayName": "Abir Mukherjee", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2020-11-23T18:05:13.000+0000", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "components": [ { "id": "10206", "name": "iOS", "description": "iOS Platform" } ], "description": "Ti.Stream.writeStream behaves differently on iOS vs Android. Android will do all of the writes and will fire the callback once at the end (or will fire it as soon as an error occurs).\r\n\r\niOS will fire if an error occurs; or every iteration of it's internal read/write loop and at then at the end. But there's no way to know beforehand if it is done unless you know the exact byte count expected to be transferred. (The case I specifically saw was a Ti.File.FileStream and copying it's data)\r\n\r\nAs a first step, adding a \"done\" property to the callback's argument object would be useful so you can tell when iOS is actually finished. A second step would be to eliminate the per-loop callback firing altogether for iOS.", "attachment": [], "flagged": false, "summary": "iOS: Ti.Stream.writeStream fires callback for each loop of writes, no way to tell when done", "creator": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "subtasks": [], "reporter": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "environment": null, "comment": { "comments": [], "maxResults": 0, "total": 0, "startAt": 0 } } }