在前面的文章“Scopes 关键词 (keyword)及departments探讨(英文视频)”中,我们已经对Scope中的keyword做了一些基本的介绍。但是我们没有相应的教程。在这篇文章中,我们将通过youku Scope来介绍如何使用keyword从而使得一个Scope在不同的聚合Scope中来得到不同的呈现。
如果大家对如何开发Scope还不是很熟的话,请参阅我的教程“在Ubuntu OS上创建一个dianping Scope (Qt JSON)”。如果大家对创建Scope很熟的话,相信要不了一两个小时,你就可以创建一个和我相差不多的一个Scope来。
创建一个最基本的优酷视频Scope
只要大家按照我上面介绍的例程,我们就会很快地创建一个和如下相差不多的youku视频Scope:
整个项目的源码在:git clone https://gitcafe.com/ubuntu/youku.git
简单吧,是一个非常简单的youku Scope。
在我们的代码中,我们也同时修改“src/data”目录下的“youku.ini.in”文件:
[ScopeConfig] _DisplayName=Youku Scope _Description=This is a Youku scope Art=screenshot.png Author=Firstname Lastname Icon=icon.png Keywords=video;videos [Appearance] PageHeader.Logo=logo.png
可以看出来在这里,我们使用了Keywords “video”及“videos”。表明我们的Scope可以被Video Scope所聚合,并呈现在Video聚合Scope中。当然如果我们的Scope也是和位置相关的,我们也可以加入“nearby”在我们的Scope中。更多的关键词keywords可以在网址https://developer.ubuntu.com/en/scopes/tutorials/scope-keywords/中找到。我们在手机中打开Video聚合Scope,并打开它的设置:
记得在“Display results from Youku Scope”选项上勾上。我们可以看出来,在Video聚合Scope中,我们可以看到我们的youku Scope里的内容,虽然只是其中的一部分。如果,我们点击上图的“Youku Scope Features”,我们可以直接切换到我们的youku Scope中来:
这时如果我们返回的话,就会回到先前的画面中去。
对聚合时显示不同的UI
上面的设计,我们对代码没有做任何实质性的改变。我们只是对初始化文件加入了一些我们需要的关键词。那么我们如何来对聚合时显示不同的UI呢?另外对有些Scope来说,我们可能添加更多的不同种类的keyword,那么这样对不同的keyword我们可能希望有不同的展现,而不是都是一样的。
为了达到设计的目的,我们对我们的代码做了如下的修改:
query.cpp
void Query::run(sc::SearchReplyProxy const& reply) { auto metadata_ = search_metadata(); if (metadata_.is_aggregated()) { auto keywords = metadata_.aggregated_keywords(); if ( (keywords.find("videos") != keywords.end()) || (keywords.find("video") != keywords.end()) ) { qDebug() << "it is a video scope"; do_videos_search(reply); } } else { qDebug() << "it is a normal video scope"; do_normal_search(reply); } }
在这里,我们通过对keyword的解析,我们可以对为我们的Scope来进行不同的展示,甚至我们可以使用不同的API来得到不同的数据。为了说明问题的方便,我们特意在youku Scope在聚合时使用了一个不同的模版来展示数据:
const std::string VIDEOS_TEMPLATE = R"( { "schema-version": 1, "template": { "category-layout": "grid", "card-size": "large", "overlay": true }, "components": { "title": "title", "subtitle": "subtitle", "art" : { "field": "art", "aspect-ratio": 2.0 } } } )";
这里显示的是一个超大的grid模版。
重新运行我们的Scope,当在没有聚合时,Scope的显示如下:
当我们的Scope在聚合时,显示如下:
显然在聚合时,显示的是和正常时不一样的模版。显示的是一个超大的图片。当然点击“Youku Scope Features”时,就会进入到我们正常的Scope界面。
整个项目的源码在:git clone https://gitcafe.com/ubuntu/youku_keywords.git