private void WriteGPXFile(List <Geocache> cacheList, Dictionary <string, string> waypointmappings, ACacheStore store)
 {
     writer.Complete      += HandleWriterComplete;
     writer.WriteWaypoint += HandleWriterWriteWaypoint;
     writer.WriteGPXFile(m_file, cacheList, waypointmappings, store);
     this.Complete(this, new WriteEventArgs("Complete"));
     return;
 }
        public void WriteToGPS(List<Geocache> cacheList, Dictionary<string,string> waypointmappings, ACacheStore store)
        {
            writer = new GPXWriter ();
            writer.NameMode = m_nameMode;
            writer.DescriptionMode = m_descMode;
            writer.Limit = m_Limit;
            writer.LogLimit = m_LogLimit;
            writer.IncludeChildWaypoints = true;
            writer.WriteAttributes = m_incAttr;
            if (m_format == "OCM_GPX") {
                if (m_file == "%auto%")
                {
                    string dBShort = Utilities.GetShortFileName(store.StoreName);
                    dBShort = dBShort.Substring(0, dBShort.Length - 4);
                    dBShort+= ".gpx";
                    m_file = "/media/GARMIN/Garmin/GPX/" + dBShort;
                }
                writer.HTMLOutput = HTMLMode.GARMIN;
                writer.UseOCMPtTypes = true;
                WriteGPXFile (cacheList, waypointmappings, store);
                return;
            }
            else if (m_format == "delgpx")
            {
                writer.HTMLOutput = HTMLMode.PLAINTEXT;
                writer.UseOCMPtTypes = false;
                if (m_file == "%auto%")
                {
                    string dBShort = Utilities.GetShortFileName(store.StoreName);
                    dBShort = dBShort.Substring(0, dBShort.Length - 4);
                    dBShort+= ".gpx";
                    m_file = "/media/EM_USERMAPS/waypoints/" + dBShort;
                }
                WriteGPXFile (cacheList, waypointmappings, store);
                return;
            }

            if (m_format == "edge")
            {
                writer.UseOCMPtTypes = true;
                writer.IncludeGroundSpeakExtensions = false;
                WriteGPXFile (cacheList, waypointmappings, store);
                return;
            }

            writer.IncludeGroundSpeakExtensions = true;
            writer.UseOCMPtTypes = true;
            writer.IncludeChildWaypoints = m_includeChildren;
            if (m_format == "garmin_gpi")
            {
                writer.UseOCMPtTypes = false;
                writer.IncludeGroundSpeakExtensions = false;
                if (m_forcePlainText)
                    writer.HTMLOutput = HTMLMode.PLAINTEXT;
                else
                    writer.HTMLOutput = HTMLMode.GARMIN;
            }
            else if (m_format == "garmin")
            {
                writer.IncludeGroundSpeakExtensions = false;
            }
            writer.Complete += HandleWriterComplete;
            String tempFile = Path.GetTempFileName ();
            writer.WriteWaypoint += HandleWriterWriteWaypoint;
            writer.WriteGPXFile (tempFile, cacheList, waypointmappings, store);
            this.StartSend (this, new WriteEventArgs ("Sending Waypoints to GPS"));
            StringBuilder builder = new StringBuilder ();
            builder.Append ("-i gpx -f ");
            builder.Append (tempFile);
            builder.Append (" -o ");
            builder.Append (m_format);
            if (!String.IsNullOrEmpty(m_otherBabelParams))
            {
                builder.Append(",");
                builder.Append(m_otherBabelParams);
            }
            builder.Append (" -F ");
            builder.Append (m_file);

            if (writer.Cancel)
            {
                throw new Exception ("Aborted");
            }
            ProcessStartInfo sp = new ProcessStartInfo();
            sp.Arguments = builder.ToString();
            sp.FileName = "gpsbabel";
            Process babel = Process.Start (sp);
            babel.WaitForExit ();
            if (babel.ExitCode != 0)
                throw new Exception ("Failed to send caches to GPS");
            this.Complete (this, new WriteEventArgs ("Complete"));
        }
        public void WriteToGPS(List <Geocache> cacheList, Dictionary <string, string> waypointmappings, ACacheStore store)
        {
            writer                       = new GPXWriter();
            writer.NameMode              = m_nameMode;
            writer.DescriptionMode       = m_descMode;
            writer.Limit                 = m_Limit;
            writer.LogLimit              = m_LogLimit;
            writer.IncludeChildWaypoints = true;
            writer.WriteAttributes       = m_incAttr;
            if (m_format == "OCM_GPX")
            {
                if (m_file == "%auto%")
                {
                    string dBShort = Utilities.GetShortFileName(store.StoreName);
                    dBShort  = dBShort.Substring(0, dBShort.Length - 4);
                    dBShort += ".gpx";
                    m_file   = "/media/GARMIN/Garmin/GPX/" + dBShort;
                }
                writer.HTMLOutput    = HTMLMode.GARMIN;
                writer.UseOCMPtTypes = true;
                WriteGPXFile(cacheList, waypointmappings, store);
                return;
            }
            else if (m_format == "delgpx")
            {
                writer.HTMLOutput    = HTMLMode.PLAINTEXT;
                writer.UseOCMPtTypes = false;
                if (m_file == "%auto%")
                {
                    string dBShort = Utilities.GetShortFileName(store.StoreName);
                    dBShort  = dBShort.Substring(0, dBShort.Length - 4);
                    dBShort += ".gpx";
                    m_file   = "/media/EM_USERMAPS/waypoints/" + dBShort;
                }
                WriteGPXFile(cacheList, waypointmappings, store);
                return;
            }

            if (m_format == "edge")
            {
                writer.UseOCMPtTypes = true;
                writer.IncludeGroundSpeakExtensions = false;
                WriteGPXFile(cacheList, waypointmappings, store);
                return;
            }

            writer.IncludeGroundSpeakExtensions = true;
            writer.UseOCMPtTypes         = true;
            writer.IncludeChildWaypoints = m_includeChildren;
            if (m_format == "garmin_gpi")
            {
                writer.UseOCMPtTypes = false;
                writer.IncludeGroundSpeakExtensions = false;
                if (m_forcePlainText)
                {
                    writer.HTMLOutput = HTMLMode.PLAINTEXT;
                }
                else
                {
                    writer.HTMLOutput = HTMLMode.GARMIN;
                }
            }
            else if (m_format == "garmin")
            {
                writer.IncludeGroundSpeakExtensions = false;
            }
            writer.Complete += HandleWriterComplete;
            String tempFile = Path.GetTempFileName();

            writer.WriteWaypoint += HandleWriterWriteWaypoint;
            writer.WriteGPXFile(tempFile, cacheList, waypointmappings, store);
            this.StartSend(this, new WriteEventArgs("Sending Waypoints to GPS"));
            StringBuilder builder = new StringBuilder();

            builder.Append("-i gpx -f ");
            builder.Append(tempFile);
            builder.Append(" -o ");
            builder.Append(m_format);
            if (!String.IsNullOrEmpty(m_otherBabelParams))
            {
                builder.Append(",");
                builder.Append(m_otherBabelParams);
            }
            builder.Append(" -F \"");
            builder.Append(m_file.Replace("\\", "\\\\").Replace("\"", "\\\"").Replace("$", "\\$").Replace("`", "\\`"));
            builder.Append("\"");

            if (writer.Cancel)
            {
                throw new Exception("Aborted");
            }
            ProcessStartInfo sp = new ProcessStartInfo();

            sp.Arguments = builder.ToString();
            sp.FileName  = "gpsbabel";
            Process babel = Process.Start(sp);

            babel.WaitForExit();
            if (babel.ExitCode != 0)
            {
                throw new Exception("Failed to send caches to GPS");
            }
            this.Complete(this, new WriteEventArgs("Complete"));
        }