在前面的文章“Scopes 关键词 (keyword)及departments探讨(英文视频)”中,我们已经对Scope中的keyword做了一些基本的介绍。但是我们没有相应的教程。在这篇文章中,我们将通过youku Scope来介绍如何使用keyword从而使得一个Scope在不同的聚合Scope中来得到不同的呈现。
如果大家对如何开发Scope还不是很熟的话,请参阅我的教程“在Ubuntu OS上创建一个dianping Scope (Qt JSON)”。如果大家对创建Scope很熟的话,相信要不了一两个小时,你就可以创建一个和我相差不多的一个Scope来。
创建一个最基本的优酷视频Scope
只要大家按照我上面介绍的例程,我们就会很快地创建一个和如下相差不多的youku视频Scope:
整个项目的源码在:
https://github.com/liu-xiao-guo/youku
简单吧,是一个非常简单的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
}
}
}
)";
重新运行我们的Scope,当在没有聚合时,Scope的显示如下:
当我们的Scope在聚合时,显示如下:
显然在聚合时,显示的是和正常时不一样的模版。显示的是一个超大的图片。当然点击“
Youku Scope Features”时,就会进入到我们正常的Scope界面。