แสดงการจัดแสดงแบนเนอร์ส่วนบุคคลบน 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ฟังก์ชั่นใหม่ได้ แต่ฉันไม่ค่อยได้ผลกับงูใหญ่และฉันต้องการที่จะเข้าใจและใช้วิธีการเดียวกันกับที่ Ubuntu ใช้ถ้าเป็นไปได้

คำตอบ:


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เพื่อทำให้เต็มพื้นที่ แต่คุณคิดออกว่า


ขอบคุณ! ฉันไม่สามารถใช้ rotator แบนเนอร์มาตรฐานซ้ำได้หรือไม่ ฉันพยายามประกาศหลายคลาสและมันใช้งานได้ดี ฉันมีปัญหาในการใส่สไตล์กับ iframe แต่ฉันน่าจะสามารถคัดออกได้ ตอนนี้ฉันต้องการรวบรวมการจัดแสดงแบนเนอร์จากเว็บเซิร์ฟเวอร์ดังนั้นฉันควรใช้ JSON โปรดสังเกตว่าเงินรางวัลรวมถึงสิ่งนี้รวบรวมแบนเนอร์จากเซิร์ฟเวอร์ของฉันเอง หากคุณมีข้อมูลนี้ผมจะสามารถที่จะได้รับรางวัลที่คุณโปรดปราน :)
เฆSuárez de 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

คุณแน่ใจหรือไม่ว่า URL นั้นสามารถเข้าถึงได้ ลองโหลดโดยใช้curlในคอนโซล ฉันคิดว่ามันเพียงตัดเครื่องหมายทับในข้อความแสดงข้อผิดพลาด
Janus Troelsen

ฉันไม่คิดอย่างนั้น ฉันถ่ายภาพหน้าจอแล้ว คำร้องสองอันแรกนั้นมาจาก Firefox ดูเหมือนว่าจะรวบรวมเฉพาะแบนเนอร์จากศูนย์ซอฟต์แวร์
Jorge Suárez de Lis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.