+static bool list_nextvol(UAContext *ua, int ndays)
+{
+ JOB *job;
+ JCR *jcr = ua->jcr;
+ USTORE store;
+ RUN *run;
+ time_t runtime;
+ bool found = false;
+ MEDIA_DBR mr;
+ POOL_DBR pr;
+
+ memset(&mr, 0, sizeof(mr));
+ int i = find_arg_with_value(ua, "job");
+ if (i <= 0) {
+ if ((job = select_job_resource(ua)) == NULL) {
+ return false;
+ }
+ } else {
+ job = (JOB *)GetResWithName(R_JOB, ua->argv[i]);
+ if (!job) {
+ Jmsg(jcr, M_ERROR, 0, _("%s is not a job name.\n"), ua->argv[i]);
+ if ((job = select_job_resource(ua)) == NULL) {
+ return false;
+ }
+ }
+ }
+ for (run=NULL; (run = find_next_run(run, job, runtime, ndays)); ) {
+ if (!complete_jcr_for_job(jcr, job, run->pool)) {
+ return false;
+ }
+ memset(&pr, 0, sizeof(pr));
+ pr.PoolId = jcr->jr.PoolId;
+ if (!db_get_pool_record(ua->jcr, ua->db, &pr)) {
+ bstrncpy(pr.Name, "*UnknownPool*", sizeof(pr.Name));
+ }
+ mr.PoolId = jcr->jr.PoolId;
+ get_job_storage(&store, job, run);
+ mr.StorageId = store.store->StorageId;
+ if (!find_next_volume_for_append(jcr, &mr, 1, fnv_no_create_vol, fnv_prune)) {
+ bsendmsg(ua, _("Could not find next Volume for Job %s (%s, %s).\n"),
+ job->hdr.name, pr.Name, level_to_str(run->level));
+ } else {
+ bsendmsg(ua,
+ _("The next Volume to be used by Job \"%s\" (%s, %s) will be %s\n"),
+ job->hdr.name, pr.Name, level_to_str(run->level), mr.VolumeName);
+ found = true;
+ }
+ if (jcr->db && jcr->db != ua->db) {
+ db_close_database(jcr, jcr->db);
+ jcr->db = NULL;
+ }
+ }
+ if (!found) {
+ bsendmsg(ua, _("Could not find next Volume for Job %s.\n"),
+ job->hdr.name);
+ return false;
+ }
+ return true;
+}
+
+
+/*