Ubuntu Yazılım Merkezi'nde kişiselleştirilmiş banner sergileri göster


11

Ubuntu Yazılım Merkezi'nde kendi kişiselleştirilmiş banner sergilerimi nasıl gösterebilirim?

Ben bazı URL tanımlarını gördüm /usr/share/software-center/softwarecenter/enums.pyve /usr/share/software-center/softwarecenter/distro/Ubuntu.pyşimdiye kadar.

Ayrıca görünümlerden çekirdeğe kodu izlemeye çalıştım. Ama kayboldum. _append_banner_addsçağrıları SoftwareCenterAgent. Çağırır SpawnHelper. Sonra kaybolurum. Adresinde de bazı aramalar var, SimpleFileDownloaderancak onları takip edemiyorum.

Ayrıca, hata ayıklama günlüğünde bu girdiyi fark ettim.

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

Bunun nasıl uygulandığına dair belgeler var mı? Varsayılan afişleri değiştirmek ve kendi afişlerimi temiz bir şekilde koymak için bazı basit tarifler çok yararlı olacaktır.

Sadece _append_banner_addsişlevi yeniden yazabilirim , ama python üzerinde çok üretken değilim ve mümkünse Ubuntu'nun kullandığı aynı yöntemleri anlamak ve kullanmak istiyorum.

Yanıtlar:


6

/usr/share/software-center/softwarecenter/backend/scagent.pyBu işlevin başlangıcını açın ve düzenleyin, böylece şöyle yazar:

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

Gerisini olduğu gibi bırakabilirsiniz, asla ulaşılamaz.

Bilgisayarınızda komut dosyası desteği istiyorsanız <iframe>,

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

ve bulun settings.set_property("enable-scripts", False). Değişim Falseiçin True.

Şimdi /var/www/cgi-bin/bannerlist.pyçalıştırılabilir hale getirin:

#!/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
}
]))

Bu oluşturulan bir başlık listesini gösterir.

Şimdi /var/www/cgi-bin/banner.pyçalıştırılabilir hale getirin:

#!/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> 
""")

Bu, oluşturulan bir banner'ı gösterir.

Yazılım merkezi önbelleğini temizlemeniz gerekebilir. Bunu kullanarak yapabilirsiniz rm -rf ~/.cache/software-center.

Açıkçası /tmp/test.html, ilk afişin çalışması için bir şeyler koymanız gerekiyor .

Bunun için 8800'de çalışan bir web sunucusuna da ihtiyacınız var cgi-bin. Buna sahip değilseniz, bunu Bash'de çalıştırın:

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()"

iframeAlanı doldurmak için stil yapmanız gerekir, ancak bunu anladınız.


Teşekkürler! Standart afiş döndürücüyü tekrar kullanamaz mıyım? Birden fazla sınıf bildirmeyi denedim ve oldukça iyi çalıştı. İç çerçeve ile ilgili bazı stil sorunları yaşıyorum, ancak bunu çözebilmeliyim. Şimdi bir web sunucusundan afiş sergileri toplamak istiyorum, bu yüzden muhtemelen JSON kullanmalıyım. Ödülün bunu içerdiğini ve kendi sunucumdan afiş topladığını lütfen unutmayın. Bu bilgileri eklerseniz, size ödül vereceğim :)
Jorge Suárez de Lis

@ JorgeSuárezdeLis: bitti
Janus Troelsen

Tamam, bu çalışmıyor. Uygulamada böyle bir hata görüyorum: Unable to load page - Problem occurred while loading the URL http:localhost:8800cgi-binbanner.py(yerel sürüm için aynı /tmp). Eski sürüm işe yaradı, ancak şimdi URL'lerin bir yerlerde eğik çizgiler oluşturduğu görülüyor. Sergiler tamam toplandı ve HTML içeriğini konsola yazdırabilirim ve eğik çizgiler var, ancak uygulamada eksikler! Ne olabilir?
Jorge Suárez de Lis

URL'nin erişilebilir olduğundan emin misiniz? curlKonsolda kullanarak yüklemeyi deneyin . Ben sadece hata mesajı eğik çizgiler şeritler düşünüyorum.
Janus Troelsen

Ben öyle düşünmüyorum. Ekran görüntüsü aldım . İlk iki dilekçe Firefox'tan. Yazılım merkezinden yalnızca bannerlist toplanmış gibi görünüyor.
Jorge Suárez de Lis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.