图像缓存循环出错我的食谱搜索程序(守护进程)

时间:2012-04-05 17:42:40

标签: python linux ubuntu ubuntu-unity

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

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

(Ubuntu Linux的这种守护进程称为'范围' 这样的范围为ubuntu提供了更多的搜索来源。)

'model'具有通过DBUS传递给Ubuntu Unity的信息。

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

我也对它进行了测试,对我来说它没有用。

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

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

这是两张图片,了解问题:
The 2.th recipe gets the image of the first 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)

2 个答案:

答案 0 :(得分:1)

这听起来像是一个简单的反错误。我不清楚你是如何初始化你的计数器'i',但是如果它被一个人关闭,那么简单的解决方案就是在使用之前简单地添加一个,即:

open('/tmp/unity-scope-gourmet/icon' + str(i+1), 'wb').write(row[14])
                                           ^^^

答案 1 :(得分:1)

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

代码:

i = row[0]

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