<div dir="ltr"><div><div><div>Hey,<br><br></div>It seems be have two (mostly) independent questions here<br><br></div>- How do we notify an activity of certain global events, being them onPause/onStop or onRead/onWrite.<br>
<br></div>If we want them to be passed in activity.setup() I think we should use an object, like {"onSomething": ..., "onSomethingElse":..}. That will allow to subscribe only to some of the available events. With two events that would probably be overkill but if nothing else I think onStart/onPause/onStop should be supported, even if we also have onRead and onWrite. They are needed for more than writing to the datastore.<br>
<div class="gmail_extra"><br></div><div class="gmail_extra">Though, any reason to not use custom DOM events? This seems exactly the use case they are designed for.<br><a href="http://www.w3.org/TR/DOM-Level-3-Events/#extending_events-Custom_Events">http://www.w3.org/TR/DOM-Level-3-Events/#extending_events-Custom_Events</a><br>
</div><div class="gmail_extra"><br></div><div class="gmail_extra">- Should we have onRead and onWrite events.<br><br></div><div class="gmail_extra">What you are proposing is a bit different from what you have implemented. In your patch onWrite does only a couple of things<br>
<br></div><div class="gmail_extra">1 Proxy both onPause and onStop to the same write method.<br></div><div class="gmail_extra">2 Close the activity in onStop.<br><br></div><div class="gmail_extra">I think 1 is not enough to justify onWrite existence, it's easy enough for the concrete activity to do it if wanted.<br>
About 2, I think the concrete activity needs more control on when it is shut down. It might want to do so after having written some file outside the journal, for example.<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">
Now, you are proposing that we pass metadata in both read and write, similarly to the gtk API. But what about the data? I don't see exactly where you are going with this, so it would helpful if you could sketch out that API.<br>
</div><div class="gmail_extra"><br><br></div><div class="gmail_extra">That was a bit long, to summarize:<br><br></div><div class="gmail_extra">* I think onStart/onPause/onStop should be there in any case.<br></div><div class="gmail_extra">
* On the top of those, your current onWrite implementation adds too little to be justified.<br></div><div class="gmail_extra">* I tend to think we should use custom DOM events here instead of callbacks, if possible.<br></div>
<div class="gmail_extra"><br><div class="gmail_quote">On 16 August 2013 14:01, Manuel Quiñones <span dir="ltr"><<a href="mailto:manuq@laptop.org" target="_blank">manuq@laptop.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
This is one of the most important APIs we will have, so I would<br>
like to open discussion on it.<br>
<br>
In GTK activities, the activity developer subclass Activity, and<br>
override read() and write() methods.<br>
<br>
In web activities, we don't have that kind of hierarchy.  Instead, the<br>
activity developer imports 'activity/activity' module, and calls<br>
activity.setup() .  Then she/he can use activity.getDatastoreObject()<br>
to read and write.<br>
<br>
In GTK activities, 'read' is called at startup and 'write' is called<br>
when the activity goes to the background or when it stops.  Recently,<br>
I added in sugar-web those notifications, with the intention to make<br>
web activities behave like GTK ones.<br>
<br>
I provided an initial patch and dnarvaez proposed another option:<br>
<a href="https://github.com/sugarlabs/sugar-web/pull/74" target="_blank">https://github.com/sugarlabs/sugar-web/pull/74</a><br>
<br>
So we can:<br>
<br>
- Let web developers connect to the 'pause' and 'stop' notifications,<br>
  and use the activity datastore object directly. Pro: is more<br>
  flexible.  Con: more work in the activity side: error handling,<br>
  datastore object handling.<br>
<br>
- Subscribe 'read' and 'write' functions in activity.setup() .  They<br>
  will be called as expected, like in GTK.  'read' will have a JSON<br>
  string as argument.  'write' must return a JSON string.  Pro:<br>
  simpler approach.  Con: less flexibility in the activity side.  A<br>
  mockup can be found in this comment:<br>
  <a href="https://github.com/manuq/sugar-web/commit/3c2420f59c9aa8df44d2c0d639fe37b4af63f9fb#commitcomment-3872770" target="_blank">https://github.com/manuq/sugar-web/commit/3c2420f59c9aa8df44d2c0d639fe37b4af63f9fb#commitcomment-3872770</a><br>

<br>
Thoughts?  Any other ideas?<br>
<span class=""><font color="#888888"><br>
<br>
--<br>
.. manuq ..<br>
_______________________________________________<br>
Sugar-devel mailing list<br>
<a href="mailto:Sugar-devel@lists.sugarlabs.org">Sugar-devel@lists.sugarlabs.org</a><br>
<a href="http://lists.sugarlabs.org/listinfo/sugar-devel" target="_blank">http://lists.sugarlabs.org/listinfo/sugar-devel</a><br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br>Daniel Narvaez<br>
</div></div>