我编写了一个守护程序,用于搜索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)
答案 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