00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 from ost import gui
00021 from ost import info
00022 import ost
00023 import sip
00024
00025 from PyQt4 import QtCore, QtGui, QtNetwork
00026 from ost.gui import FileLoader
00027
00028
00029 class BaseRemoteLoader(gui.RemoteSiteLoader):
00030 def __init__(self):
00031 gui.RemoteSiteLoader.__init__(self)
00032 self.networkmanager_=QtNetwork.QNetworkAccessManager()
00033 self.downloads_=dict()
00034 QtCore.QObject.connect(self.networkmanager_, QtCore.SIGNAL("finished(QNetworkReply*)"), self.DownloadFinished)
00035
00036 def LoadById(self, id, selection=""):
00037 self.ById(id, selection)
00038
00039 def ById(self, id, selection=""):
00040 file_name=self.GetFileName(id)
00041 file = QtCore.QFile(file_name)
00042 if(file.size()==0):
00043 url = QtCore.QUrl(self.GetUrl(id))
00044 request = QtNetwork.QNetworkRequest(url)
00045 reply = self.networkmanager_.get(request)
00046 self.downloads_[reply]=[id,selection]
00047 return reply
00048 else:
00049 gui.FileLoader.LoadObject(str(file_name),str(selection))
00050 return None
00051
00052 def IsImg(self):
00053 return False
00054
00055 def IsDefault(self):
00056 return False
00057
00058 def GetRemoteSiteName(self):
00059 pass
00060
00061 def GetUrl(self,id):
00062 pass
00063
00064 def HandleError(self,message):
00065 pass
00066
00067 def DownloadFinished(self, reply):
00068 file_name=self.GetFileName(self.downloads_[reply][0])
00069 file = QtCore.QFile(file_name)
00070 if(reply.error()!=QtNetwork.QNetworkReply.NoError or reply.bytesAvailable()==0):
00071 self.HandleError(reply.errorString());
00072 file.remove()
00073 else:
00074 if(self.downloads_.has_key(reply)):
00075 if(file.open(QtCore.QIODevice.WriteOnly)):
00076 file.write(reply.readAll());
00077 file.close();
00078 selection=self.downloads_[reply][1]
00079 del(self.downloads_[reply])
00080 gui.FileLoader.LoadObject(str(file_name),str(selection))
00081
00082 class GenericLoader(BaseRemoteLoader):
00083 EXT_NAME_ATTRIBUTE_NAME = "ExtName"
00084 URL_ATTRIBUTE_NAME = "Url"
00085 UP_CASE_ATTRIBUTE_NAME = "UpCase"
00086 FILE_TYPE_ATTRIBUTE_NAME = "FileType"
00087 TMP_URL_ATTRIBUTE_NAME= "TmpUrl"
00088 IMG_ATTRIBUTE_NAME= "Img"
00089 DEFAULT_ATTRIBUTE_NAME= "Default"
00090 def __init__(self, name, url, up_case, file_type, tmp_url=None, img=False, default=False):
00091 BaseRemoteLoader.__init__(self)
00092 self.name_ = QtCore.QString(name)
00093 self.url_ = QtCore.QString(url)
00094 self.up_case_ = up_case
00095 self.img_ = img
00096 self.default_ = default
00097 if file_type is not None:
00098 self.file_type_ = QtCore.QString(file_type)
00099 else:
00100 self.file_type_ = None
00101
00102 if tmp_url is not None:
00103 self.tmp_url_ = QtCore.QString(tmp_url)
00104 else:
00105 self.tmp_url_ = tmp_url
00106
00107 def IsImg(self):
00108 return self.img_
00109
00110 def IsDefault(self):
00111 return self.default_
00112
00113 def GetRemoteSiteName(self):
00114 return self.name_
00115
00116 def GetUrl(self, id):
00117 formatted_id = id
00118 if self.up_case_:
00119 formatted_id = QtCore.QString(id).toUpper()
00120 url = QtCore.QString(self.url_)
00121 url.replace("${ID}",formatted_id)
00122 return str(url)
00123
00124 def GetFileName(self,id):
00125 formatted_id = id
00126 if self.up_case_:
00127 formatted_id = QtCore.QString(id).toUpper()
00128
00129 url = None
00130 if self.tmp_url_ is not None:
00131 url = self.tmp_url_ + QtCore.QDir.separator()
00132 else:
00133 url = QtCore.QDir.tempPath() + QtCore.QDir.separator()
00134
00135 file_type = None
00136 if self.file_type_ is None:
00137 remote_url = QtCore.QString(self.GetUrl(id))
00138 index = remote_url.lastIndexOf(".")
00139 if(index >=0):
00140 file_type = remote_url.right(remote_url.size()-index-1)
00141 if file_type is None:
00142 file_type = self.file_type_
00143
00144 return url+formatted_id +"_"+self.name_+"."+file_type
00145
00146 def HandleError(self, message):
00147 messageBox =QtGui.QMessageBox(QtGui.QMessageBox.Warning,
00148 "Error while Loading file from "+self.name_, "Could not download file ("+message+")!")
00149 messageBox.exec_()
00150
00151 def ToInfo(self,group):
00152 group.SetAttribute(GenericLoader.EXT_NAME_ATTRIBUTE_NAME, str(self.name_))
00153 group.SetAttribute(GenericLoader.URL_ATTRIBUTE_NAME, str(self.url_))
00154 if self.up_case_:
00155 group.SetAttribute(GenericLoader.UP_CASE_ATTRIBUTE_NAME, str(self.up_case_))
00156 if self.file_type_ is not None:
00157 group.SetAttribute(GenericLoader.FILE_TYPE_ATTRIBUTE_NAME, str(self.file_type_))
00158 if self.tmp_url_ is not None:
00159 group.SetAttribute(GenericLoader.TMP_URL_ATTRIBUTE_NAME, str(self.tmp_url_))
00160 if self.img_ is not None:
00161 group.SetAttribute(GenericLoader.IMG_ATTRIBUTE_NAME, str(int(self.img_)))
00162 if self.default_ is not None:
00163 group.SetAttribute(GenericLoader.DEFAULT_ATTRIBUTE_NAME, str(int(self.default_)))
00164
00165 @staticmethod
00166 def FromInfo(group):
00167 name = None
00168 url = None
00169 up_case = False
00170 file_type = None
00171 tmp_url = None
00172 img = False
00173 default = False
00174
00175 if group.HasAttribute(GenericLoader.EXT_NAME_ATTRIBUTE_NAME):
00176 name = QtCore.QString(group.GetAttribute(GenericLoader.EXT_NAME_ATTRIBUTE_NAME))
00177
00178 if group.HasAttribute(GenericLoader.URL_ATTRIBUTE_NAME):
00179 url = QtCore.QString(group.GetAttribute(GenericLoader.URL_ATTRIBUTE_NAME))
00180
00181 if group.HasAttribute(GenericLoader.UP_CASE_ATTRIBUTE_NAME):
00182 up_case = bool(group.GetAttribute(GenericLoader.UP_CASE_ATTRIBUTE_NAME))
00183
00184 if group.HasAttribute(GenericLoader.FILE_TYPE_ATTRIBUTE_NAME):
00185 file_type = QtCore.QString(group.GetAttribute(GenericLoader.FILE_TYPE_ATTRIBUTE_NAME))
00186
00187 if group.HasAttribute(GenericLoader.TMP_URL_ATTRIBUTE_NAME):
00188 tmp_url = QtCore.QString(group.GetAttribute(GenericLoader.TMP_URL_ATTRIBUTE_NAME))
00189
00190 if group.HasAttribute(GenericLoader.IMG_ATTRIBUTE_NAME):
00191 img = bool(int(group.GetAttribute(GenericLoader.IMG_ATTRIBUTE_NAME)))
00192
00193 if group.HasAttribute(GenericLoader.DEFAULT_ATTRIBUTE_NAME):
00194 default = bool(int(group.GetAttribute(GenericLoader.DEFAULT_ATTRIBUTE_NAME)))
00195
00196 return GenericLoader(name, url, up_case, file_type, tmp_url, img, default)