Skip to content

Commit

Permalink
Allow for re-downloading satellite data.
Browse files Browse the repository at this point in the history
  • Loading branch information
wojciech-graj committed Aug 20, 2022
1 parent 2cdc697 commit 55d1132
Show file tree
Hide file tree
Showing 9 changed files with 87 additions and 36 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ else
LDFLAGS += -ldl `pkg-config --libs gl gtk+-3.0 cglm libcurl epoxy`
ifeq ($(MAKECMDGOALS),debug)
CFLAGS += -fsanitize=address -fsanitize=undefined -g -ftrapv -fno-omit-frame-pointer -lrt
LDFLAGS += -fsanitize=address -fsanitize=undefined -g -ftrapv -fno-omit-frame-pointer -lrt
else
CFLAGS += -flto
LDFLAGS += -flto
Expand Down
38 changes: 27 additions & 11 deletions res/ui/ui.glade
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@
<property name="can-focus">False</property>
<property name="stock">gtk-clear</property>
</object>
<object class="GtkImage" id="image_clear1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-clear</property>
</object>
<object class="GtkImage" id="image_clear2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-clear</property>
</object>
<object class="GtkWindow" id="window_catalog">
<property name="can-focus">False</property>
<property name="title" translatable="yes">Catalog</property>
Expand Down Expand Up @@ -1235,16 +1245,6 @@
</object>
</child>
</object>
<object class="GtkImage" id="image_clear1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-clear</property>
</object>
<object class="GtkImage" id="image_clear2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-clear</property>
</object>
<object class="GtkListStore" id="satellite_store">
<columns>
<!-- column-name sat -->
Expand Down Expand Up @@ -1516,6 +1516,7 @@
<object class="GtkWindow" id="window_settings">
<property name="can-focus">False</property>
<property name="title" translatable="yes">Settings</property>
<property name="icon-name">emblem-system</property>
<signal name="delete-event" handler="on_window_settings_delete_event" swapped="no"/>
<child>
<object class="GtkBox">
Expand Down Expand Up @@ -1573,6 +1574,21 @@
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="fetch_data">
<property name="label" translatable="yes">Re-fetch Data</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="xalign">0</property>
<signal name="clicked" handler="on_fetch_data_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
Expand Down Expand Up @@ -1652,7 +1668,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
<property name="position">4</property>
</packing>
</child>
</object>
Expand Down
46 changes: 33 additions & 13 deletions src/entity/satellite.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <cglm/project.h>
#include <cglm/vec3.h>
#include <curl/curl.h>
#include <glib/gstdio.h>
#include <gmodule.h>

#include "bo.h"
Expand Down Expand Up @@ -68,6 +69,10 @@ static vec3 *satellite_orbits = NULL;
static GArray *satellite_orbit_idxs = NULL;
static vec3 *satellite_orbit_colors = NULL;

static gboolean recache = FALSE;

static const char *CACHE_FILENAME = ".sat_cache";

static void satellite_toggle_orbit(guint32 idx);
static void satellites_get(void);
static guint64 sc_hash(const void *item, guint64 seed0, guint64 seed1);
Expand Down Expand Up @@ -156,9 +161,15 @@ static int sc_compare(const void *a, const void *b, void *udata)
return (int)(((struct SatCat *)a)->catnum) - (int)(((struct SatCat *)b)->catnum);
}

void satellite_clear_cache(void)
{
g_remove(CACHE_FILENAME);
recache = TRUE;
}

void save_satellite_cache(void)
{
FILE *cache = fopen(".sat_cache", "w");
FILE *cache = fopen(CACHE_FILENAME, "w");
gint64 epoch_ms = system_epoch_ms();
fwrite(&epoch_ms, 8, 1, cache);
fwrite(&dl_multi.handles[DL_SATCAT].size, 8, 1, cache);
Expand All @@ -177,25 +188,34 @@ void load_cache(struct DLHandle *handle, guint64 size, FILE *cache)

void satellites_get(void)
{
FILE *cache = fopen(".sat_cache", "r");
if (!cache) {
if (recache) {
recache = FALSE;
dl_multi_perform(&dl_multi);
save_satellite_cache();
} else {
gint64 cache_time;
fread(&cache_time, 8, 1, cache);
if (system_epoch_ms() - cache_time > 43200000LL) {
fclose(cache);
goto DL_FINISH;
}
{
FILE *cache = fopen(CACHE_FILENAME, "r");
if (!cache) {
dl_multi_perform(&dl_multi);
save_satellite_cache();
} else {
guint64 sizes[2];
fread(sizes, 8, 2, cache);
load_cache(&dl_multi.handles[DL_SATCAT], sizes[0], cache);
load_cache(&dl_multi.handles[DL_TLE], sizes[1], cache);
fclose(cache);
gint64 cache_time;
fread(&cache_time, 8, 1, cache);
if (system_epoch_ms() - cache_time > 43200000LL) {
fclose(cache);
dl_multi_perform(&dl_multi);
save_satellite_cache();
} else {
guint64 sizes[2];
fread(sizes, 8, 2, cache);
load_cache(&dl_multi.handles[DL_SATCAT], sizes[0], cache);
load_cache(&dl_multi.handles[DL_TLE], sizes[1], cache);
fclose(cache);
}
}
}
DL_FINISH:;

struct DLHandle *dl_satcat = &dl_multi.handles[DL_SATCAT];
size_t n_satcat = count((char *)dl_satcat->memory, '\n', dl_satcat->size);
Expand Down
2 changes: 2 additions & 0 deletions src/entity/satellite.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,6 @@ void satellites_get_sync(void);
void satellite_select(double xpos, double ypos);
void satellite_select_ptr(struct Satellite *satellite);

void satellite_clear_cache(void);

#endif /* __SATELLITE_H__ */
2 changes: 1 addition & 1 deletion src/gfx/gfx.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,10 @@ gboolean on_glarea_render(GtkGLArea *area, GdkGLContext *context, gpointer user_
timemgr_tic();
info_tic();
perf_tic();
thread_join(THRD_PHYS);
#ifndef NO_SATELLITE
thread_join_if_finished(THRD_SATELLITES_GET);
#endif
thread_join(THRD_PHYS);

return TRUE;
}
Expand Down
5 changes: 0 additions & 5 deletions src/ui/catalog.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,11 +173,6 @@ void catalog_construct_views(void)
void catalog_deconstruct_views(void)
{
gtk_tree_view_set_model(satellite_view, NULL);

if (e_catalog_filter)
g_object_unref(e_catalog_filter);
if (sort)
g_object_unref(sort);
}

void catalog_satellite_changed(struct Satellite *satellite)
Expand Down
14 changes: 14 additions & 0 deletions src/ui/setting.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#include "setting.h"

#include "perf.h"
#include "satellite.h"
#include "thread.h"

struct Setting {
char *id;
Expand Down Expand Up @@ -32,6 +34,7 @@ static GtkWindow *window_settings;
static void on_settings_clicked(GtkToolButton *toolbutton, gpointer user_data);
static gboolean on_window_settings_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data);
static void on_setting_toggled(GtkToggleButton *togglebutton, gpointer user_data);
static void on_fetch_data_clicked(GtkButton *button, gpointer user_data);

void on_settings_clicked(GtkToolButton *toolbutton, gpointer user_data)
{
Expand Down Expand Up @@ -60,12 +63,23 @@ void on_setting_toggled(GtkToggleButton *togglebutton, gpointer user_data)
*settings[i].val = !*settings[i].val;
}

void on_fetch_data_clicked(GtkButton *button, gpointer user_data)
{
(void)button;
(void)user_data;
if (!e_threads[THRD_SATELLITES_GET].thread) {
satellite_clear_cache();
thread_dispatch(THRD_SATELLITES_GET, NULL);
}
}

void setting_init(GtkBuilder *builder)
{
gtk_builder_add_callback_symbols(builder,
"on_settings_clicked", G_CALLBACK(on_settings_clicked),
"on_setting_toggled", G_CALLBACK(on_setting_toggled),
"on_window_settings_delete_event", G_CALLBACK(on_window_settings_delete_event),
"on_fetch_data_clicked", G_CALLBACK(on_fetch_data_clicked),
NULL);

window_settings = GTK_WINDOW(gtk_builder_get_object(builder, "window_settings"));
Expand Down
13 changes: 7 additions & 6 deletions src/util/thread.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ struct ThreadParams {
void (*sync)(void);
};

static struct Thread threads[NUM_THRDS] = {
struct Thread e_threads[NUM_THRDS] = {
[THRD_SATELLITES_GET] = { 0 },
[THRD_PHYS] = { 0 },
};
Expand All @@ -33,20 +33,21 @@ void thread_dispatch(enum ThreadID id, void *data)
if (params[id].prep)
params[id].prep();

threads[id].data = data;
threads[id].thread = g_thread_new(NULL, params[id].start_routine, &threads[id]);
e_threads[id].data = data;
e_threads[id].thread = g_thread_new(NULL, params[id].start_routine, &e_threads[id]);
}

void thread_join(enum ThreadID id)
{
g_atomic_int_set(&threads[id].finished, 0);
g_thread_join(threads[id].thread);
g_atomic_int_set(&e_threads[id].finished, 0);
g_thread_join(e_threads[id].thread);
e_threads[id].thread = NULL;
params[id].sync();
}

void thread_join_if_finished(enum ThreadID id)
{
if (g_atomic_int_get(&threads[id].finished))
if (g_atomic_int_get(&e_threads[id].finished))
thread_join(id);
}

Expand Down
2 changes: 2 additions & 0 deletions src/util/thread.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,6 @@ void thread_dispatch(enum ThreadID id, void *data);
void thread_join(enum ThreadID id);
void thread_join_if_finished(enum ThreadID id);

extern struct Thread e_threads[NUM_THRDS];

#endif /* __THREAD_H__ */

0 comments on commit 55d1132

Please sign in to comment.