def run(self): logging.debug(">>") selectedFiles = fileChooserDialog(title="Choose a Garmin Training Center file to import").getFiles() guiFlush() importfiles = [] if not selectedFiles: return importfiles for filename in selectedFiles: #could be multiple files selected - currently only single selection enabled if self.valid_input_file(filename): for (sport, tracks) in self.getTracks(filename): logging.debug("Found %d tracks for %s sport in %s" % (len(tracks), sport, filename)) count = 0 for track in tracks: #can be multiple tracks if self.shouldImport(track): count += 1 gpxfile = "%s/garminhrfile%d.gpx" % (self.tmpdir, len(importfiles)) self.createGPXfile(gpxfile, track) if self.sport: #Option to overide sport is set importfiles.append((gpxfile, self.sport)) else: #Use sport from file importfiles.append((gpxfile, sport)) logging.debug("Importing %d of %d tracks for sport %s" % (count, len(tracks), sport) ) else: logging.info("File %s failed validation" % (filename)) logging.debug("<<") return importfiles
def on_selectfile_clicked(self,widget): logging.debug(">>") from pytrainer.gui.dialogs import fileChooserDialog selectedFile = fileChooserDialog(title="Choose a Google Earth file (.kml) to import", multiple=False).getFiles() if selectedFile is not None: self.rcd_gpxfile.set_text(selectedFile[0]) logging.debug("<<")
def run(self): logging.debug(">>") # able to select multiple files.... selectedFiles = fileChooserDialog(title="Choose a garmintools dump file (or files) to import", multiple=True).getFiles() guiFlush() importfiles = [] if not selectedFiles: #Nothing selected return importfiles for filename in selectedFiles: if self.valid_input_file(filename): #Garmin dump files are not valid xml - need to load into a xmltree #read file into string with open(filename, 'r') as f: xmlString = f.read() fileString = BytesIO(b"<root>" + xmlString + b"</root>") #parse string as xml tree = etree.parse(fileString) if not self.inDatabase(tree): sport = self.getSport(tree) gpxfile = "%s/garmintools-%d.gpx" % (self.tmpdir, len(importfiles)) self.createGPXfile(gpxfile, tree) importfiles.append((gpxfile, sport)) else: logging.debug("%s already in database. Skipping import." % (filename,) ) else: logging.info("File %s failed validation" % (filename)) logging.debug("<<") return importfiles
def run(self): logging.debug(">>") # able to select multiple files.... selectedFiles = fileChooserDialog(title="Choose a TCX file (or files) to import", multiple=True).getFiles() guiFlush() importfiles = [] if not selectedFiles: #Nothing selected return importfiles for filename in selectedFiles: #Multiple files if self.valid_input_file(filename): #TODO could consolidate tree generation here tree = etree.ElementTree(file=filename) #Possibly multiple entries in file activities = self.getActivities(tree) for activity in activities: if not self.inDatabase(activity): sport = self.getSport(activity) gpxfile = "%s/garmin-tcxv2-%d.gpx" % (self.tmpdir, len(importfiles)) self.createGPXfile(gpxfile, activity) importfiles.append((gpxfile, sport)) else: logging.debug("File:%s activity %d already in database. Skipping import." % (filename, activities.index(activity)) ) else: logging.info("File %s failed validation" % (filename)) logging.debug("<<") return importfiles
def run(self): logging.debug(">>") selectedFiles = fileChooserDialog(title="Choose a GPX file (or files) to import", multiple=True).getFiles() guiFlush() importfiles = [] if not selectedFiles: return importfiles for filename in selectedFiles: if self.valid_input_file(filename): if not self.inDatabase(filename): sport = self.getSport(filename) gpxfile = "%s/garmin-gpx-%d.gpx" % (self.tmpdir, len(importfiles)) shutil.copy(filename, gpxfile) importfiles.append((gpxfile, sport)) else: logging.debug("%s already in database. Skipping import." % (filename) ) else: logging.info("File %s failed validation" % (filename)) logging.debug("<<") return importfiles
def run(self): logging.debug(">>") selectedFiles = fileChooserDialog(title="Choose a Google Earth file (.kml) to import", multiple=True).getFiles() guiFlush() importfiles = [] if not selectedFiles: return importfiles for filename in selectedFiles: if self.valid_input_file(filename): if not self.inDatabase(filename): sport = self.getSport(filename) #TODO Fix sport determination gpxfile = "%s/googleearth-%d.gpx" % (self.tmpdir, len(importfiles)) outgps = commands.getstatusoutput("gpsbabel -t -i kml -f %s -o gpx -F %s" % (filename, gpxfile) ) #self.createGPXfile(gpxfile, filename) #TODO Fix processing so not dependant on the broken gpsbabel importfiles.append((gpxfile, sport)) else: logging.debug("%s already in database. Skipping import." % (filename) ) else: logging.info("File %s failed validation" % (filename)) logging.debug("<<") return importfiles
def on_buttonSelectFiles_clicked(self, widget): logging.debug('>>') selectedFiles = fileChooserDialog(title=_("Choose a file (or files) to import activities from"), multiple=True).getFiles() while gtk.events_pending(): # This allows the GUI to update gtk.main_iteration() # before completion of this entire action if selectedFiles is None or len(selectedFiles) == 0: #Nothing selected logging.debug("No files selected") logging.debug('<<') return logging.debug("%s files selected" % len(selectedFiles)) for filename in selectedFiles: #Multiple files class_index = len(self.processClasses) #Validate file self.processClasses.append(self.validateFile(filename)) if self.processClasses[class_index] is not None: filetype = self.processClasses[class_index].getFileType() self.updateStatusbar(self.statusbarImportFile, _("Found file of type: %s") % filetype ) logging.debug(_("Found file of type: %s") % filetype) activitiesSummary = self.processClasses[class_index].getActivitiesSummary() activity_count = len(activitiesSummary) logging.debug("%s activities in file: %s" % (str(activity_count), filename) ) #Add file to files treeview iter = self.files_store.append() self.files_store.set( iter, 0, class_index, 1, True, 2, filename, 3, self.processClasses[class_index].getFileType(), 4, activity_count ) #File valid, so enable remove button self.buttonRemoveSelectedFiles.set_sensitive(1) #Get activities in file for activity in activitiesSummary: #Add activity details to TreeView store to display if not activity[1]: #Activity selected, so enable import button self.buttonFileImport.set_sensitive(1) note = "" else: note = _("Found in database") activity_iter = self.activities_store.append() self.activities_store.set( activity_iter, 0, activity[0], 1, not activity[1], 2, activity[2], 3, activity[3], 4, activity[4], 5, activity[5], 6, note, 7, class_index, ) else: #Selected file not understood by any of the process files #Display error logging.debug(_("File %s is of unknown or unsupported file type" % filename)) msg = _("File %s is of unknown or unsupported file type" % filename) md = gtk.MessageDialog(self.win_importdata, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE, msg) md.set_title("Error") md.run() md.destroy() logging.debug('<<')
def on_buttonSelectFiles_clicked(self, widget): logging.debug('>>') selectedFiles = fileChooserDialog( title=_("Choose a file (or files) to import activities from"), multiple=True).getFiles() while gtk.events_pending(): # This allows the GUI to update gtk.main_iteration() # before completion of this entire action if selectedFiles is None or len(selectedFiles) == 0: #Nothing selected logging.debug("No files selected") logging.debug('<<') return logging.debug("%s files selected" % len(selectedFiles)) for filename in selectedFiles: #Multiple files class_index = len(self.processClasses) #Validate file self.processClasses.append(self.validateFile(filename)) if self.processClasses[class_index] is not None: filetype = self.processClasses[class_index].getFileType() self.updateStatusbar(self.statusbarImportFile, _("Found file of type: %s") % filetype) logging.debug("Found file of type: %s" % filetype) activitiesSummary = self.processClasses[ class_index].getActivitiesSummary() activity_count = len(activitiesSummary) logging.debug("%s activities in file: %s" % (str(activity_count), filename)) #Add file to files treeview iter = self.files_store.append() self.files_store.set( iter, 0, class_index, 1, True, 2, filename, 3, self.processClasses[class_index].getFileType(), 4, activity_count) #File valid, so enable remove button self.buttonRemoveSelectedFiles.set_sensitive(1) #Get activities in file for activity in activitiesSummary: #Add activity details to TreeView store to display if not activity[1]: #Activity selected, so enable import button self.buttonFileImport.set_sensitive(1) note = "" else: note = _("Found in database") activity_iter = self.activities_store.append() # Status (#1) can be changed by user (via checkbox), we need another field to know if activity is in DB self.activities_store.set( activity_iter, 0, activity[0], 1, not activity[1], 2, activity[2], 3, activity[3], 4, activity[4], 5, activity[5], 6, note, 7, class_index, 8, activity[1], ) else: #Selected file not understood by any of the process files #Display error logging.debug( "File %s is of unknown or unsupported file type" % filename) msg = _("File %s is of unknown or unsupported file type" ) % filename md = gtk.MessageDialog(self.win_importdata, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE, msg) md.set_title("Error") md.run() md.destroy() self.updateStatusbar(self.statusbarImportFile, "") logging.debug('<<')