在Ubuntu软件中心上显示个性化的横幅展览


11

如何在Ubuntu软件中心上展示自己的个性化横幅展品?

我见过一些URL定义/usr/share/software-center/softwarecenter/enums.py/usr/share/software-center/softwarecenter/distro/Ubuntu.py至今。

我还尝试从视图到核心跟踪代码。但是我迷路了。_append_banner_adds来电SoftwareCenterAgent。它调用SpawnHelper。然后我迷路了。也有一些电话,SimpleFileDownloader但我无法追踪。

另外,我在调试日志中注意到了该条目。

2013-02-08 15:07:43,731 - softwarecenter.simplefiledownloader - DEBUG - download_file: http://software-center.ubuntu.com/site_media/exhibits/2012/12/SC_banner_Mixxx_2.png None True

是否有有关如何实现的文档?一些简单的方法来更改默认横幅,并以干净的方式放置我自己的横幅将非常有帮助。

我想我可以简单地重写该_append_banner_adds函数,但是我对python的了解不是很多,我想了解并使用Ubuntu尽可能使用的相同方法。

Answers:


6

打开/usr/share/software-center/softwarecenter/backend/scagent.py并编辑此函数的开头,使其显示为:

def query_exhibits(self):
    import urllib, json
    class Obj:
      def __init__(self, obj):
        self.obj = obj
      def __getattr__(self, name):
        if name[:2] == "__": return object.__getattr__(self, name)
        return self.obj[name]

    self.emit("exhibits", [Obj(x) for x in json.loads(urllib.urlopen("http://localhost:8800/cgi-bin/bannerlist.py").read())])
    return

您可以将其余部分保持原样,它将永远无法实现。

如果要在中提供脚本支持,请<iframe>编辑

/usr/share/software-center/softwarecenter/ui/gtk3/widgets/exhibits.py

并找到settings.set_property("enable-scripts", False)。更改FalseTrue

现在制作/var/www/cgi-bin/bannerlist.py并使其可执行:

#!/usr/bin/env python
import json

print("Content-type: application/json\n")

print(json.dumps([
{
  "html": "<iframe src='file:/tmp/test.html'></iframe>",
  "title_translated": "Hey dawg",
  "click_url": "http://4chan.org",
  "package_names": ("gimp"),
  "banner_urls": ["file:/"],
  "published": True
},
{
  "html": "<iframe src='http://localhost:8800/cgi-bin/banner.py'></iframe>",
  "title_translated": "Hey dawg",
  "click_url": "http://4chan.org",
  "package_names": ("gimp"),
  "banner_urls": ["file:/"],
  "published": True
}
]))

这演示了生成的横幅列表。

现在制作/var/www/cgi-bin/banner.py并使其可执行:

#!/usr/bin/env python3
import time
print("Content-type: image/svg+xml\n")
print("""
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <rect width="300" height="100"
  style="fill:rgba(0,0,255,0.5);stroke-width:1;stroke:rgba(0,0,0,0.5)"/>
  <text x="0" y="25" fill="black">Time is """ + str(time.time()) + """</text>
</svg> 
""")

这演示了生成的横幅。

您可能需要清除软件中心缓存。您可以使用来实现rm -rf ~/.cache/software-center

显然,您需要放置一些东西/tmp/test.html才能使第一个横幅正常工作。

您还需要一个运行在8800的Web服务器,该服务器cgi-bin才能运行。如果没有,请在Bash中运行:

cd /var/www
python -c "import BaseHTTPServer as h, CGIHTTPServer as c;
i = c.CGIHTTPRequestHandler;
i.cgi_directories = ['/cgi-bin'];
h.HTTPServer(('', 8800),i).serve_forever()"

您需要设计样式iframe以使其充满空间,但是您已经弄清楚了。


谢谢!我不能重复使用标准横幅旋转器吗?我尝试声明多个类,效果很好。我在iframe中遇到一些样式问题,但是我应该能够解决这个问题。现在,我想从Web服务器上收集横幅展览,因此我应该使用JSON。请注意,这包括赏金,它从我自己的服务器收集横幅。如果您提供这些信息,我将向您授予赏金:)
JorgeSuárezde Lis 2013年

@JorgeSuárezdeLis:完成
Janus Troelsen

好的,这不起作用。在应用程序上,我看到这样的错误:(Unable to load page - Problem occurred while loading the URL http:localhost:8800cgi-binbanner.py与上的本地版本相同/tmp)。旧版本可以使用,但现在似乎可以将URL的斜线删除了。可以收集展品了,我可以将HTML内容打印到控制台中,并且斜杠在那里,但是在应用程序上却不见了!可能会发生什么?
豪尔赫·苏亚雷斯·德里斯,2013年

好吧,您确定URL可以访问吗?尝试curl在控制台中使用加载它。我认为它只会去除错误消息中的斜线。
Janus Troelsen

我不这么认为。我已经截图了。前两个请愿书来自Firefox。似乎只有横幅列表是从软件中心收集的。
豪尔赫·苏亚雷斯·德利斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.