उबंटू सॉफ्टवेयर सेंटर पर व्यक्तिगत बैनर प्रदर्शन दिखाएं


11

मैं अपने निजीकृत बैनर को Ubuntu Software Center पर कैसे प्रदर्शित कर सकता हूं?

मैं इस पर कुछ यूआरएल परिभाषाओं को देखा है /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)। बदलें Falseकरने के लिए True

अब /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काम करने के लिए पहले बैनर के लिए कुछ करने की जरूरत है ।

cgi-binयह काम करने के लिए आपको 8800 पर चलने वाले वेबसर्वर की भी आवश्यकता है । यदि आपके पास यह नहीं है, तो इसे 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 का उपयोग करना चाहिए। कृपया ध्यान दें कि बाउंटी में यह शामिल है, मेरे अपने सर्वर से बैनर इकट्ठा करना। यदि आप इस जानकारी को शामिल करते हैं, तो मैं आपको इनाम देने में सक्षम हो जाऊंगा :)
जॉर्ज सुआरेज़ डे लिस

@ जोर्जसुआरज़डेइस: किया
जानूस ट्रॉल्सन

ठीक है, यह काम नहीं कर रहा है। एप्लिकेशन पर मुझे इस तरह एक त्रुटि दिखाई देती है: Unable to load page - Problem occurred while loading the URL http:localhost:8800cgi-binbanner.py(स्थानीय संस्करण के लिए समान /tmp)। पुराने संस्करण ने काम किया, लेकिन अब यह यूआरएल के स्लैश को कहीं दूर ले जाता है। प्रदर्शन ठीक एकत्र किए गए हैं, और मैं HTML सामग्री को कंसोल में प्रिंट कर सकता हूं और स्लैश वहां हैं, लेकिन एप्लिकेशन पर वे गायब हैं! क्या हो सकता है?
जॉर्ज सुआरेज़ डे लिस

क्या आप सुनिश्चित हैं कि URL सुलभ है? curlकंसोल में इसका उपयोग करके लोड करने का प्रयास करें । मुझे लगता है कि यह त्रुटि संदेश में केवल स्लैश को स्ट्रिप करता है।
Janus Troelsen

मुझे ऐसा नहीं लगता। मैंने एक स्क्रीनशॉट लिया है । दो पहली याचिकाएँ फ़ायरफ़ॉक्स की हैं। सॉफ़्टवेयर केंद्र से केवल बैनर सूची एकत्र की जाती है।
जॉर्ज सुआरेज़ डे लिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.