Recursively fetch everything in the Ubuntu One volume.

This commit is contained in:
John Maguire 2012-11-28 15:05:06 +01:00
parent 823250c7c7
commit 6486e621f1
2 changed files with 14 additions and 13 deletions

View File

@ -27,7 +27,7 @@ const char* UbuntuOneService::kSettingsGroup = "Ubuntu One";
namespace { namespace {
static const char* kFileStorageEndpoint = static const char* kFileStorageEndpoint =
"https://one.ubuntu.com/api/file_storage/v1/~/Ubuntu One/"; "https://one.ubuntu.com/api/file_storage/v1";
static const char* kContentRoot = "https://files.one.ubuntu.com"; static const char* kContentRoot = "https://files.one.ubuntu.com";
static const char* kSongsTable = "ubuntu_one_songs"; static const char* kSongsTable = "ubuntu_one_songs";
static const char* kFtsTable = "ubuntu_one_songs_fts"; static const char* kFtsTable = "ubuntu_one_songs_fts";
@ -86,7 +86,7 @@ void UbuntuOneService::Connect() {
token_ = s.value("token").toString(); token_ = s.value("token").toString();
token_secret_ = s.value("token_secret").toString(); token_secret_ = s.value("token_secret").toString();
RequestFileList(); RequestFileList("/~/Ubuntu One");
return; return;
} }
@ -123,17 +123,17 @@ void UbuntuOneService::AuthenticationFinished(
s.setValue("token", token_); s.setValue("token", token_);
s.setValue("token_secret", token_secret_); s.setValue("token_secret", token_secret_);
RequestFileList(); RequestFileList("/~/Ubuntu One");
} }
void UbuntuOneService::RequestFileList() { void UbuntuOneService::RequestFileList(const QString& path) {
QUrl files_url(kFileStorageEndpoint); QUrl files_url(QString(kFileStorageEndpoint) + path);
files_url.addQueryItem("include_children", "true"); files_url.addQueryItem("include_children", "true");
QNetworkRequest request(files_url); QNetworkRequest request(files_url);
request.setRawHeader("Authorization", GenerateAuthorisationHeader()); request.setRawHeader("Authorization", GenerateAuthorisationHeader());
request.setRawHeader("Accept", "application/json"); request.setRawHeader("Accept", "application/json");
qLog(Debug) << "Sending files request"; qLog(Debug) << "Sending files request" << files_url;
QNetworkReply* files_reply = network_->get(request); QNetworkReply* files_reply = network_->get(request);
NewClosure(files_reply, SIGNAL(finished()), NewClosure(files_reply, SIGNAL(finished()),
this, SLOT(FileListRequestFinished(QNetworkReply*)), files_reply); this, SLOT(FileListRequestFinished(QNetworkReply*)), files_reply);
@ -141,19 +141,20 @@ void UbuntuOneService::RequestFileList() {
void UbuntuOneService::FileListRequestFinished(QNetworkReply* reply) { void UbuntuOneService::FileListRequestFinished(QNetworkReply* reply) {
QByteArray data = reply->readAll(); QByteArray data = reply->readAll();
qLog(Debug) << reply->url();
qLog(Debug) << data;
qLog(Debug) << reply->rawHeaderList();
qLog(Debug) << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
qLog(Debug) << reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute);
QJson::Parser parser; QJson::Parser parser;
QVariantMap result = parser.parse(data).toMap(); QVariantMap result = parser.parse(data).toMap();
qLog(Debug) << result;
QVariantList children = result["children"].toList(); QVariantList children = result["children"].toList();
for (const QVariant& c : children) { for (const QVariant& c : children) {
QVariantMap child = c.toMap(); QVariantMap child = c.toMap();
MaybeAddFileToDatabase(child); if (child["kind"].toString() == "file") {
MaybeAddFileToDatabase(child);
} else {
RequestFileList(child["resource_path"].toString());
}
} }
} }

View File

@ -34,7 +34,7 @@ class UbuntuOneService : public InternetService {
private: private:
void Connect(); void Connect();
void RequestFileList(); void RequestFileList(const QString& path);
void MaybeAddFileToDatabase(const QVariantMap& file); void MaybeAddFileToDatabase(const QVariantMap& file);
private: private: