002
2021-11-05
op
* Copyright (c) 2021 Omar Polo <op@omarpolo.com>
004
2021-11-05
op
* Permission to use, copy, modify, and distribute this software for any
005
2021-11-05
op
* purpose with or without fee is hereby granted, provided that the above
006
2021-11-05
op
* copyright notice and this permission notice appear in all copies.
008
2021-11-05
op
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
009
2021-11-05
op
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
010
2021-11-05
op
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
011
2021-11-05
op
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
012
2021-11-05
op
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
013
2021-11-05
op
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
014
2021-11-05
op
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
017
2021-11-05
op
#include "compat.h"
019
2021-11-05
op
#include <stdlib.h>
020
2021-11-05
op
#include <string.h>
022
2021-11-05
op
#include "telescope.h"
023
2021-11-05
op
#include "ui.h"
025
2021-11-05
op
struct downloads downloads = STAILQ_HEAD_INITIALIZER(downloads);
027
2021-11-05
op
static void
028
2021-11-29
op
no_downloads(void)
030
2021-11-05
op
struct line *l;
032
2021-11-05
op
if ((l = calloc(1, sizeof(*l))) == NULL)
035
2021-11-05
op
l->type = LINE_DOWNLOAD_INFO;
036
2021-11-05
op
l->line = strdup("No downloads");
038
2021-11-05
op
TAILQ_INSERT_TAIL(&downloadwin.page.head, l, lines);
042
2021-11-05
op
recompute_downloads(void)
044
2021-11-05
op
struct download *d;
045
2021-11-05
op
struct line *l;
046
2021-11-05
op
char buf[FMT_SCALED_STRSIZE];
048
2021-11-05
op
downloadwin.page.name = "*Downloads*";
049
2021-11-05
op
erase_buffer(&downloadwin);
051
2021-11-05
op
if (STAILQ_EMPTY(&downloads)) {
052
2021-11-05
op
no_downloads();
053
2021-11-05
op
goto end;
056
2021-11-05
op
STAILQ_FOREACH(d, &downloads, entries) {
057
2021-11-05
op
if ((l = calloc(1, sizeof(*l))) == NULL)
060
2021-11-05
op
fmt_scaled(d->bytes, buf);
062
2021-11-05
op
l->type = LINE_DOWNLOAD;
063
2021-11-05
op
if (d->fd == -1)
064
2021-11-05
op
l->type = LINE_DOWNLOAD_DONE;
066
2021-11-05
op
l->line = strdup(buf);
067
2021-11-05
op
l->alt = strdup(d->path);
069
2021-11-05
op
TAILQ_INSERT_TAIL(&downloadwin.page.head, l, lines);
074
2021-11-27
op
* The exact value doesn't matter, as wrap_page only considers
075
2021-11-27
op
* l->line, which is the human representation of the byte
076
2021-11-27
op
* counter, and we know for sure is < FMT_SCALED_STRSIZE so it
079
2021-11-27
op
wrap_page(&downloadwin, download_cols);
082
2022-04-24
op
struct download *
083
2022-05-05
op
enqueue_download(uint32_t id, const char *path)
085
2021-11-05
op
struct download *d;
087
2021-11-05
op
if ((d = calloc(1, sizeof(*d))) == NULL)
090
2021-11-05
op
d->id = id;
091
2021-11-05
op
d->fd = -1;
092
2021-11-05
op
d->path = strdup(path);
094
2022-04-13
op
STAILQ_INSERT_HEAD(&downloads, d, entries);
096
2022-04-24
op
return d;
099
2021-11-05
op
struct download *
100
2021-11-05
op
download_by_id(uint32_t id)
102
2021-11-05
op
struct download *d;
104
2021-11-05
op
STAILQ_FOREACH(d, &downloads, entries) {
105
2021-11-05
op
if (d->id == id)
106
2021-11-05
op
return d;
109
2021-11-05
op
return NULL;