Sir,<br>Regards.<br><br><br><br><div class="gmail_quote">On Mon, Apr 30, 2012 at 7:38 PM, Sascha Silbe <span dir="ltr"><<a href="mailto:silbe@activitycentral.com" target="_blank">silbe@activitycentral.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Excerpts from Ajay Garg's message of 2012-04-26 23:53:51 +0200:<br>
<div class="im"><br>
> The feature specs, and workflow-screenshots, are listed at ::<br>
> <a href="http://wiki.sugarlabs.org/go/Features/Transfer_to_many_options" target="_blank">http://wiki.sugarlabs.org/go/Features/Transfer_to_many_options</a><br>
<br>
</div>This patch is HUGE. Please split it into several patches,</blockquote><div><br>The patch will be split, once the files at "src/webdav/*" and "src/webdav/acp/*" will be packaged into a rpm.<br><br>
Actually, I had to made two changes in src/webdav/WebdavResponse.py, so that the "GetLastModified()" and "GetCreationDate()" return the values in timestamp format (in conformance with what is required in listview). Perhaps, we should then make a (separate) git repo of it.<br>
<br>Let me sleep over this for a while :)<br><br><br><br><br><br> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> based on<br>
functional changes. The cover letter should explain the architecture of<br>
your solution (e.g. using a third-party WebDAV client library rather<br>
than glib / gio) and why you chose it.<br></blockquote><div><br><br>Done.<br><br><br><br><br> <br></div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
<br>
[...]<br>
> create mode 100644 src/webdav/Condition.py<br>
[...]<br>
<br>
This looks like an embedded copy of some external component. Never do<br>
that. Even if we had the resources to maintain the embedded copy<br>
(updating it whenever upstream publishes a new version), its history<br>
would be needlessly mingled with that of Sugar and we'd need to release<br>
the combination when either of the parts gets updated. The current<br>
structure of Sugar is enough of a mess already, we don't need to add to<br>
that.<br>
<br>
If the library isn't packaged for most of the major distros, we should<br>
consider whether it provides significant advantage over the alternatives<br>
and if - after that consideration - we still want to use it, try to get<br>
it into distros. If that fails, we can build a custom package for<br>
Dextrose. Bundling it with Sugar, however, is not a useful option.<br></blockquote><div><br><br>Yep, same feeling here.<br>So, a rpm will be formed.<br> <br></div><div><br> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
[<a href="http://configure.ac" target="_blank">configure.ac</a>]<br>
<div class="im">> @@ -61,8 +61,6 @@ extensions/cpsection/modemconfiguration/config.py<br>
> extensions/cpsection/Makefile<br>
> extensions/cpsection/network/Makefile<br>
> extensions/cpsection/power/Makefile<br>
> -extensions/cpsection/updater/backends/Makefile<br>
> -extensions/cpsection/updater/Makefile<br>
<br>
</div>What does WebDAV support have to do with the software update CP section?<br></blockquote><div><br>Well, I had removed this, since sugar-jhbuild wasn't compiling otherwise.<br>Tested on an image with this change, "Software Update" worked fine.<br>
<br><br><br> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
<br>
[src/jarabe/journal/journalactivity.py]<br>
<div class="im">> @@ -485,6 +485,9 @@ class JournalActivity(JournalWindow):<br>
> def is_editing_mode_present(self):<br>
> return self._editing_mode<br>
><br>
> + def get_volumes_toolbar(self):<br>
> + return self._volumes_toolbar<br>
<br>
</div>Giving some other component access to an internal part of the Journal<br>
Activity is usually going to be the wrong approach. Consider adding<br>
appropriate API to do only what you need. Depending on what that is,<br>
possible approaches may be:<br>
<br>
1. Add API to the other component and let the Journal Activity or the<br>
Volumes Toolbar take action based on that information<br>
(e.g. deactivate some buttons for read-only mounts).<br>
<br>
2. Add a signal source to the other component and let the Journal<br>
Activity or the Volumes Toolbar subscribe ("connect") to it. Useful<br>
if the information based on which the Journal Activity needs to<br>
base its decision can change at any time.<br>
<br>
3. Add API to the Journal Activity to pass through information from<br>
the Volumes Toolbar so that the other component can query it. It's<br>
worth considering why you are asking the Journal Activity,<br>
though. It's the top-level component and should connect the pieces,<br>
not usually be queried by one of the pieces.<br>
<br>
4. Add a signal source to the Journal Activity to broadcast<br>
information needed by the other component. Similar to 3., but can<br>
be used for information that can change at any time.<br></blockquote><div><br><br>Well, I am reluctant to do this, primarily because the signal-mechanism is very messy (as far as code-browsing is concerned).<br>I remember I had to spend quite too much time for finding what ultimately happens with the 'volume-error' signal (think there were about 5 levels of re-direction).<br>
<br>Moreover, I think that that 'signals' are more suited in situations when the 'cause' component performs some action asynchronously (which is not the case here; we just need to perform post-actions synchronously, as and when the 'cause' action happens).<br>
<br>Another thing, that 'JournalActivity' and its 'volumestoolbar' constiturent are on a singleton basis; so we do not need to worry about mangling different instances :)<br><br><br></div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
<br>
[src/jarabe/journal/journaltoolbox.py]<br>
<div class="im">> @@ -624,6 +624,13 @@ class BatchEraseButton(ToolButton, palettes.ActionItem):<br>
> show_not_completed_ops_info=True)<br>
> self.props.tooltip = _('Erase')<br>
><br>
> + # De-sensitize Batch-Erase button, for locally-mounted-remote-shares.<br>
> + from jarabe.journal.journalactivity import get_mount_point<br>
> + current_mount_point = get_mount_point()<br>
> +<br>
> + if model.is_mount_point_for_locally_mounted_remote_share(current_mount_point):<br>
> + self.set_sensitive(False)<br>
<br>
</div>Similar issue here. Connecting to a signal that broadcasts the change of<br>
the active mount point may be a good choice, but make sure to put it at<br>
a reasonable level, not in the individual button.<br>
<br>
<br>
I'll stop here for now; will probably wait for the next revision before<br>
commenting on the rest of the changes.<br>
<span class="HOEnZb"><font color="#888888"><br>
Sascha<br>
<br>
--<br>
<a href="http://sascha.silbe.org/" target="_blank">http://sascha.silbe.org/</a><br>
<a href="http://www.infra-silbe.de/" target="_blank">http://www.infra-silbe.de/</a><br></font></span></blockquote><div><br><br><br>Regards,<br>Ajay <br></div></div><br>