+static void update_volstatus(UAContext *ua, char *val, MEDIA_DBR *mr)
+{
+ POOLMEM *query = get_pool_memory(PM_MESSAGE);
+ char *kw[] = {
+ "Append",
+ "Archive",
+ "Disabled",
+ "Full",
+ "Used",
+ "Cleaning",
+ "Recycle",
+ "Read-Only",
+ NULL};
+ bool found = false;
+ int i;
+
+ for (i=0; kw[i]; i++) {
+ if (strcasecmp(val, kw[i]) == 0) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ bsendmsg(ua, _("Invalid VolStatus specified: %s\n"), val);
+ } else {
+ bstrncpy(mr->VolStatus, kw[i], sizeof(mr->VolStatus));
+ Mmsg(&query, "UPDATE Media SET VolStatus='%s' WHERE MediaId=%u",
+ mr->VolStatus, mr->MediaId);
+ if (!db_sql_query(ua->db, query, NULL, NULL)) {
+ bsendmsg(ua, "%s", db_strerror(ua->db));
+ } else {
+ bsendmsg(ua, _("New Volume status is: %s\n"), mr->VolStatus);
+ }
+ }
+ free_pool_memory(query);
+}
+
+static void update_volretention(UAContext *ua, char *val, MEDIA_DBR *mr)
+{
+ char ed1[50];
+ POOLMEM *query;
+ if (!duration_to_utime(val, &mr->VolRetention)) {
+ bsendmsg(ua, _("Invalid retention period specified: %s\n"), val);
+ return;
+ }
+ query = get_pool_memory(PM_MESSAGE);
+ Mmsg(&query, "UPDATE Media SET VolRetention=%s WHERE MediaId=%u",
+ edit_uint64(mr->VolRetention, ed1), mr->MediaId);
+ if (!db_sql_query(ua->db, query, NULL, NULL)) {
+ bsendmsg(ua, "%s", db_strerror(ua->db));
+ } else {
+ bsendmsg(ua, _("New retention seconds is: %s\n"),
+ edit_utime(mr->VolRetention, ed1));
+ }
+ free_pool_memory(query);
+}
+
+static void update_voluseduration(UAContext *ua, char *val, MEDIA_DBR *mr)
+{
+ char ed1[50];
+ POOLMEM *query;
+
+ if (!duration_to_utime(val, &mr->VolUseDuration)) {
+ bsendmsg(ua, _("Invalid use duration specified: %s\n"), val);
+ return;
+ }
+ query = get_pool_memory(PM_MESSAGE);
+ Mmsg(&query, "UPDATE Media SET VolUseDuration=%s WHERE MediaId=%u",
+ edit_uint64(mr->VolUseDuration, ed1), mr->MediaId);
+ if (!db_sql_query(ua->db, query, NULL, NULL)) {
+ bsendmsg(ua, "%s", db_strerror(ua->db));
+ } else {
+ bsendmsg(ua, _("New use duration is: %s\n"),
+ edit_utime(mr->VolUseDuration, ed1));
+ }
+ free_pool_memory(query);
+}
+
+static void update_volmaxjobs(UAContext *ua, char *val, MEDIA_DBR *mr)
+{
+ POOLMEM *query = get_pool_memory(PM_MESSAGE);
+ Mmsg(&query, "UPDATE Media SET MaxVolJobs=%s WHERE MediaId=%u",
+ val, mr->MediaId);
+ if (!db_sql_query(ua->db, query, NULL, NULL)) {
+ bsendmsg(ua, "%s", db_strerror(ua->db));
+ } else {
+ bsendmsg(ua, _("New max jobs is: %s\n"), val);
+ }
+ free_pool_memory(query);
+}
+
+static void update_volmaxfiles(UAContext *ua, char *val, MEDIA_DBR *mr)
+{
+ POOLMEM *query = get_pool_memory(PM_MESSAGE);
+ Mmsg(&query, "UPDATE Media SET MaxVolFiles=%s WHERE MediaId=%u",
+ val, mr->MediaId);
+ if (!db_sql_query(ua->db, query, NULL, NULL)) {
+ bsendmsg(ua, "%s", db_strerror(ua->db));
+ } else {
+ bsendmsg(ua, _("New max files is: %s\n"), val);
+ }
+ free_pool_memory(query);
+}
+
+static void update_volmaxbytes(UAContext *ua, char *val, MEDIA_DBR *mr)
+{
+ uint64_t maxbytes;
+ char ed1[50];
+ POOLMEM *query;
+
+ if (!size_to_uint64(val, strlen(val), &maxbytes)) {
+ bsendmsg(ua, _("Invalid max. bytes specification: %s\n"), val);
+ return;
+ }
+ query = get_pool_memory(PM_MESSAGE);
+ Mmsg(&query, "UPDATE Media SET MaxVolBytes=%s WHERE MediaId=%u",
+ edit_uint64(maxbytes, ed1), mr->MediaId);
+ if (!db_sql_query(ua->db, query, NULL, NULL)) {
+ bsendmsg(ua, "%s", db_strerror(ua->db));
+ } else {
+ bsendmsg(ua, _("New Max bytes is: %s\n"), edit_uint64(maxbytes, ed1));
+ }
+ free_pool_memory(query);
+}
+
+static void update_volrecycle(UAContext *ua, char *val, MEDIA_DBR *mr)
+{
+ int recycle;
+ POOLMEM *query;
+ if (strcasecmp(val, _("yes")) == 0) {
+ recycle = 1;
+ } else if (strcasecmp(val, _("no")) == 0) {
+ recycle = 0;
+ } else {
+ bsendmsg(ua, _("Invalid value. It must by yes or no.\n"));
+ return;
+ }
+ query = get_pool_memory(PM_MESSAGE);
+ Mmsg(&query, "UPDATE Media SET Recycle=%d WHERE MediaId=%u",
+ recycle, mr->MediaId);
+ if (!db_sql_query(ua->db, query, NULL, NULL)) {
+ bsendmsg(ua, "%s", db_strerror(ua->db));
+ } else {
+ bsendmsg(ua, _("New Recycle flag is: %s\n"),
+ mr->Recycle==1?_("yes"):_("no"));
+ }
+ free_pool_memory(query);
+}
+
+/* Modify the Pool in which this Volume is located */
+static void update_volpool(UAContext *ua, char *val, MEDIA_DBR *mr)
+{
+ POOL_DBR pr;
+
+ memset(&pr, 0, sizeof(pr));
+ bstrncpy(pr.Name, val, sizeof(pr.Name));
+ if (!get_pool_dbr(ua, &pr)) {
+ return;
+ }
+ mr->PoolId = pr.PoolId; /* set new PoolId */
+ /*
+ * Make sure to use db_update... rather than doing this directly,
+ * so that any Slot is handled correctly.
+ */
+ if (!db_update_media_record(ua->jcr, ua->db, mr)) {
+ bsendmsg(ua, _("Error updating media record Pool: ERR=%s"), db_strerror(ua->db));
+ } else {
+ bsendmsg(ua, _("New Pool is: %s\n"), pr.Name);
+ }
+}
+