/*
- * Copyright (C) 2011-2012 jeanfi@gmail.com
+ * Copyright (C) 2011-2014 jeanfi@gmail.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
#include "list.h"
#include "lp.h"
-
-char *time_to_str(time_t t)
-{
- char *str;
- struct tm *tm;
- size_t ret;
-
- tm = localtime(&t);
-
- if (!tm)
- return NULL;
-
- str = malloc(strlen("YYYY-MM-DDThh:mm:ss") + 1);
- ret = strftime(str, strlen("YYYY-MM-DDThh:mm:ss") + 1, "%FT%T", tm);
-
- if (ret)
- return str;
-
- free(str);
- return NULL;
-}
+#include <ptime.h>
struct distro_series *distro_series_new(const char *name,
const char *version,
return list1;
}
+
+time_t ddts_get_last_date(struct daily_download_total **ddts)
+{
+ struct daily_download_total **cur;
+ time_t t, last_t;
+
+ if (!ddts)
+ return 0;
+
+ last_t = 0;
+ for (cur = ddts; *cur; cur++) {
+ t = mktime(&(*cur)->date);
+ if (t > last_t)
+ last_t = t;
+ }
+
+ return last_t;
+}
+
+int ddts_length(struct daily_download_total **ddts)
+{
+ int n;
+ struct daily_download_total **cur;
+
+ n = 0;
+
+ if (ddts)
+ for (cur = ddts; *cur; cur++)
+ n++;
+
+ return n;
+}
+
+
+struct daily_download_total **add_total
+(struct daily_download_total **totals, struct daily_download_total *total)
+{
+ struct daily_download_total **cur;
+ struct daily_download_total *item;
+
+ if (totals) {
+ cur = totals;
+ while (*cur) {
+ item = *cur;
+
+ if (item->date.tm_year == total->date.tm_year &&
+ item->date.tm_mon == total->date.tm_mon &&
+ item->date.tm_mday == total->date.tm_mday) {
+ item->count = total->count;
+ return totals;
+ }
+
+ cur++;
+ }
+ }
+
+ item = malloc(sizeof(struct daily_download_total));
+ memcpy(item, total, sizeof(struct daily_download_total));
+
+ return (struct daily_download_total **)
+ list_add((void **)totals, (void *)item);
+}
+
+
+struct daily_download_total **
+ddts_merge(struct daily_download_total **ddts1,
+ struct daily_download_total **ddts2)
+{
+ struct daily_download_total **ddts, **cur, **tmp;
+
+ if (ddts1) {
+ ddts = malloc((ddts_length(ddts1) + 1)
+ * sizeof(struct daily_download_total *));
+ memcpy(ddts, ddts1, (ddts_length(ddts1) + 1) * sizeof(void *));
+ } else {
+ ddts = malloc(sizeof(struct daily_download_total *));
+ ddts[0] = NULL;
+ }
+
+ if (ddts2)
+ for (cur = ddts2; *cur; cur++) {
+ tmp = add_total(ddts, *cur);
+ if (tmp != ddts)
+ ddts = tmp;
+ }
+
+ return ddts;
+}
+
+int ddts_get_count(struct daily_download_total **ddts)
+{
+ struct daily_download_total **cur;
+ int i;
+
+ i = 0;
+ for (cur = ddts; *cur; cur++)
+ i += (*cur)->count;
+
+ return i;
+}