From 116ae9105c30e9c774ecfb894040dd29abc172fb Mon Sep 17 00:00:00 2001 From: euldulle Date: Tue, 27 May 2025 07:51:22 +0000 Subject: [PATCH 1/2] managing celestrak.org new URL format --- GUI/xephem/fallbacks.c | 10 +++++----- GUI/xephem/webdbmenu.c | 13 +++++++++++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/GUI/xephem/fallbacks.c b/GUI/xephem/fallbacks.c index 34091fe..77bb08d 100644 --- a/GUI/xephem/fallbacks.c +++ b/GUI/xephem/fallbacks.c @@ -744,11 +744,11 @@ String fallbacks[] = { "XEphem*WCS.y: 10", "XEphem*WebDB*Pattern.value: ", "XEphem*WebDB*Search.set: False", - "XEphem*WebDB*URL0.value: https://celestrak.org/NORAD/elements/stations.txt", - "XEphem*WebDB*URL1.value: https://celestrak.org/NORAD/elements/science.txt", - "XEphem*WebDB*URL2.value: https://celestrak.org/NORAD/elements/tle-new.txt", - "XEphem*WebDB*URL3.value: https://celestrak.org/NORAD/elements/amateur.txt", - "XEphem*WebDB*URL4.value: https://celestrak.org/NORAD/elements/visual.txt", + "XEphem*WebDB*URL0.value: https://celestrak.org/NORAD/elements/gp.php?GROUP=stations&FORMAT=tle", + "XEphem*WebDB*URL1.value: https://celestrak.org/NORAD/elements/gp.php?GROUP=science&FORMAT=tle", + "XEphem*WebDB*URL2.value: https://celestrak.org/NORAD/elements/gp.php?GROUP=tle-new&FORMAT=tle", + "XEphem*WebDB*URL3.value: https://celestrak.org/NORAD/elements/gp.php?GROUP=amateur&FORMAT=tle", + "XEphem*WebDB*URL4.value: https://celestrak.org/NORAD/elements/gp.php?GROUP=visual&FORMAT=tle", "XEphem*WebDB*URL5.value: https://www.minorplanetcenter.net/iau/Ephemerides/Comets/Soft03Cmt.txt", "XEphem*WebDB*URL6.value: https://www.minorplanetcenter.net/iau/Ephemerides/CritList/Soft03CritList.txt", "XEphem*WebDB*URL7.value: https://www.minorplanetcenter.net/iau/Ephemerides/Distant/Soft03Distant.txt", diff --git a/GUI/xephem/webdbmenu.c b/GUI/xephem/webdbmenu.c index 9f4c977..4947d79 100644 --- a/GUI/xephem/webdbmenu.c +++ b/GUI/xephem/webdbmenu.c @@ -414,6 +414,7 @@ char *url; char *l0p = l0, *l1p = l1, *l2p = l2; char host[128]; char *slash, *dot; + char *group, *ampersand; char filename[256]; FILE *fp; XE_SSL_FD ssl_fd; @@ -469,8 +470,16 @@ char *url; } /* create local file */ - slash = strrchr (url+ltransport, '/'); - sprintf (filename, "%s/%.*sedb", getPrivateDir(), (int)(dot-slash), slash+1); + if (strstr (url+ltransport, "celestrak.org/NORAD/elements")){ + group=strstr (url+ltransport,"GROUP=")+6; + ampersand=strstr (group,"&"); + snprintf(filename, 255, "%s/%.*s.edb", getPrivateDir(), (int)(ampersand-group), group); + } + else{ + slash = strrchr (url+ltransport, '/'); + sprintf (filename, "%s/%.*sedb", getPrivateDir(), (int)(dot-slash), slash+1); + } + fp = fopen (filename, "w"); if (!fp) { xe_msg (1, "%s:\n%s", filename, syserrstr()); From 305f0b0114e8fcda1abd3beae55d830aecf9a2cc Mon Sep 17 00:00:00 2001 From: euldulle Date: Tue, 27 May 2025 11:48:45 +0000 Subject: [PATCH 2/2] celestrak : added robustness + comments. --- GUI/xephem/webdbmenu.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/GUI/xephem/webdbmenu.c b/GUI/xephem/webdbmenu.c index 4947d79..8dd96b3 100644 --- a/GUI/xephem/webdbmenu.c +++ b/GUI/xephem/webdbmenu.c @@ -470,13 +470,29 @@ char *url; } /* create local file */ - if (strstr (url+ltransport, "celestrak.org/NORAD/elements")){ - group=strstr (url+ltransport,"GROUP=")+6; - ampersand=strstr (group,"&"); - snprintf(filename, 255, "%s/%.*s.edb", getPrivateDir(), (int)(ampersand-group), group); + if (strstr (url+ltransport, "celestrak.org/NORAD/elements")){ + /* managing celestrak new URL format + * https://celestrak.org/NORAD/documentation/gp-data-formats.php + * + * the code below looks for the GROUP= argument in the URL to infer + * the destination filename */ + + /* fallback filename if no GROUP name found : */ + snprintf(filename, 255, "%s/default-celestrak-download.edb", getPrivateDir()); + /* look for GROUP= arg in url : */ + group=strstr (url+ltransport,"GROUP=")+6; + if (group != NULL){ /* if we find a GROUP= name */ + ampersand=strstr (group,"&"); /* look for a potential ampersand separating args in the url */ + if (ampersand==NULL){ /* if no ampersand, lets assume group is the only argument in the url */ + snprintf(filename, 255, "%s/%s.edb", getPrivateDir(), group); + } + else{ + snprintf(filename, 255, "%s/%.*s.edb", getPrivateDir(), (int)(ampersand-group), group); + } + } } else{ - slash = strrchr (url+ltransport, '/'); + slash = strrchr (url+ltransport, '/'); sprintf (filename, "%s/%.*sedb", getPrivateDir(), (int)(dot-slash), slash+1); }