{"action":"created","comment":{"url":"https://api.github.com/repos/kpreid/shinysdr/pulls/comments/238535436","pull_request_review_id":181056778,"id":238535436,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzODUzNTQzNg==","diff_hunk":"@@ -451,17 +459,77 @@ define([\n     });\n   });\n   \n-  registerMapPlugin(({addLayer, index}) => {\n+  registerMapPlugin(({addLayer, scheduler, index}) => {\n+    const smoothStep = 1;\n     addLayer('Station Position', {\n-      featuresCell: index.implementing('shinysdr.devices.IPositionedDevice'),\n-      featureRenderer: function (devicePositioning, dirty) {\n-        // TODO: Because devicePositioning is a device component, we don't have the device itself in order to display the device's name. However, the Index is in a position to provide \"containing object\" information and arguably should.\n-        const f = renderTrackFeature(dirty, devicePositioning.track, '');\n-        f.iconURL = require.toUrl('./icons/station-user.svg');\n-        return f;\n-      }\n+      featuresCell: new DerivedCell(anyT, scheduler, function(dirty) {\n+        let features = [];\n+        // TODO: Show only the mapPluginConfig.radio.source device, and not all devices?\n+        const devices = index.implementing('shinysdr.devices.IDevice').depend(dirty);\n+        devices.forEach(device => {\n+          const name = '';  // TODO: Device name doesn't appear to be available?\n+          let position;\n+          // TODO: There's gotta be a better way to find child components that implement a given interface.\n+          const components = device.components.depend(dirty);\n+          for (let key in components) {\n+            let component = components[key].get();\n+            if (isImplementing(component, 'shinysdr.devices.IPositionedDevice')) {\n+              const track = component.track.depend(dirty);","path":"shinysdr/i/webstatic/client/map/map-layers.js","position":58,"original_position":58,"commit_id":"fa9f6816940da8a67e57fe2979234dd81ec0b30e","original_commit_id":"fa9f6816940da8a67e57fe2979234dd81ec0b30e","user":{"login":"quentinmit","id":115761,"node_id":"MDQ6VXNlcjExNTc2MQ==","avatar_url":"https://avatars1.githubusercontent.com/u/115761?v=4","gravatar_id":"","url":"https://api.github.com/users/quentinmit","html_url":"https://github.com/quentinmit","followers_url":"https://api.github.com/users/quentinmit/followers","following_url":"https://api.github.com/users/quentinmit/following{/other_user}","gists_url":"https://api.github.com/users/quentinmit/gists{/gist_id}","starred_url":"https://api.github.com/users/quentinmit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/quentinmit/subscriptions","organizations_url":"https://api.github.com/users/quentinmit/orgs","repos_url":"https://api.github.com/users/quentinmit/repos","events_url":"https://api.github.com/users/quentinmit/events{/privacy}","received_events_url":"https://api.github.com/users/quentinmit/received_events","type":"User","site_admin":false},"body":"Thanks for the explanation, that makes perfect sense. I've reworked it so the layer honors this contract.","created_at":"2018-12-04T05:45:24Z","updated_at":"2018-12-04T05:59:03Z","html_url":"https://github.com/kpreid/shinysdr/pull/120#discussion_r238535436","pull_request_url":"https://api.github.com/repos/kpreid/shinysdr/pulls/120","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/kpreid/shinysdr/pulls/comments/238535436"},"html":{"href":"https://github.com/kpreid/shinysdr/pull/120#discussion_r238535436"},"pull_request":{"href":"https://api.github.com/repos/kpreid/shinysdr/pulls/120"}},"in_reply_to_id":238127340},"pull_request":{"url":"https://api.github.com/repos/kpreid/shinysdr/pulls/120","id":234873304,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM0ODczMzA0","html_url":"https://github.com/kpreid/shinysdr/pull/120","diff_url":"https://github.com/kpreid/shinysdr/pull/120.diff","patch_url":"https://github.com/kpreid/shinysdr/pull/120.patch","issue_url":"https://api.github.com/repos/kpreid/shinysdr/issues/120","number":120,"state":"open","locked":false,"title":"Show rotator azimuth on the map.","user":{"login":"quentinmit","id":115761,"node_id":"MDQ6VXNlcjExNTc2MQ==","avatar_url":"https://avatars1.githubusercontent.com/u/115761?v=4","gravatar_id":"","url":"https://api.github.com/users/quentinmit","html_url":"https://github.com/quentinmit","followers_url":"https://api.github.com/users/quentinmit/followers","following_url":"https://api.github.com/users/quentinmit/following{/other_user}","gists_url":"https://api.github.com/users/quentinmit/gists{/gist_id}","starred_url":"https://api.github.com/users/quentinmit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/quentinmit/subscriptions","organizations_url":"https://api.github.com/users/quentinmit/orgs","repos_url":"https://api.github.com/users/quentinmit/repos","events_url":"https://api.github.com/users/quentinmit/events{/privacy}","received_events_url":"https://api.github.com/users/quentinmit/received_events","type":"User","site_admin":false},"body":"This adds the azimuth information from hamlib to the map. (Elevation would be amusing with WebGL, but I didn't see a way to plumb that through.)","created_at":"2018-11-30T05:07:46Z","updated_at":"2018-12-04T05:59:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5fa8a86ee13470579e42432ddbbf8fda0818d67a","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/kpreid/shinysdr/pulls/120/commits","review_comments_url":"https://api.github.com/repos/kpreid/shinysdr/pulls/120/comments","review_comment_url":"https://api.github.com/repos/kpreid/shinysdr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kpreid/shinysdr/issues/120/comments","statuses_url":"https://api.github.com/repos/kpreid/shinysdr/statuses/fa9f6816940da8a67e57fe2979234dd81ec0b30e","head":{"label":"w1xm:rotator-map","ref":"rotator-map","sha":"fa9f6816940da8a67e57fe2979234dd81ec0b30e","user":{"login":"w1xm","id":39207718,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM5MjA3NzE4","avatar_url":"https://avatars3.githubusercontent.com/u/39207718?v=4","gravatar_id":"","url":"https://api.github.com/users/w1xm","html_url":"https://github.com/w1xm","followers_url":"https://api.github.com/users/w1xm/followers","following_url":"https://api.github.com/users/w1xm/following{/other_user}","gists_url":"https://api.github.com/users/w1xm/gists{/gist_id}","starred_url":"https://api.github.com/users/w1xm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/w1xm/subscriptions","organizations_url":"https://api.github.com/users/w1xm/orgs","repos_url":"https://api.github.com/users/w1xm/repos","events_url":"https://api.github.com/users/w1xm/events{/privacy}","received_events_url":"https://api.github.com/users/w1xm/received_events","type":"Organization","site_admin":false},"repo":{"id":159058362,"node_id":"MDEwOlJlcG9zaXRvcnkxNTkwNTgzNjI=","name":"shinysdr","full_name":"w1xm/shinysdr","private":false,"owner":{"login":"w1xm","id":39207718,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM5MjA3NzE4","avatar_url":"https://avatars3.githubusercontent.com/u/39207718?v=4","gravatar_id":"","url":"https://api.github.com/users/w1xm","html_url":"https://github.com/w1xm","followers_url":"https://api.github.com/users/w1xm/followers","following_url":"https://api.github.com/users/w1xm/following{/other_user}","gists_url":"https://api.github.com/users/w1xm/gists{/gist_id}","starred_url":"https://api.github.com/users/w1xm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/w1xm/subscriptions","organizations_url":"https://api.github.com/users/w1xm/orgs","repos_url":"https://api.github.com/users/w1xm/repos","events_url":"https://api.github.com/users/w1xm/events{/privacy}","received_events_url":"https://api.github.com/users/w1xm/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/w1xm/shinysdr","description":"Software-defined radio receiver application built on GNU Radio with a web-based UI and plugins. In development, usable but incomplete. Compatible with RTL-SDR.","fork":true,"url":"https://api.github.com/repos/w1xm/shinysdr","forks_url":"https://api.github.com/repos/w1xm/shinysdr/forks","keys_url":"https://api.github.com/repos/w1xm/shinysdr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/w1xm/shinysdr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/w1xm/shinysdr/teams","hooks_url":"https://api.github.com/repos/w1xm/shinysdr/hooks","issue_events_url":"https://api.github.com/repos/w1xm/shinysdr/issues/events{/number}","events_url":"https://api.github.com/repos/w1xm/shinysdr/events","assignees_url":"https://api.github.com/repos/w1xm/shinysdr/assignees{/user}","branches_url":"https://api.github.com/repos/w1xm/shinysdr/branches{/branch}","tags_url":"https://api.github.com/repos/w1xm/shinysdr/tags","blobs_url":"https://api.github.com/repos/w1xm/shinysdr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/w1xm/shinysdr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/w1xm/shinysdr/git/refs{/sha}","trees_url":"https://api.github.com/repos/w1xm/shinysdr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/w1xm/shinysdr/statuses/{sha}","languages_url":"https://api.github.com/repos/w1xm/shinysdr/languages","stargazers_url":"https://api.github.com/repos/w1xm/shinysdr/stargazers","contributors_url":"https://api.github.com/repos/w1xm/shinysdr/contributors","subscribers_url":"https://api.github.com/repos/w1xm/shinysdr/subscribers","subscription_url":"https://api.github.com/repos/w1xm/shinysdr/subscription","commits_url":"https://api.github.com/repos/w1xm/shinysdr/commits{/sha}","git_commits_url":"https://api.github.com/repos/w1xm/shinysdr/git/commits{/sha}","comments_url":"https://api.github.com/repos/w1xm/shinysdr/comments{/number}","issue_comment_url":"https://api.github.com/repos/w1xm/shinysdr/issues/comments{/number}","contents_url":"https://api.github.com/repos/w1xm/shinysdr/contents/{+path}","compare_url":"https://api.github.com/repos/w1xm/shinysdr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/w1xm/shinysdr/merges","archive_url":"https://api.github.com/repos/w1xm/shinysdr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/w1xm/shinysdr/downloads","issues_url":"https://api.github.com/repos/w1xm/shinysdr/issues{/number}","pulls_url":"https://api.github.com/repos/w1xm/shinysdr/pulls{/number}","milestones_url":"https://api.github.com/repos/w1xm/shinysdr/milestones{/number}","notifications_url":"https://api.github.com/repos/w1xm/shinysdr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/w1xm/shinysdr/labels{/name}","releases_url":"https://api.github.com/repos/w1xm/shinysdr/releases{/id}","deployments_url":"https://api.github.com/repos/w1xm/shinysdr/deployments","created_at":"2018-11-25T17:46:35Z","updated_at":"2018-11-26T17:58:24Z","pushed_at":"2018-11-30T17:57:05Z","git_url":"git://github.com/w1xm/shinysdr.git","ssh_url":"git@github.com:w1xm/shinysdr.git","clone_url":"https://github.com/w1xm/shinysdr.git","svn_url":"https://github.com/w1xm/shinysdr","homepage":"https://shinysdr.switchb.org/","size":5772,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"kpreid:master","ref":"master","sha":"7217576cdaf4daf535be4efd287c35d49df07108","user":{"login":"kpreid","id":779501,"node_id":"MDQ6VXNlcjc3OTUwMQ==","avatar_url":"https://avatars3.githubusercontent.com/u/779501?v=4","gravatar_id":"","url":"https://api.github.com/users/kpreid","html_url":"https://github.com/kpreid","followers_url":"https://api.github.com/users/kpreid/followers","following_url":"https://api.github.com/users/kpreid/following{/other_user}","gists_url":"https://api.github.com/users/kpreid/gists{/gist_id}","starred_url":"https://api.github.com/users/kpreid/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kpreid/subscriptions","organizations_url":"https://api.github.com/users/kpreid/orgs","repos_url":"https://api.github.com/users/kpreid/repos","events_url":"https://api.github.com/users/kpreid/events{/privacy}","received_events_url":"https://api.github.com/users/kpreid/received_events","type":"User","site_admin":false},"repo":{"id":14116426,"node_id":"MDEwOlJlcG9zaXRvcnkxNDExNjQyNg==","name":"shinysdr","full_name":"kpreid/shinysdr","private":false,"owner":{"login":"kpreid","id":779501,"node_id":"MDQ6VXNlcjc3OTUwMQ==","avatar_url":"https://avatars3.githubusercontent.com/u/779501?v=4","gravatar_id":"","url":"https://api.github.com/users/kpreid","html_url":"https://github.com/kpreid","followers_url":"https://api.github.com/users/kpreid/followers","following_url":"https://api.github.com/users/kpreid/following{/other_user}","gists_url":"https://api.github.com/users/kpreid/gists{/gist_id}","starred_url":"https://api.github.com/users/kpreid/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kpreid/subscriptions","organizations_url":"https://api.github.com/users/kpreid/orgs","repos_url":"https://api.github.com/users/kpreid/repos","events_url":"https://api.github.com/users/kpreid/events{/privacy}","received_events_url":"https://api.github.com/users/kpreid/received_events","type":"User","site_admin":false},"html_url":"https://github.com/kpreid/shinysdr","description":"Software-defined radio receiver application built on GNU Radio with a web-based UI and plugins. In development, usable but incomplete. Compatible with RTL-SDR.","fork":false,"url":"https://api.github.com/repos/kpreid/shinysdr","forks_url":"https://api.github.com/repos/kpreid/shinysdr/forks","keys_url":"https://api.github.com/repos/kpreid/shinysdr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kpreid/shinysdr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kpreid/shinysdr/teams","hooks_url":"https://api.github.com/repos/kpreid/shinysdr/hooks","issue_events_url":"https://api.github.com/repos/kpreid/shinysdr/issues/events{/number}","events_url":"https://api.github.com/repos/kpreid/shinysdr/events","assignees_url":"https://api.github.com/repos/kpreid/shinysdr/assignees{/user}","branches_url":"https://api.github.com/repos/kpreid/shinysdr/branches{/branch}","tags_url":"https://api.github.com/repos/kpreid/shinysdr/tags","blobs_url":"https://api.github.com/repos/kpreid/shinysdr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kpreid/shinysdr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kpreid/shinysdr/git/refs{/sha}","trees_url":"https://api.github.com/repos/kpreid/shinysdr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kpreid/shinysdr/statuses/{sha}","languages_url":"https://api.github.com/repos/kpreid/shinysdr/languages","stargazers_url":"https://api.github.com/repos/kpreid/shinysdr/stargazers","contributors_url":"https://api.github.com/repos/kpreid/shinysdr/contributors","subscribers_url":"https://api.github.com/repos/kpreid/shinysdr/subscribers","subscription_url":"https://api.github.com/repos/kpreid/shinysdr/subscription","commits_url":"https://api.github.com/repos/kpreid/shinysdr/commits{/sha}","git_commits_url":"https://api.github.com/repos/kpreid/shinysdr/git/commits{/sha}","comments_url":"https://api.github.com/repos/kpreid/shinysdr/comments{/number}","issue_comment_url":"https://api.github.com/repos/kpreid/shinysdr/issues/comments{/number}","contents_url":"https://api.github.com/repos/kpreid/shinysdr/contents/{+path}","compare_url":"https://api.github.com/repos/kpreid/shinysdr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kpreid/shinysdr/merges","archive_url":"https://api.github.com/repos/kpreid/shinysdr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kpreid/shinysdr/downloads","issues_url":"https://api.github.com/repos/kpreid/shinysdr/issues{/number}","pulls_url":"https://api.github.com/repos/kpreid/shinysdr/pulls{/number}","milestones_url":"https://api.github.com/repos/kpreid/shinysdr/milestones{/number}","notifications_url":"https://api.github.com/repos/kpreid/shinysdr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kpreid/shinysdr/labels{/name}","releases_url":"https://api.github.com/repos/kpreid/shinysdr/releases{/id}","deployments_url":"https://api.github.com/repos/kpreid/shinysdr/deployments","created_at":"2013-11-04T16:31:48Z","updated_at":"2018-12-03T01:29:34Z","pushed_at":"2018-12-03T01:29:31Z","git_url":"git://github.com/kpreid/shinysdr.git","ssh_url":"git@github.com:kpreid/shinysdr.git","clone_url":"https://github.com/kpreid/shinysdr.git","svn_url":"https://github.com/kpreid/shinysdr","homepage":"https://shinysdr.switchb.org/","size":5772,"stargazers_count":678,"watchers_count":678,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":88,"mirror_url":null,"archived":false,"open_issues_count":32,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":88,"open_issues":32,"watchers":678,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kpreid/shinysdr/pulls/120"},"html":{"href":"https://github.com/kpreid/shinysdr/pull/120"},"issue":{"href":"https://api.github.com/repos/kpreid/shinysdr/issues/120"},"comments":{"href":"https://api.github.com/repos/kpreid/shinysdr/issues/120/comments"},"review_comments":{"href":"https://api.github.com/repos/kpreid/shinysdr/pulls/120/comments"},"review_comment":{"href":"https://api.github.com/repos/kpreid/shinysdr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kpreid/shinysdr/pulls/120/commits"},"statuses":{"href":"https://api.github.com/repos/kpreid/shinysdr/statuses/fa9f6816940da8a67e57fe2979234dd81ec0b30e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"quentinmit"}}