Exemplo n.º 1
0
	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
Exemplo n.º 2
0
 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("<<")
Exemplo n.º 3
0
	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
Exemplo n.º 4
0
	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
Exemplo n.º 5
0
	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
Exemplo n.º 6
0
	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
Exemplo n.º 7
0
 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('<<')
Exemplo n.º 8
0
 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('<<')