This site has been retired. For up to date information, see handbook.gnome.org or gitlab.gnome.org.


[Home] [TitleIndex] [WordIndex

Transfers

Introduction

Various components and apps need to transfer content or files. Many of these operations take a significant amount of time. It would be nice to have a single place that the user can go to see such activity. Applications would be able to safely exit while the transfer is ongoing. Transfers may be uploads, downloads, or copy/move operations within the system.

Designers

William Jon McCann

Objectives

Transfers may include:

Constraints

Relevant Art

Nokia N9

http://www.developer.nokia.com/swipe/ux/images/integrate_your_app/transfer_manager-thumb.jpg

Amazon MP3 Downloader

http://www.oreillynet.com/mac/blog/images/cadamson-amazon-mp3-downloader.png

GNOME

http://origin.arstechnica.com/reviews/os/gnome-2-22-review.media/GVFS.png

Firefox Downloader

http://img.skitch.com/20090710-eyt9t5ydfkqy44ths9b9jeiga7.png firefoxdownload.png

Picasa Uploader

https://lh5.googleusercontent.com/-fUoW7At2vdc/TspvxXhtT0I/AAAAAAAAYzA/RHHVhRcqtec/s400/Screen%2520Shot%25202011-11-21%2520at%252010.35.03%2520AM.jpg https://lh6.googleusercontent.com/-0Fy_UUHM_Gw/TspujvvNHlI/AAAAAAAAYys/uDNxtVgJgsk/s400/Screen%2520Shot%25202011-11-21%2520at%252010.29.42%2520AM.jpg

Transmission

http://www.transmissionbt.com/images/screenshots/GTK-Large.jpg

Chrome downloads

chromedownloads.png

Discussion

(from Garrett)

I've noticed that ~/Downloads becomes cluttered and eventually useless for a few reasons:

  1. There's no easy way to rename files to names useful to *me* (and not whatever the webserver thinks is useful).
  2. It's too hard to move the file to a useful location. (It requires opening the file manager, going to ~/Downloads, finding the file, moving the file)
  3. Many files are downloaded to simply open up the file with another program, so ~/Downloads sometimes serves as a temporary holding space.

Possible solutions:

  1. Enable file renaming directly in the transfers dialog
  2. Make it easy to: (a) move the file elsewhere (reusing the file manager's "move to" dialog, when it is implemented) (b) directly import into software that handles the content (photos, music, documents, etc.), and get it out of Downloads
  3. Consider: (a) an "archiving" function to keep the files around somewhere, but not in the ~/Downloads directory (b) an action to delete the downloaded files

This could make sense from downloading something from the Internet. It might be a little odd for file transfers, but some of it may make sense (such as renaming, importing, etc.) after file copying from a networked or USB drive, for example.

Tentative Design

https://raw.github.com/gnome-design-team/gnome-mockups/master/transfers/png/transfers.png

https://raw.github.com/gnome-design-team/gnome-mockups/master/transfers/png/selection-mode.png

Transfers Notifications

https://raw.github.com/gnome-design-team/gnome-mockups/master/transfers/png/notifications-wireframes.png

Comments

progressbar1.jpg progressbar2.jpg

Zeeshan Ali: anyone know who worked on 'transfers' ui in #N9 ? We need something similar in #gnome and have some questions about implemention

Josh Soref: Ask Adele Simula or Tuukka Tolvanen?

I'm curious about your questions, as BB10 has a Transfers UI.

Zeeshan Ali: Josh, Thanks. So here is the design page: https://live.gnome.org/Design/Apps/Transfers

My question is how to implement " Applications would be able to safely exit while the transfer is ongoing"? For this to happen, we must have a separate app/process that does the actual transfer and handing over transfers might involve state/cookies (including security info).

So I would like to know how they actually implemented transfers. Was it a separate app or apps doing transfer don't actually exit and only the UI is hidden from users.

Josh Soref: From memory there was debate about feasibility of passing the credentials to another process. 
The API that I found appears to have given up on that. Which means that a download halts or fails when the requesting process ends: http://meego.gitorious.org/meego-sharing-framework/transfer-ui/blobs/a730089219133e9bb66b9965d5a6e7e2a83ca67e/libtuiclient/examples/tuiexample.cpp

Josh Soref: The other problem was that the browser team wasn't interested in sharing its responsibility for owning downloads with another process. And there were credential lifetime concerns.

Zeeshan Ali: so that means, the UI process remains alive while UI is hidden or every UI that does transfer had a D-Bus backend that did the actual thing. How did browser handle it? In N9, the browser can be safely quit without failing the download.

Josh Soref: On the n900 the browser was two processes:
1: ui
2. rendering-engine daemon

In that model, quiting the UI didn't have to terminate ongoing transfers. I'd assume the same general model applied for the n9 browser.

Zeeshan Ali: ah ok but I'm wondering if that is what every app did.

Alexander Bokovoy: Zeeshan , all server code is on gitorius.

Alexander Bokovoy: https://meego.gitorious.org/meego-sharing-framework

Alexander Bokovoy: In detail. We needed to differentiate uploads and downloads. Both reported their status to Transfer UI which is a d-bus daemon that also had a UI you could launch via status menu or from an app. This UI is only showing progresses, the actual activity happens in the app that registers the transfer. 

Uploads were handled by webupload engine. It supported multiple plugins that were doing actual uploads in a separate processes. The engine shuts itself down when no processing left (and started on d-bus activation). Webupload engine was actually registering transfers on behalf of uploader.

In case of uploads, users were selecting what to upload in an application UI or application could have called Share UI via d-bus, passing request to show a UI to select destination to share. The actual Share _UI_ implementation Nokia decided to keep proprietary but the rest was published. Now there is QML implementation of that proprietary code as well, available at the same place on gitorious.
Browser was handling downloads by itself, only registering to Transfer UI that it is there. Actually, both Nokia browser and Mozilla -- you can find support for Transfer UI API already in Firefox upstream code. Both did it via separate process that runs in background since UI and actual rendering parts are separate processes both in Nokia browser and in Firefox Mobile.
Other apps -- Feeds had feed engine that ran in background and reported its update status to Transfer UI, Email synchronization did the same. Unfortunately, for the latter two their code was never published.

Olli Salli: Nice to see experience gained in our N9 endeavour being passed on and utilized 

Alberto Mardegan: I'm not directly involved in it, but I hope that we can reuse at least parts of the MeeGo Sharing Framework in Ubuntu:
https://blueprints.launchpad.net/ubuntu/+spec/client-1303-share-service

-- ZeeshanAli

See Also


2024-10-23 11:03