X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Fppastats.c;h=3f94038928075ca5967e2e03a6956a523ad4f6bd;hb=1288d571249ac21acb2b690cc9ff0d0f07a7655e;hp=9dd5c46bb71383fc4ef2541572ec6372aca34d2e;hpb=acc20f9c4b9a38e732514c278e47071cf6293a06;p=ppastats.git diff --git a/src/ppastats.c b/src/ppastats.c index 9dd5c46..3f94038 100644 --- a/src/ppastats.c +++ b/src/ppastats.c @@ -46,6 +46,7 @@ static struct package_stats *get_package_stats(struct ppa_stats *stats, p->versions = NULL; p->download_count = 0; p->daily_download_totals = NULL; + p->distros = NULL; stats->packages = (struct package_stats **)list_add ((void **)stats->packages, p); @@ -81,6 +82,18 @@ static struct version_stats *get_version_stats(struct package_stats *package, return v; } +static struct distro_stats *distro_stats_new(const char *name) +{ + struct distro_stats *d; + + d = malloc(sizeof(struct distro_stats)); + d->name = strdup(name); + d->archs = NULL; + d->download_count = 0; + + return d; +} + static struct distro_stats *get_distro_stats(struct version_stats *version, const char *name) { @@ -96,10 +109,7 @@ static struct distro_stats *get_distro_stats(struct version_stats *version, cur++; } - d = malloc(sizeof(struct distro_stats)); - d->name = strdup(name); - d->archs = NULL; - d->download_count = 0; + d = distro_stats_new(name); version->distros = (struct distro_stats **)list_add((void **)version->distros, @@ -181,6 +191,36 @@ struct daily_download_total **add_totals return result; } +static void +pkg_add_distro(struct package_stats *pkg, + const char *distro_name, + int distro_count) +{ + struct distro_stats **pkg_distros, *pkg_distro; + + pkg_distros = pkg->distros; + pkg_distro = NULL; + + if (pkg_distros) + while (*pkg_distros) { + if (!strcmp((*pkg_distros)->name, distro_name)) { + pkg_distro = *pkg_distros; + break; + } + + pkg_distros++; + } + + if (!pkg_distro) { + pkg_distro = distro_stats_new(distro_name); + pkg->distros + = (struct distro_stats **) + list_add((void **)pkg->distros, (void *)pkg_distro); + } + + pkg_distro->download_count += distro_count; +} + struct ppa_stats * create_ppa_stats(const char *owner, const char *ppa_name, @@ -247,6 +287,8 @@ create_ppa_stats(const char *owner, arch = get_arch_stats(distro, arch_series->architecture_tag); arch->download_count += count; + pkg_add_distro(pkg, distro_series->name, count); + daily_download_total_list_free(totals); h_cur++;