Hiển thị triển lãm biểu ngữ được cá nhân hóa trên Trung tâm phần mềm Ubuntu


11

Làm cách nào tôi có thể hiển thị các triển lãm biểu ngữ được cá nhân hóa của riêng mình trên Trung tâm phần mềm Ubuntu?

Tôi đã thấy một số định nghĩa URL trên /usr/share/software-center/softwarecenter/enums.py/usr/share/software-center/softwarecenter/distro/Ubuntu.pycho đến nay.

Tôi cũng đã cố gắng theo dõi mã từ các khung nhìn đến cốt lõi. Nhưng tôi bị lạc. _append_banner_addscác cuộc gọi SoftwareCenterAgent. Nó gọi SpawnHelper. Rồi tôi bị lạc. Cũng có một số cuộc gọi tại SimpleFileDownloadernhưng tôi không thể theo dõi chúng.

Ngoài ra, tôi đã nhận thấy mục này trên nhật ký gỡ lỗi.

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

Có tài liệu về cách thức này được thực hiện? Một số công thức đơn giản để thay đổi các biểu ngữ mặc định và đặt các biểu ngữ của riêng tôi một cách sạch sẽ sẽ rất hữu ích.

Tôi cho rằng tôi có thể đơn giản viết lại _append_banner_addshàm, nhưng tôi không quá chuyên nghiệp về python và tôi muốn hiểu và sử dụng các phương thức tương tự mà Ubuntu đang sử dụng, nếu có thể.

Câu trả lời:


6

Mở /usr/share/software-center/softwarecenter/backend/scagent.pyvà chỉnh sửa phần đầu của hàm này, để thông báo:

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

Bạn có thể để phần còn lại như nó là, nó sẽ không bao giờ đạt được.

Nếu bạn muốn hỗ trợ kịch bản trong <iframe>, hãy chỉnh sửa

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

và tìm settings.set_property("enable-scripts", False). Thay đổi Falsethành True.

Bây giờ thực hiện /var/www/cgi-bin/bannerlist.pyvà làm cho nó thực thi:

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

Điều này cho thấy một danh sách biểu ngữ được tạo ra.

Bây giờ thực hiện /var/www/cgi-bin/banner.pyvà làm cho nó thực thi:

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

Điều này cho thấy một biểu ngữ được tạo ra.

Bạn có thể cần phải xóa bộ đệm trung tâm phần mềm. Bạn có thể làm điều đó bằng cách sử dụng rm -rf ~/.cache/software-center.

Rõ ràng bạn cần phải đặt một cái gì đó /tmp/test.htmlcho banner đầu tiên hoạt động.

Bạn cũng cần một máy chủ web chạy ở 8800 cgi-binđể làm việc này. Nếu bạn không có cái này, hãy chạy cái này trong 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()"

Bạn cần tạo kiểu iframeđể làm cho nó lấp đầy không gian, nhưng bạn đã tìm ra điều đó.


Cảm ơn! Tôi không thể sử dụng lại công cụ quay banner tiêu chuẩn? Tôi đã thử khai báo nhiều lớp và nó hoạt động khá tốt. Tôi đang gặp một số vấn đề về kiểu dáng với iframe, nhưng tôi có thể sắp xếp nó ra. Bây giờ tôi muốn thu thập các triển lãm biểu ngữ từ một máy chủ web, vì vậy tôi có lẽ nên sử dụng JSON. Xin lưu ý rằng tiền thưởng bao gồm điều này, thu thập các biểu ngữ từ máy chủ của riêng tôi. Nếu bạn bao gồm thông tin này, tôi sẽ có thể trao cho bạn tiền thưởng :)
Jorge Suárez de Lis

@ JorgeSuárezdeLis: xong
Janus Troelsen

Ok, điều này không hiệu quả. Trên ứng dụng tôi thấy một lỗi như thế này: Unable to load page - Problem occurred while loading the URL http:localhost:8800cgi-binbanner.py(tương tự cho phiên bản cục bộ trên /tmp). Phiên bản cũ đã hoạt động, nhưng bây giờ nó dường như tước các dấu gạch chéo ở đâu đó. Các triển lãm được thu thập OK và tôi có thể in nội dung HTML vào bảng điều khiển và dấu gạch chéo ở đó, nhưng trên ứng dụng chúng bị thiếu! Điều gì có thể xảy ra?
Jorge Suárez de Lis

Chà, bạn có chắc là URL có thể truy cập không? Hãy thử tải nó bằng curlbàn điều khiển. Tôi nghĩ rằng nó chỉ tước các dấu gạch chéo trong thông báo lỗi.
Janus Troelsen

Tôi không nghĩ vậy. Tôi đã chụp ảnh màn hình . Hai kiến ​​nghị đầu tiên là từ Firefox. Chỉ có danh sách biểu ngữ dường như được thu thập từ trung tâm phần mềm.
Jorge Suárez de Lis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.