- for (int done=0; !done; ) {
- if (!db_get_media_record(ua->jcr, ua->db, &mr)) {
- if (mr.MediaId != 0) {
- bsendmsg(ua, _("Volume record for MediaId %d not found.\n"), mr.MediaId);
- } else {
- bsendmsg(ua, _("Volume record for %s not found.\n"), mr.VolumeName);
- }
- return 0;
- }
- bsendmsg(ua, _("Updating Volume \"%s\"\n"), mr.VolumeName);
- start_prompt(ua, _("Parameters to modify:\n"));
- add_prompt(ua, _("Volume Status"));
- add_prompt(ua, _("Volume Retention Period"));
- add_prompt(ua, _("Volume Use Duration"));
- add_prompt(ua, _("Maximum Volume Jobs"));
- add_prompt(ua, _("Maximum Volume Files"));
- add_prompt(ua, _("Maximum Volume Bytes"));
- add_prompt(ua, _("Recycle Flag"));
- add_prompt(ua, _("Slot"));
- add_prompt(ua, _("Volume Files"));
- add_prompt(ua, _("Done"));
- switch (do_prompt(ua, _("Select parameter to modify"), NULL, 0)) {
- case 0: /* Volume Status */
- /* Modify Volume Status */
- bsendmsg(ua, _("Current Volume status is: %s\n"), mr.VolStatus);
- start_prompt(ua, _("Possible Values are:\n"));
- add_prompt(ua, "Append"); /* Better not translate these as */
- add_prompt(ua, "Archive"); /* They are known in the database code */
- add_prompt(ua, "Disabled");
- add_prompt(ua, "Full");
- add_prompt(ua, "Used");
- if (strcmp(mr.VolStatus, "Purged") == 0) {
- add_prompt(ua, "Recycle");
- }
- add_prompt(ua, "Read-Only");
- if (do_prompt(ua, _("Choose new Volume Status"), ua->cmd, sizeof(mr.VolStatus)) < 0) {
- return 1;
- }
- bstrncpy(mr.VolStatus, ua->cmd, sizeof(mr.VolStatus));
- query = get_pool_memory(PM_MESSAGE);
- 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);
- break;
- case 1: /* Retention */
- bsendmsg(ua, _("Current retention seconds is: %s\n"),
- edit_utime(mr.VolRetention, ed1));
- if (!get_cmd(ua, _("Enter Volume Retention period: "))) {
- return 0;
- }
- if (!duration_to_utime(ua->cmd, &mr.VolRetention)) {
- bsendmsg(ua, _("Invalid retention period specified.\n"));
- break;
- }
- 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);
- break;
-
- case 2: /* Use Duration */
- bsendmsg(ua, _("Current use duration is: %s\n"),
- edit_utime(mr.VolUseDuration, ed1));
- if (!get_cmd(ua, _("Enter Volume Use Duration: "))) {
- return 0;
- }
- if (!duration_to_utime(ua->cmd, &mr.VolUseDuration)) {
- bsendmsg(ua, _("Invalid use duration specified.\n"));
- break;
- }
- 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);
- break;
-
- case 3: /* Max Jobs */
- int32_t maxjobs;
- bsendmsg(ua, _("Current max jobs is: %u\n"), mr.MaxVolJobs);
- if (!get_cmd(ua, _("Enter new Maximum Jobs: "))) {
- return 0;
- }
- maxjobs = atoi(ua->cmd);
- if (maxjobs < 0) {
- bsendmsg(ua, _("Invalid number, it must be 0 or greater\n"));
- break;
- }
- query = get_pool_memory(PM_MESSAGE);
- Mmsg(&query, "UPDATE Media SET MaxVolJobs=%u WHERE MediaId=%u",
- maxjobs, 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: %u\n"), maxjobs);
- }
- free_pool_memory(query);
- break;
-
- case 4: /* Max Files */
- int32_t maxfiles;
- bsendmsg(ua, _("Current max files is: %u\n"), mr.MaxVolFiles);
- if (!get_cmd(ua, _("Enter new Maximum Files: "))) {
- return 0;
- }
- maxfiles = atoi(ua->cmd);
- if (maxfiles < 0) {
- bsendmsg(ua, _("Invalid number, it must be 0 or greater\n"));
- break;
- }
- query = get_pool_memory(PM_MESSAGE);
- Mmsg(&query, "UPDATE Media SET MaxVolFiles=%u WHERE MediaId=%u",
- maxfiles, 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: %u\n"), maxfiles);
- }
- free_pool_memory(query);
- break;
-
- case 5: /* Max Bytes */
- uint64_t maxbytes;
- bsendmsg(ua, _("Current value is: %s\n"), edit_uint64(mr.MaxVolBytes, ed1));
- if (!get_cmd(ua, _("Enter new Maximum Bytes: "))) {
- return 0;
- }
- if (!size_to_uint64(ua->cmd, strlen(ua->cmd), &maxbytes)) {
- bsendmsg(ua, _("Invalid byte size specification.\n"));
- break;
- }
- 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);
- break;
-
-
- case 6: /* Recycle */
- int recycle;
- bsendmsg(ua, _("Current recycle flag is: %s\n"),
- mr.Recycle==1?_("yes"):_("no"));
- if (!get_cmd(ua, _("Enter new Recycle status: "))) {
- return 0;
- }
- if (strcasecmp(ua->cmd, _("yes")) == 0) {
- recycle = 1;
- } else if (strcasecmp(ua->cmd, _("no")) == 0) {
- recycle = 0;
- } else {
- bsendmsg(ua, _("Invalid recycle status specified.\n"));
- break;
- }
- 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);
- break;
-
- case 7: /* Slot */
- int slot;
- bsendmsg(ua, _("Current Slot is: %d\n"), mr.Slot);
- if (!get_cmd(ua, _("Enter new Slot: "))) {
- return 0;
- }
- slot = atoi(ua->cmd);
- if (slot < 0) {
- bsendmsg(ua, _("Invalid slot, it must be 0 or greater\n"));
- break;
- } else if (pr.MaxVols > 0 && slot >(int)pr.MaxVols) {
- bsendmsg(ua, _("Invalid slot, it must be between 0 and %d\n"),
- pr.MaxVols);
- break;
- }
- query = get_pool_memory(PM_MESSAGE);
- Mmsg(&query, "UPDATE Media SET Slot=%d WHERE MediaId=%u",
- slot, mr.MediaId);
- if (!db_sql_query(ua->db, query, NULL, NULL)) {
- bsendmsg(ua, "%s", db_strerror(ua->db));
- } else {
- bsendmsg(ua, "New Slot is: %d\n", slot);
- }
- free_pool_memory(query);
- break;
-
- case 8: /* Volume Files */
- int32_t VolFiles;
- bsendmsg(ua, _("Warning changing Volume Files can result\n"
- "in loss of data on your Volume\n\n"));
- bsendmsg(ua, _("Current Volume Files is: %u\n"), mr.VolFiles);
- if (!get_cmd(ua, _("Enter new number of Files for Volume: "))) {
- return 0;
- }
- VolFiles = atoi(ua->cmd);
- if (VolFiles < 0) {
- bsendmsg(ua, _("Invalid number, it must be 0 or greater\n"));
- break;
- }
- if (VolFiles != (int)(mr.VolFiles + 1)) {
- bsendmsg(ua, _("Normally, you should only increase Volume Files by one!\n"));
- if (!get_cmd(ua, _("Continue? (yes/no): ")) ||
- strcasecmp(ua->cmd, "yes") != 0) {
- break;
- }
- }
- query = get_pool_memory(PM_MESSAGE);
- Mmsg(&query, "UPDATE Media SET VolFiles=%u WHERE MediaId=%u",
- VolFiles, mr.MediaId);
- if (!db_sql_query(ua->db, query, NULL, NULL)) {
- bsendmsg(ua, "%s", db_strerror(ua->db));
- } else {
- bsendmsg(ua, _("New Volume Files is: %u\n"), VolFiles);
- }
- free_pool_memory(query);
- break;
-
- default: /* Done or error */
- bsendmsg(ua, "Selection done.\n");
- return 1;
- }