2
# -*- coding: utf-8 -*-
5
# Author: Laudeci Oliveira <laudeci@gmail.com>
6
# Rafael Proença <cypherbios@ubuntu.com>
8
# This program is free software; you can redistribute it and/or
9
# modify it under the terms of the GNU General Public License as
10
# published by the Free Software Foundation; either version 2 of the
11
# License, or (at your option) any later version.
13
# This program is distributed in the hope that it will be useful,
14
# but WITHOUT ANY WARRANTY; without even the implied warranty of
15
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
# GNU General Public License for more details.
18
# You should have received a copy of the GNU General Public License
19
# along with this program; if not, write to the Free Software
20
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
23
from messageBox import MessageBox
42
def __init__(self, gladeFileName,mediaPath=""):
43
self.formName = "frmRestoreCD"
44
self.gladeFile = gtk.glade.XML(gladeFileName, self.formName)
45
self.cursorManager = utils.cursorManager()
46
self.mediaPath = mediaPath
47
self.checkOldVersions = False
50
"""This function will show the Create frmRestoreCD"""
51
#Get the dialog widget
52
self.frmRestoreCD = self.gladeFile.get_widget(self.formName)
53
self.frmRestoreCD.set_position(gtk.WIN_POS_CENTER)
54
self.frmRestoreCD.set_modal(True)
55
self.frmRestoreCD.set_sensitive(False)
57
# ---- dictionary ----
58
dic = { 'on_btnRestoreGo_clicked':self.on_btnRestoreGo_clicked }
59
self.gladeFile.signal_autoconnect(dic)
61
#Holds a Variable to use with progressWindos
64
self.cmdRestoreGo = self.gladeFile.get_widget("btnRestoreGo")
65
self.cmdCancel = self.gladeFile.get_widget("btnCancel")
66
self.ckbtnOldVersions = self.gladeFile.get_widget("ckbtnOldVersions")
67
self.ckbtnOldVersions.connect('toggled',self.on_ckbtnOldVersions_toggled)
69
self.ckbtnAutoSelectDepends = self.gladeFile.get_widget('ckbtnAutoSelectDepends')
71
self.comboBox = self.gladeFile.get_widget('drivesComboBox')
73
ret = metaPackage.updatePackageCount(None,False)
74
self.updateCountView(ret)
76
self.createPackageViewList()
77
ret = metaPackage.updatePackageCount(self.packageList)
78
self.updateCountView(ret)
80
self.frmRestoreCD.set_sensitive(True)
81
result = self.frmRestoreCD.run()
83
#we are done with the dialog, destory it
84
self.frmRestoreCD.destroy()
89
def createDebFileList(self):
90
#fileNames = [nFile for nFile in os.listdir(self.mediaPath) if nFile.endswith(".deb")]
91
recursive = utils.RecursiveSearch
92
fileNames = [nFile for nFile in recursive(self.mediaPath, "*.deb")]
94
self.wProgress.TaskLenght(mLen)
95
for iIndex in range(mLen):
96
#if '.deb' in fileName:
97
self.wProgress.update(iIndex)
98
iList = metaPackage.createNewItem(fileNames[iIndex],False, self.mediaPath)
99
metaPackage.addNewListItem(self.packageList,iList)
100
self.wProgress.Task(msg.MESSAGE_0045)
101
metaPackage.uncheckMinorVersion(self.packageList)
102
ret = metaPackage.updatePackageCount(self.packageList)
103
self.updateCountView(ret)
104
if metaPackage.get_ErrorCount() > 0:
105
if metaPackage.get_ErrorCount() >1:
106
strMsg = msg.MESSAGE_0032 % metaPackage.get_ErrorCount()
108
strMsg = msg.MESSAGE_0033 % metaPackage.get_ErrorCount()
110
mReturn = MessageBox().ShowError(strMsg,self.frmRestoreCD)
113
def addListColumn(self, title, columnId, activatable = False):
114
"""This function adds a column to the list view.
115
First it create the gtk.TreeViewColumn and then set
116
some needed properties"""
118
cell = gtk.CellRendererToggle()
119
cell.set_property('activatable', activatable)
120
cell.connect('toggled',self.on_Column_toggled, self.packageList)
121
column = gtk.TreeViewColumn(title, cell)
122
column.add_attribute( cell, "active", 0)
124
cell = gtk.CellRendererText()
125
column = gtk.TreeViewColumn(title, cell, markup=config.LIST_CONTENTS)
127
column.set_resizable(True)
128
column.set_sort_column_id(columnId)
129
self.packageView.append_column(column)
133
def createPackageViewList(self):
134
#Get the listView from the widget Tree
135
self.packageView = self.gladeFile.get_widget("tvwPackages")
136
self.packageView.connect('row-activated',self.on_double_Click)
137
self.cursorManager.setBusy(self.frmRestoreCD,True)
138
self.packageView.set_sensitive(False)
140
self.wProgress = ProgressWindow.AptOnCDProgressDialog(self.frmRestoreCD)
141
self.wProgress.Title("APTonCD")
142
self.wProgress.TaskTitle(msg.MESSAGE_0034)
143
self.wProgress.Task(msg.MESSAGE_0002)
144
self.wProgress.Description(msg.MESSAGE_0035)
146
self.cursorManager.setBusy(self.wProgress,True)
147
self.wProgress.isCancelEnabled(False)
149
# filename, fullfilename with path, and a bool value
150
# indicating if it is a custom deb file
151
# stores deb information
153
#changed to add the last param.. to show deb description
154
self.packageList = gtk.ListStore(bool, str, bool, object, bool,bool)
156
self.addListColumn(' ', 0,True)
157
self.addListColumn('Package',1,False)
159
#this will create a tooltip object
160
self.toolTip = gtk.Tooltips()
161
self.toolTip.set_tip(self.packageView, "")
163
# this will turn searchable on
164
self.packageView.set_enable_search(True)
165
self.packageView.set_search_column(1)
166
self.packageView.set_search_equal_func(utils.TreeViewSearch, None)
168
# prepares list for drag and drop operations
169
self.packageView.enable_model_drag_dest([('text/plain', 0, 0), ('text/uri-list', 0, 1)],
170
gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_MOVE)
171
#packages events to show tooltips
172
self.packageView.connect("motion-notify-event", utils.packageTooltip, self.toolTip, 1)
174
# this will start the list sorted by name
175
self.packageList.set_sort_column_id(1, gtk.SORT_ASCENDING)
177
self.createDebFileList()
178
# this will create the main list and store it in the view
179
self.packageView.set_model(self.packageList)
181
self.wProgress.destroy()
183
self.packageView.connect("button_press_event", self.on_button_press_event)
184
self.packageView.set_sensitive(True)
185
self.cursorManager.setBusy(self.frmRestoreCD,False)
188
def updateCountView(self,value):
189
self.gladeFile.get_widget("lblPackageList").set_text(value[0])
190
self.gladeFile.get_widget("lblSelected").set_text(value[2])
193
def on_double_Click(self, treeview, path, view_column):
194
renderer = treeview.get_column(0).get_cell_renderers()[0]
195
renderer.emit('toggled',path[0])
197
def on_ckbtnOldVersions_toggled(self,widget):
198
self.checkOldVersions = self.ckbtnOldVersions.get_active()
201
def on_button_press_event(self, widget, event):
202
if event.button == 3 and event.type == gtk.gdk.BUTTON_PRESS:
203
c = utils.ContextMenu(self)
204
c.addMenuItem(msg.MESSAGE_0036, self.on_checkAll)
205
c.addMenuItem(msg.MESSAGE_0037, self.on_uncheckAll)
207
c.addMenuItem(msg.MESSAGE_0038, self.on_removePackage)
209
c.addMenuItem(msg.MESSAGE_0039, self.on_invertcheckAll)
210
c.popup(None, None, None, event.button, event.get_time())
213
def checkUncheck(self,iType,path = None, model = None):
214
self.cursorManager.setBusy(self.frmRestoreCD,True)
217
metaPackage.removePackage(self.packageView)
219
metaPackage.checkAll(self.packageList,self.checkOldVersions)
221
metaPackage.uncheckAll(self.packageList)
223
metaPackage.invertcheckAll(self.packageList,self.checkOldVersions)
225
metaPackage.Column_toggled(path,model,self.checkOldVersions)
226
# if user wants, aptoncd will check dependets packages
227
if self.ckbtnAutoSelectDepends.get_active():
228
if model[path][config.C_CHECKED]:
229
metaPackage.checkDepends(self.packageList,model[path][config.C_PKG].get_pkg_depends())
231
ret =metaPackage.updatePackageCount(self.packageList)
232
self.updateCountView(ret)
233
self.cursorManager.setBusy(self.frmRestoreCD,False)
235
def on_removePackage(self, *args):
239
def on_checkAll(self,*args):
243
def on_uncheckAll(self,*args):
247
def on_invertcheckAll(self,*args):
251
def on_Column_toggled(self, cell, path, model):
252
self.checkUncheck(4, path, model)
253
cell.set_active(False)
256
def addMediaAsSource(self,*args):
257
os.system("gksu --desktop /usr/share/applications/aptoncd.desktop 'synaptic --hide-main-window --ask-cdrom' &")
260
def on_btnRestoreGo_clicked(self,*args):
261
self.cmdRestoreGo.set_sensitive(False)
262
self.cmdCancel.set_sensitive(False)
264
aptcache = config.LOCAL_APT_FOLDER
265
if not utils.checkAccess(aptcache):
266
MessageBox().ShowError((msg.MESSAGE_0040))
269
self.wProgress = ProgressWindow.AptOnCDProgressDialog(self.frmRestoreCD)
270
self.wProgress.Title("APTonCD")
271
self.wProgress.TaskTitle(msg.MESSAGE_0041)
272
self.wProgress.Task(msg.MESSAGE_0002)
273
self.wProgress.Description(msg.MESSAGE_0014)
274
self.restoreAptOnCD()
276
self.wProgress.destroy()
278
self.cmdRestoreGo.set_sensitive(True)
279
self.cmdCancel.set_sensitive(True)
281
def restoreAptOnCD(self):
284
self.wProgress.show()
288
filesToCopy = [files for files in self.packageList if files[config.C_CHECKED]]
289
self.wProgress.TaskLenght(len(filesToCopy)-1)
291
for cds in filesToCopy:
293
self.wProgress.update(iIndex)
295
pkg = cds[config.C_PKG]
296
filedestination = os.path.join(config.LOCAL_APT_FOLDER , pkg.get_pkg_FileName())
298
if self.wProgress.cancel_status:
299
errorMsg = msg.MESSAGE_0016
302
pkg.copyTo(filedestination )
303
self.wProgress.Task(msg.MESSAGE_0044 + pkg.get_pkg_FileName())
306
if self.wProgress.cancel_status or len(errorMsg)>0:
307
self.wProgress.hide()
309
if len(errorMsg) > 0 :
310
strMsg = msg.MESSAGE_0042
311
mReturn = MessageBox().ShowInfo(strMsg,self.frmRestoreCD)
313
mReturn = MessageBox().ShowInfo((msg.MESSAGE_0043))