X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fsave%2FFileSaver.java;h=6be44eb80bc3eb6beb828f0270db15c75255954e;hb=4d5796d02a15808311c09448d79e6e7d1de9d636;hp=63810143800e92aca3eeb81944529c563ae76862;hpb=1ee49ae3c8ef3aa2e63eadd458531e5f8bd4f92c;p=GpsPrune.git diff --git a/tim/prune/save/FileSaver.java b/tim/prune/save/FileSaver.java index 6381014..6be44eb 100644 --- a/tim/prune/save/FileSaver.java +++ b/tim/prune/save/FileSaver.java @@ -40,6 +40,7 @@ import tim.prune.data.Coordinate; import tim.prune.data.DataPoint; import tim.prune.data.Field; import tim.prune.data.FieldList; +import tim.prune.data.RecentFile; import tim.prune.data.Timestamp; import tim.prune.data.Track; import tim.prune.load.GenericFileFilter; @@ -397,8 +398,6 @@ public class FileSaver _fileChooser = new JFileChooser(); _fileChooser.setDialogType(JFileChooser.SAVE_DIALOG); _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.txt", new String[] {"txt", "text"})); - _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.gpx", new String[] {"gpx"})); - _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kml", new String[] {"kml"})); _fileChooser.setAcceptAllFileFilterUsed(true); // start from directory in config which should be set String configDir = Config.getConfigString(Config.KEY_TRACK_DIR); @@ -445,9 +444,12 @@ public class FileSaver } } + // Correct chosen filename if necessary + final File saveFile = (isFilenameOk(inSaveFile)?inSaveFile:new File(inSaveFile.getAbsolutePath() + ".txt")); + // Check if file exists, and confirm overwrite if necessary Object[] buttonTexts = {I18nManager.getText("button.overwrite"), I18nManager.getText("button.cancel")}; - if (!inSaveFile.exists() || JOptionPane.showOptionDialog(_parentFrame, + if (!saveFile.exists() || JOptionPane.showOptionDialog(_parentFrame, I18nManager.getText("dialog.save.overwrite.text"), I18nManager.getText("dialog.save.overwrite.title"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, buttonTexts, buttonTexts[1]) @@ -456,7 +458,7 @@ public class FileSaver try { // Create output file - writer = new FileWriter(inSaveFile); + writer = new FileWriter(saveFile); // Determine delimiter character to use final char delimiter = getDelimiter(); FieldInfo info = null; @@ -499,8 +501,9 @@ public class FileSaver { DataPoint point = track.getPoint(p); boolean savePoint = ((point.isWaypoint() && _pointTypeSelector.getWaypointsSelected()) - || (!point.isWaypoint() && point.getPhoto()==null && _pointTypeSelector.getTrackpointsSelected()) - || (!point.isWaypoint() && point.getPhoto()!=null && _pointTypeSelector.getPhotopointsSelected())) + || (!point.isWaypoint() && !point.hasMedia() && _pointTypeSelector.getTrackpointsSelected()) + || (!point.isWaypoint() && point.getPhoto()!=null && _pointTypeSelector.getPhotopointsSelected()) + || (!point.isWaypoint() && point.getAudio()!=null && _pointTypeSelector.getAudiopointsSelected())) && (!_pointTypeSelector.getJustSelection() || (p>=selStart && p<=selEnd)); if (!savePoint) {continue;} numSaved++; @@ -511,9 +514,8 @@ public class FileSaver info = _model.getFieldInfo(f); if (info.isSelected()) { - if (!firstField) - { - // output field separator + // output field separator + if (!firstField) { buffer.append(delimiter); } saveField(buffer, point, info.getField(), coordFormat, altitudeFormat, timestampFormat); @@ -525,11 +527,14 @@ public class FileSaver writer.write(lineSeparator); } // Store directory in config for later - Config.setConfigString(Config.KEY_TRACK_DIR, inSaveFile.getParentFile().getAbsolutePath()); + Config.setConfigString(Config.KEY_TRACK_DIR, saveFile.getParentFile().getAbsolutePath()); + // Add to recent file list + Config.getRecentFileList().addFile(new RecentFile(inSaveFile, true)); // Save successful + UpdateMessageBroker.informSubscribers(); UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.save.ok1") + " " + numSaved + " " + I18nManager.getText("confirm.save.ok2") - + " " + inSaveFile.getAbsolutePath()); + + " " + saveFile.getAbsolutePath()); _app.informDataSaved(); } catch (IOException ioe) @@ -591,7 +596,7 @@ public class FileSaver { if (inTimestampFormat == Timestamp.FORMAT_ORIGINAL) { // output original string - inBuffer.append(inPoint.getFieldValue(Field.TIMESTAMP)); + inBuffer.append(inPoint.getTimestamp().getText(Timestamp.FORMAT_ORIGINAL)); } else { // format value accordingly @@ -627,4 +632,17 @@ public class FileSaver // Wasn't any of those so must be 'other' return _otherDelimiterText.getText().charAt(0); } + + + /** + * Check the selected filename to see if it is acceptable + * @param inFile chosen file to save + * @return true if filename is ok + */ + private static boolean isFilenameOk(File inFile) + { + String filename = inFile.getName().toLowerCase(); + return (filename.length() <4 || (!filename.endsWith(".gpx") + && !filename.endsWith(".kml") && !filename.endsWith(".kmz") && !filename.endsWith(".zip"))); + } }