X-Git-Url: http://git.wpitchoune.net/gitweb/?p=ppastats.git;a=blobdiff_plain;f=src%2Fppastats.c;h=39b2d874daa7b740b1e0dd4306654defc8ac07b8;hp=7acc0599fc5a77d5ee79a6a66ed6feda83bb49c3;hb=586361f5da21ef8e34987db0c628af1fb06df6a1;hpb=28356baaaaa4271e7c5bea180836cca4aa4d06ad diff --git a/src/ppastats.c b/src/ppastats.c index 7acc059..39b2d87 100644 --- a/src/ppastats.c +++ b/src/ppastats.c @@ -29,6 +29,99 @@ #include #include +static void arch_stats_free(struct arch_stats *arch) +{ + free(arch->name); + free(arch); +} + +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; + d->ddts = NULL; + + return d; +} + +static void distro_stats_free(struct distro_stats *distro) +{ + struct arch_stats **archs; + + archs = distro->archs; + if (archs) { + while (*archs) { + arch_stats_free(*archs); + archs++; + } + free(distro->archs); + } + + daily_download_total_list_free(distro->ddts); + + free(distro->name); + free(distro); +} + +static void distro_stats_list_free(struct distro_stats **distros) +{ + struct distro_stats **cur; + + if (distros) { + cur = distros; + while (*cur) { + distro_stats_free(*cur); + cur++; + } + free(distros); + } +} + +static void version_stats_free(struct version_stats *version) +{ + distro_stats_list_free(version->distros); + daily_download_total_list_free(version->daily_download_totals); + + free(version->version); + free(version); +} + +static void package_stats_free(struct package_stats *package) +{ + struct version_stats **versions; + + versions = package->versions; + if (versions) { + while (*versions) { + version_stats_free(*versions); + versions++; + } + free(package->versions); + } + distro_stats_list_free(package->distros); + daily_download_total_list_free(package->daily_download_totals); + free(package->name); + free(package); +} + +static struct package_stats *package_stats_new(const char *name) +{ + struct package_stats *p; + + p = malloc(sizeof(struct package_stats)); + p->name = strdup(name); + p->versions = NULL; + p->download_count = 0; + p->daily_download_totals = NULL; + p->distros = NULL; + + return p; +} + static struct package_stats *get_package_stats(struct ppa_stats *stats, const char *name) @@ -45,21 +138,29 @@ static struct package_stats *get_package_stats(struct ppa_stats *stats, p_cur++; } - p = malloc(sizeof(struct package_stats)); - p->name = strdup(name); - p->versions = NULL; - p->download_count = 0; - p->daily_download_totals = NULL; - p->distros = NULL; + p = package_stats_new(name); - tmp = (struct package_stats **)list_add - ((void **)stats->packages, p); + tmp = (struct package_stats **)list_add((void **)stats->packages, p); free(stats->packages); stats->packages = tmp; return p; } +static struct version_stats *version_stats_new(const char *version) +{ + struct version_stats *v; + + v = malloc(sizeof(struct version_stats)); + v->version = strdup(version); + v->distros = NULL; + v->download_count = 0; + v->daily_download_totals = NULL; + v->date_created = 0; + + return v; +} + static struct version_stats *get_version_stats(struct package_stats *package, const char *version) { @@ -75,11 +176,7 @@ static struct version_stats *get_version_stats(struct package_stats *package, cur++; } - v = malloc(sizeof(struct version_stats)); - v->version = strdup(version); - v->distros = NULL; - v->download_count = 0; - v->daily_download_totals = NULL; + v = version_stats_new(version); tmp = (struct version_stats **)list_add((void **)package->versions, v); @@ -89,25 +186,12 @@ 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; - d->ddts = NULL; - - return d; -} - static struct distro_stats *get_distro_stats(struct version_stats *version, const char *name) { - struct distro_stats **cur = version->distros; - struct distro_stats *d; - struct distro_stats **tmp; + struct distro_stats **cur, *d, **tmp; + + cur = version->distros; while (cur && *cur) { d = *cur; @@ -120,9 +204,8 @@ static struct distro_stats *get_distro_stats(struct version_stats *version, d = distro_stats_new(name); - tmp = (struct distro_stats **)list_add((void **)version->distros, - d); + d); free(version->distros); version->distros = tmp; @@ -132,10 +215,9 @@ static struct distro_stats *get_distro_stats(struct version_stats *version, static struct arch_stats *get_arch_stats(struct distro_stats *distro, const char *name) { - struct arch_stats **cur = distro->archs; - struct arch_stats *a; - struct arch_stats **tmp; + struct arch_stats **cur, *a, **tmp; + cur = distro->archs; while (cur && *cur) { a = *cur; @@ -286,7 +368,8 @@ create_ppa_stats(const char *owner, for (h_cur = history; *h_cur; ++h_cur) { h = *h_cur; - totals = get_daily_download_totals(h->self_link); + totals = get_daily_download_totals(h->self_link, + h->date_created); if (!totals) { log_err(_("Failed to retrieve download totals for %s"), h->self_link); @@ -314,6 +397,8 @@ create_ppa_stats(const char *owner, pkg->daily_download_totals = tmp; version = get_version_stats(pkg, pkg_version); + version->date_created = h->date_created; + version->download_count += count; tmp = add_totals(version->daily_download_totals, totals); if (version->daily_download_totals != tmp) @@ -336,69 +421,6 @@ create_ppa_stats(const char *owner, return ppa; } -static void arch_stats_free(struct arch_stats *arch) -{ - free(arch->name); - free(arch); -} - -static void distro_stats_free(struct distro_stats *distro) -{ - struct arch_stats **archs; - - archs = distro->archs; - if (archs) { - while (*archs) { - arch_stats_free(*archs); - archs++; - } - free(distro->archs); - } - - daily_download_total_list_free(distro->ddts); - - free(distro->name); - free(distro); -} - -static void distro_stats_list_free(struct distro_stats **distros) -{ - if (distros) { - while (*distros) { - distro_stats_free(*distros); - distros++; - } - free(distros); - } -} - -static void version_stats_free(struct version_stats *version) -{ - distro_stats_list_free(version->distros); - daily_download_total_list_free(version->daily_download_totals); - - free(version->version); - free(version); -} - -static void package_stats_free(struct package_stats *package) -{ - struct version_stats **versions; - - versions = package->versions; - if (versions) { - while (*versions) { - version_stats_free(*versions); - versions++; - } - free(package->versions); - } - distro_stats_list_free(package->distros); - daily_download_total_list_free(package->daily_download_totals); - free(package->name); - free(package); -} - void ppa_stats_free(struct ppa_stats *ppastats) { struct package_stats **packages;