#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2008 Pâris Quentin # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import wx import os, sys, codecs, string, socket, urllib, urllib2 import wx.html, threading, time, wx.animate import lib.Variables as Variables, sp import lib.lng class getDescription(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.getDescription = "" self.getDescription_bis = "" self.htmlContent = "" self.htmlwait = "###WAIT###" self.stars = 0 self.cat = 0 self.start() self.miniature = Variables.playonlinux_env+"/resources/images/pol_min.png" self.miniature_defaut = Variables.playonlinux_env+"/resources/images/pol_min.png" def download(self, game): self.getDescription = game def run(self): self.thread_running = True while(self.thread_running): if(self.getDescription == ""): time.sleep(0.1) else: self.htmlContent = self.htmlwait; time.sleep(0.5) self.getDescription_bis = self.getDescription if(self.getDescription == "about:conceptor"): self.miniature = self.miniature_defaut self.htmlContent = "Well done !" self.stars = "5" else: self.cut = string.split(self.getDescription,":") if(self.cut[0] == "get"): self.miniature = self.miniature_defaut # Description self.htmlContent = "WARNING !
You are going to execute a non-validated script.
This functionality has been added to make script testing easier.
It can be dangerous for your computer.
PlayOnLinux will NOT be reponsible for any damages.
" self.stars = "0" else: # Miniatures try : url = os.environ["SITE"]+'/V2_data/miniatures/'+self.getDescription.replace(" ","%20") req = urllib2.Request(url) handle = urllib2.urlopen(req) open(Variables.playonlinux_rep+"/tmp/min","w").write(handle.read()) self.miniature = Variables.playonlinux_rep+"/tmp/min" except : self.miniature = self.miniature_defaut # Description try : url = os.environ["SITE"]+'/V4_data/repository/get_description.php?id='+self.getDescription.replace(" ","%20") req = urllib2.Request(url) handle = urllib2.urlopen(req) self.htmlContent = handle.read() except : self.htmlContent = ""+_("No description")+"" if(self.cat == 12): self.htmlContent += "

WARNING !
You are going to execute a beta script.
This functionality has been added to make script testing easier.
It might not work as expected.
" # Stars try : url = os.environ["SITE"]+'/V4_data/repository/stars.php?n='+self.getDescription.replace(" ","%20") req = urllib2.Request(url) handle = urllib2.urlopen(req) self.stars = handle.read() except : self.stars = "0" if(self.getDescription == self.getDescription_bis): self.getDescription = "" class InstallWindow(wx.Frame): def __init__(self,parent,id,title): wx.Frame.__init__(self, parent, -1, title, size = (792, 580+Variables.windows_add_size), style = wx.CLOSE_BOX | wx.CAPTION | wx.MINIMIZE_BOX) self.description = getDescription() self.panelFenp = wx.Panel(self, -1) self.live = 0 self.SetIcon(wx.Icon(Variables.playonlinux_env+"/etc/playonlinux.png", wx.BITMAP_TYPE_ANY)) self.images_cat = wx.ImageList(22, 22) self.imagesapps = wx.ImageList(22, 22) self.list_cat = wx.TreeCtrl(self.panelFenp, 105, style=wx.TR_HIDE_ROOT|wx.TR_FULL_ROW_HIGHLIGHT|Variables.widget_borders, size=(200, 363), pos=(10,10)) if(os.environ["POL_OS"] == "Mac"): self.image_position = (8,381) self.new_size = (558,218) if(os.environ["POL_OS"] == "Linux"): self.image_position = (10,383) self.new_size = (562,222) self.image = wx.StaticBitmap(self.panelFenp, -1, wx.Bitmap(Variables.playonlinux_env+"/resources/images/pol_min.png"), self.image_position, wx.DefaultSize) self.list_cat.SetSpacing(0); self.list_cat.SetImageList(self.images_cat) self.AddCats() self.searchbox = wx.TextCtrl(self.panelFenp, 110, size=(364,20), pos=(319,9)) self.searchcaption = wx.StaticText(self.panelFenp, -1, _("Search: "), (220,12), wx.DefaultSize) self.lasthtml_content = "" self.list_apps = wx.TreeCtrl(self.panelFenp, 106, style=wx.TR_HIDE_ROOT|wx.TR_FULL_ROW_HIGHLIGHT|Variables.widget_borders, size=(562, 266), pos=(220,35)) self.list_apps.SetImageList(self.imagesapps) self.list_apps.SetSpacing(0); self.stars = 0 #self.content = wx.TextCtrl(self.panelFenp, 107, pos=(220,301), size=(562,212), style = wx.TE_MULTILINE | wx.TE_RICH2 | wx.CB_READONLY | Variables.widget_borders) self.content = wx.html.HtmlWindow(self.panelFenp, 107, style=Variables.widget_borders, pos=(220,311), size=(562,222)) self.button = wx.Button(self.panelFenp, wx.ID_CLOSE, _("Cancel"), pos=(576, 540), size=(100,35)) self.install_button = wx.Button(self.panelFenp, wx.ID_APPLY, _("Install"), pos=(683, 540), size=(100,35)) self.update_button = wx.Button(self.panelFenp, wx.ID_REFRESH, _("Refresh"), pos=(470, 540), size=(100,35)) self.install_button.Enable(False) self.new_panel = wx.Panel(self.panelFenp, -1, pos=(220,311), style=Variables.widget_borders, size=self.new_size) self.new_panel.SetBackgroundColour((255,255,255)) self.animation = wx.animate.GIFAnimationCtrl(self.new_panel, -1, Variables.playonlinux_env+"/etc/24-0.gif", (271,96)) self.new_panel.Hide() self.timer = wx.Timer(self, 1) self.Bind(wx.EVT_TIMER, self.TimerAction, self.timer) self.timer.Start(200) #self.ManualInstall = wx.CheckBox(self.panelFenp, 111, label=_("Install a .pol package or an unsupported application"), pos=(10,530)) self.ManualInstall = wx.HyperlinkCtrl(self.panelFenp, 111, _("Install a non-listed program"), "", pos=(10,545)) self.ManualInstall.SetNormalColour(wx.Colour(0,0,0)) # self.AddApps() wx.EVT_TREE_SEL_CHANGED(self, 105, self.AddApps) wx.EVT_TREE_SEL_CHANGED(self, 106, self.AppsDetails) wx.EVT_BUTTON(self, wx.ID_CLOSE, self.closeapp) wx.EVT_BUTTON(self, wx.ID_APPLY, self.installapp) wx.EVT_BUTTON(self, wx.ID_REFRESH, self.UpdatePol) wx.EVT_CLOSE(self, self.closeapp) wx.EVT_TREE_ITEM_ACTIVATED(self, 106, self.installapp) wx.EVT_TEXT(self, 110, self.search) wx.EVT_HYPERLINK(self, 111, self.manual) #wx.EVT_CHECKBOX(self, 111, self.manual) #Timer, regarde toute les secondes si il faut actualiser la liste def TimerAction(self, event): if(self.lasthtml_content != self.description.htmlContent): self.SetImg(self.description.miniature) self.description.miniature = self.description.miniature_defaut self.lasthtml_content = self.description.htmlContent; if(self.description.htmlContent == "###WAIT###"): self.content.Hide() self.animation.Show() self.animation.Play() self.new_panel.Show() self.Refresh() else: self.animation.Hide() self.animation.Stop() self.new_panel.Hide() self.content.Show() self.Refresh() self.content.SetPage(self.description.htmlContent) if(self.stars != self.description.stars): self.show_stars(self.description.stars) self.stars = self.description.stars if(self.list_cat.GetItemImage(self.list_cat.GetSelection()) != self.description.cat): self.description.cat = self.list_cat.GetItemImage(self.list_cat.GetSelection()) def closeapp(self, event): self.description.thread_running = False self.Destroy() def manual(self, event): self.live = 1 self.installapp(self) def show_stars(self, stars): self.stars = int(stars) try : self.star1.Destroy() except : pass try : self.star2.Destroy() except : pass try : self.star3.Destroy() except : pass try : self.star4.Destroy() except : pass try : self.star5.Destroy() except : pass self.stars = int(self.stars) if(self.stars == 5): self.star5 = wx.StaticBitmap(self.panelFenp, -1, wx.Bitmap(Variables.playonlinux_env+"/etc/star.png"), (762,12), wx.DefaultSize) if(self.stars >= 4): self.star4 = wx.StaticBitmap(self.panelFenp, -1, wx.Bitmap(Variables.playonlinux_env+"/etc/star.png"), (744,12), wx.DefaultSize) if(self.stars >= 3): self.star3 = wx.StaticBitmap(self.panelFenp, -1, wx.Bitmap(Variables.playonlinux_env+"/etc/star.png"), (726,12), wx.DefaultSize) if(self.stars >= 2): self.star2 = wx.StaticBitmap(self.panelFenp, -1, wx.Bitmap(Variables.playonlinux_env+"/etc/star.png"), (708,12), wx.DefaultSize) if(self.stars >= 1): self.star1 = wx.StaticBitmap(self.panelFenp, -1, wx.Bitmap(Variables.playonlinux_env+"/etc/star.png"), (690,12), wx.DefaultSize) def UpdatePol(self, event): self.DelApps() self.Parent.updater.check() def installapp(self, event): if(self.live == 1): InstallApplication = "ExecLiveInstall" else: InstallApplication = self.list_apps.GetItemText(self.list_apps.GetSelection()) if(InstallApplication == "about:conceptor"): self.EasterEgg = sp.egg(None, -1, "PlayOnLinux Conceptor") self.EasterEgg.Show() self.EasterEgg.Center(wx.BOTH) else: os.system("bash \""+Variables.playonlinux_env+"/bash/install\" \""+InstallApplication+"\"&") self.Destroy() return def search(self, event): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/search",'r',"utf-8") self.apps = self.apps.readlines() self.j = 0; while(self.j < len(self.apps)): self.apps[self.j] = self.apps[self.j].replace("\n","") self.j += 1 self.j = 0; self.k = 0; self.user_search =self.searchbox.GetValue() self.search_result = [] while(self.j < len(self.apps)): if(string.lower(self.user_search) in string.lower(self.apps[self.j])): self.search_result.append(self.apps[self.j]) self.k = self.k + 1; self.j = self.j + 1; if(self.user_search == "about:conceptor"): self.search_result.append("about:conceptor") self.user_search_cut = string.split(self.user_search,":") if(len(self.user_search_cut) > 1): if(self.user_search_cut[0] == "get" and self.user_search_cut[1].isdigit()): self.search_result.append(self.user_search) if(self.user_search != ""): self.WriteApps(self.search_result) else: self.DelApps() def EraseDetails(self): self.content.SetValue(""); def AppsDetails(self, event): self.install_button.Enable(True) self.application = self.list_apps.GetItemText(self.list_apps.GetSelection()) self.description.download(self.application) def AddCats(self): self.cats = [_("Accessories"),_("Development"),_("Education"),_("Games"),_("Graphics"),_("Internet"),_("Multimedia"),_("Office"),_("Other")] self.images_cat.RemoveAll() self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/applications-accessories.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/applications-development.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/edu.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/applications-games.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/applications-graphics.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/applications-internet.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/applications-multimedia.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/applications-office.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/applications-other.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/emblem-favorite.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/face-smile.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/view-refresh.png")) self.images_cat.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/applications-testing.png")) self.list_cat.DeleteAllItems() self.root = self.list_cat.AddRoot("") self.i = 0 for cat in self.cats: self.list_cat.AppendItem(self.root, cat, self.i) self.i = self.i+1 self.list_cat.AppendItem(self.root, "",-1) self.list_cat.AppendItem(self.root, _("Highest rated"), self.i) self.list_cat.AppendItem(self.root, _("Most downloaded"), self.i+1) self.list_cat.AppendItem(self.root, _("Patches"), self.i+2) self.list_cat.AppendItem(self.root, _("Testing"), self.i+3) def WriteApps(self, array): self.imagesapps.RemoveAll() self.DelApps() self.root_apps = self.list_apps.AddRoot("") self.i = 0 array.sort() for app in array: self.icon_look_for = Variables.playonlinux_rep+"/configurations/icones/"+app if(os.path.exists(self.icon_look_for)): try: self.imagesapps.Add(wx.Bitmap(self.icon_look_for)) except: pass else: self.imagesapps.Add(wx.Bitmap(Variables.playonlinux_env+"/etc/playonlinux22.png")) self.list_apps.AppendItem(self.root_apps, app, self.i) self.i = self.i+1 def DelApps(self): self.list_apps.DeleteAllItems() def SetImg(self, image): self.image.Destroy() self.image = wx.StaticBitmap(self.panelFenp, -1, wx.Bitmap(image), self.image_position, wx.DefaultSize) self.Refresh() def ResetImg(self): self.SetImg(Variables.playonlinux_env+"/resources/images/pol_min.png") def AddApps(self, event): self.searchbox.SetValue("") #self.cat_selected=self.list_cat.GetItemText(self.list_cat.GetSelection()).encode('utf-8') self.cat_selected = self.list_cat.GetItemImage(self.list_cat.GetSelection()) #print self.cat_selected if(self.cat_selected == 8): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/0",'r',"utf-8") if(self.cat_selected == 3): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/1",'r',"utf-8") if(self.cat_selected == 0): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/2",'r',"utf-8") if(self.cat_selected == 7): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/3",'r',"utf-8") if(self.cat_selected == 5): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/4",'r',"utf-8") if(self.cat_selected == 6): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/5",'r',"utf-8") if(self.cat_selected == 4): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/6",'r',"utf-8") if(self.cat_selected == 1): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/7",'r',"utf-8") if(self.cat_selected == 2): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/8",'r',"utf-8") if(self.cat_selected == 11): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/9",'r',"utf-8") if(self.cat_selected == 12): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/10",'r',"utf-8") if(self.cat_selected == 10): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/download",'r',"utf-8") if(self.cat_selected == 9): self.apps = codecs.open(Variables.playonlinux_rep+"/configurations/listes/rate",'r',"utf-8") self.apps = self.apps.readlines() self.j = 0 while(self.j < len(self.apps)): self.apps[self.j] = self.apps[self.j].replace("\n","") self.j += 1 self.WriteApps(self.apps)