2

我编写了一个守护程序,用于从 Gourmet Recipe Manager 的数据库(即 GNU/Linux 的食谱管理器)中搜索食谱

我的程序通过一个循环从 sqlite 数据库中读取每个配方元素所需的信息。

(这样的 Ubuntu Linux 守护进程称为“范围”。
这样的范围为 ubuntu unity 提供了更多搜索资源。)

'model' 包含通过 DBUS 传送到 Ubuntu Unity 的信息。

理论上,您可以使用 URI 作为 'model' 中图像的来源,
但开发人员在 IRC 中说我无法使用数据 URI。

我也对此进行了测试,但对我来说它不起作用。

所以我在 /tmp 中缓存(d)图像。

现在您可以查看所有食谱,并根据标题搜索特定的食谱,但图像关联完全是错误的。如果您搜索 2.th ,则会显示 2.th 的配方,但会在 sqlite 表中显示第一个配方的图像。

这里有两张图片,用来理解问题:
2.th recipe 获取第一个 recipe 的图片

我已经在一些 IRC 房间寻求帮助,但没有人能帮助我......

我认为您必须以某种方式保存每个图像的状态。

如果您有一个不需要缓存图像的解决方案,我会很高兴。

完整的源文件可以在这里查看:http ://bazaar.launchpad.net/~gotwig/lens-cooking/lens-cooking/view/head:/unity-scope-gourmet

所以,这是我的代码的特定部分:

if row[14]:
        open('/tmp/unity-scope-gourmet/icon' + str(i), 'wb').write(row[14])
        model.append(uri, '/tmp/unity-scope-gourmet/icon' + str(i), 1, "text/html", title, comment, uri)
else:
        if os.path.exists('/tmp/unity-scope-gourmet/icon' + str(i)):    os.remove('/tmp/unity-scope-gourmet/icon' + str(i))
        model.append(uri, '', 1, "text/html", title, comment, uri)
4

2 回答 2

1

我通过将缓存图像的文件名与配方的每个 ID 结合起来解决了这个问题。

代码:

i = row[0]

在此处查看完整的解决方案:http: //bazaar.launchpad.net/~gotwig/lens-cooking/lens-cooking/revision/32

于 2012-04-06T13:31:07.183 回答
1

听起来您在描述一个简单的计数器错误。我不清楚你是如何初始化你的计数器“i”的,但如果它关闭了一个,简单的解决方案是在使用它之前简单地添加一个,即:

open('/tmp/unity-scope-gourmet/icon' + str(i+1), 'wb').write(row[14])
                                           ^^^
于 2012-04-05T19:21:55.180 回答