Ubuntu Software Center에서 개인화 된 배너 전시회 표시


11

Ubuntu Software Center에서 나만의 맞춤형 배너 전시회를 표시하려면 어떻게해야합니까?

나는 일부 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함수 를 다시 작성할 수 있다고 생각 하지만, 파이썬에서는 그다지 많지 않으며 가능한 경우 우분투가 사용하는 것과 동일한 방법을 이해하고 사용하고 싶습니다.

답변:


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에서 실행되는 웹 서버가 필요합니다 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에 스타일 문제가 있지만 정렬 할 수 있어야합니다. 이제 웹 서버에서 배너 전시회를 수집하고 싶으므로 JSON을 사용해야합니다. 바운티에는 이것이 내 서버에서 배너를 모아서 포함되어 있습니다. 이 정보를 포함하는 경우, 내가 상을 수행 할 수 있습니다 당신 현상금 :
호르헤 수아레스 드 lis

@ JorgeSuárezdeLis : 완료
Janus Troelsen

좋아, 이것은 작동하지 않는다. 응용 프로그램에서 다음과 같은 오류가 표시됩니다 Unable to load page - Problem occurred while loading the URL http:localhost:8800cgi-binbanner.py(의 로컬 버전과 동일 /tmp). 이전 버전은 효과가 있었지만 이제는 URL 슬래시를 제거하는 것으로 보입니다. 전시회가 모두 모여서 HTML 내용을 콘솔에 인쇄 할 수 있으며 슬래시가 있지만 응용 프로그램에서 누락되었습니다! 무슨 일이야?
Jorge Suárez de Lis 12

URL에 액세스 할 수 있습니까? curl콘솔을 사용하여로드 해보십시오 . 오류 메시지에서 슬래시 만 제거한다고 생각합니다.
야누스 트롤

나는 그렇게 생각하지 않습니다. 스크린 샷을 찍었습니다 . 첫 번째 청원은 Firefox에서 온 것입니다. 배너 목록 만 소프트웨어 센터에서 수집 된 것 같습니다.
Jorge Suárez de Lis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.