Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
DVR: handle the used space correctly
  • Loading branch information
perexg committed Dec 11, 2015
1 parent 0a83eed commit ba7f66d
Show file tree
Hide file tree
Showing 11 changed files with 216 additions and 43 deletions.
25 changes: 16 additions & 9 deletions src/dvr/dvr.h
Expand Up @@ -26,6 +26,13 @@
#include "muxer.h"
#include "profile.h"
#include "lang_str.h"
#include "tvhvfs.h"

typedef struct dvr_vfs {
LIST_ENTRY(dvr_vfs) link;
tvh_fsid_t fsid;
uint64_t used_size;
} dvr_vfs_t;

typedef struct dvr_config {
idnode_t dvr_id;
Expand Down Expand Up @@ -85,10 +92,6 @@ typedef struct dvr_config {

} dvr_config_t;

extern struct dvr_config_list dvrconfigs;

extern struct dvr_entry_list dvrentries;

typedef enum {
DVR_PRIO_IMPORTANT = 0,
DVR_PRIO_HIGH = 1,
Expand All @@ -98,10 +101,6 @@ typedef enum {
DVR_PRIO_NOTSET = 5,
} dvr_prio_t;


LIST_HEAD(dvr_rec_stream_list, dvr_rec_stream);


typedef enum {
DVR_SCHEDULED, /* Scheduled for recording (in the future) */
DVR_RECORDING,
Expand Down Expand Up @@ -405,6 +404,10 @@ extern const idclass_t dvr_entry_class;
extern const idclass_t dvr_autorec_entry_class;
extern const idclass_t dvr_timerec_entry_class;

extern struct dvr_vfs_list dvrvfs_list;
extern struct dvr_config_list dvrconfigs;
extern struct dvr_entry_list dvrentries;

/**
* Prototypes
*/
Expand Down Expand Up @@ -583,9 +586,13 @@ int dvr_entry_verify(dvr_entry_t *de, access_t *a, int readonly);

void dvr_spawn_postcmd(dvr_entry_t *de, const char *postcmd, const char *filename);

void dvr_vfs_refresh_entry(dvr_entry_t *de);
void dvr_vfs_remove_entry(dvr_entry_t *de);

void dvr_disk_space_boot(void);
void dvr_disk_space_init(void);
void dvr_disk_space_done(void);
int dvr_get_disk_space(int64_t *bfree, int64_t *btotal);
int dvr_get_disk_space(int64_t *bfree, int64_t *bused, int64_t *btotal);

/**
*
Expand Down
1 change: 1 addition & 0 deletions src/dvr/dvr_config.c
Expand Up @@ -1218,6 +1218,7 @@ dvr_init(void)
#if ENABLE_INOTIFY
dvr_inotify_init();
#endif
dvr_disk_space_boot();
dvr_autorec_init();
dvr_timerec_init();
dvr_entry_init();
Expand Down
21 changes: 18 additions & 3 deletions src/dvr/dvr_db.c
Expand Up @@ -755,6 +755,7 @@ dvr_entry_create(const char *uuid, htsmsg_t *conf, int clone)
if (!clone)
dvr_entry_set_timer(de);
htsp_dvr_entry_add(de);
dvr_vfs_refresh_entry(de);

return de;
}
Expand Down Expand Up @@ -1291,14 +1292,27 @@ dvr_entry_destroy_by_config(dvr_config_t *cfg, int delconf)
void
dvr_entry_save(dvr_entry_t *de)
{
htsmsg_t *m = htsmsg_create_map();
htsmsg_t *m = htsmsg_create_map(), *e, *l, *c;
htsmsg_field_t *f;
char ubuf[UUID_HEX_SIZE];
const char *filename;

lock_assert(&global_lock);

idnode_save(&de->de_id, m);
if (de->de_files)
htsmsg_add_msg(m, "files", htsmsg_copy(de->de_files));
if (de->de_files) {
l = htsmsg_create_list();
HTSMSG_FOREACH(f, de->de_files)
if ((e = htsmsg_field_get_map(f)) != NULL) {
filename = htsmsg_get_str(e, "filename");
if (filename) {
c = htsmsg_create_map();
htsmsg_add_str(c, "filename", filename);
htsmsg_add_msg(l, NULL, c);
}
}
htsmsg_add_msg(m, "files", l);
}
hts_settings_save(m, "dvr/log/%s", idnode_uuid_as_str(&de->de_id, ubuf));
htsmsg_destroy(m);
}
Expand Down Expand Up @@ -3140,6 +3154,7 @@ dvr_entry_delete(dvr_entry_t *de, int no_missed_time_resched)
if(cfg->dvr_title_dir || cfg->dvr_channel_dir || cfg->dvr_dir_per_day || de->de_directory)
rdir = cfg->dvr_storage;

dvr_vfs_remove_entry(de);
HTSMSG_FOREACH(f, de->de_files) {
m = htsmsg_field_get_map(f);
if (m == NULL) continue;
Expand Down
1 change: 1 addition & 0 deletions src/dvr/dvr_inotify.c
Expand Up @@ -231,6 +231,7 @@ _dvr_inotify_moved
}
}

dvr_vfs_refresh_entry(de);
htsp_dvr_entry_update(de);
idnode_notify_changed(&de->de_id);
}
Expand Down
3 changes: 3 additions & 0 deletions src/dvr/dvr_rec.c
Expand Up @@ -168,6 +168,8 @@ dvr_rec_unsubscribe(dvr_entry_t *de)
de->de_chain = NULL;
profile_chain_close(prch);
free(prch);

dvr_vfs_refresh_entry(de);
}

/**
Expand Down Expand Up @@ -804,6 +806,7 @@ pvr_generate_filename(dvr_entry_t *de, const streaming_start_t *ss)
m = htsmsg_create_map();
htsmsg_add_str(m, "filename", path);
htsmsg_add_msg(de->de_files, NULL, m);
dvr_vfs_refresh_entry(de);

return 0;
}
Expand Down

0 comments on commit ba7f66d

Please sign in to comment.