summaryrefslogtreecommitdiff
path: root/src/daisy-player.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2018-10-07 22:09:32 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2018-10-07 22:09:32 +0200
commita302a0c94bc737d89f07c17c930014150e8d16f7 (patch)
tree8d80c2edeaf39045b9534452bb597e5e17d0bc0b /src/daisy-player.c
parentad0259f517603f8961cd7a61c49df865320ee387 (diff)
New upstream version 11.6.1.1
Diffstat (limited to 'src/daisy-player.c')
-rw-r--r--src/daisy-player.c250
1 files changed, 132 insertions, 118 deletions
diff --git a/src/daisy-player.c b/src/daisy-player.c
index 89476b9..e4bc43a 100644
--- a/src/daisy-player.c
+++ b/src/daisy-player.c
@@ -1,6 +1,6 @@
/* daisy-player
*
- * Copyright (C)2003-2017 J. Lemmens
+ * Copyright (C)2003-2018 J. Lemmens
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -170,7 +170,7 @@ void get_bookmark (misc_t *misc, my_attribute_t *my_attribute,
pause_resume (misc, my_attribute, daisy);
pause_resume (misc, my_attribute, daisy);
view_screen (misc, daisy);
-} // get_bookmark
+} // get_bookmark
void get_next_clips (misc_t *misc, my_attribute_t *my_attribute,
daisy_t *daisy)
@@ -182,7 +182,10 @@ void get_next_clips (misc_t *misc, my_attribute_t *my_attribute,
eof = 1 - get_tag_or_label (misc, my_attribute, misc->reader);
if (strcasecmp (misc->tag, "audio") == 0)
{
- misc->current_audio_file = real_name (misc, my_attribute->src);
+ misc->current_audio_file =
+ malloc (strlen (misc->daisy_mp) + strlen (my_attribute->src) + 5);
+ get_path_name (misc->daisy_mp, convert_URL_name (misc,
+ my_attribute->src), misc->current_audio_file);
get_clips (misc, my_attribute);
return;
} // if
@@ -224,7 +227,7 @@ void get_next_clips (misc_t *misc, my_attribute_t *my_attribute,
snprintf (name, len, "%s/.daisy-player/%s%s",
pw->pw_dir, misc->bookmark_title, get_mcn (misc));
unlink (name);
- _exit (0);
+ _exit (EXIT_FAILURE);
} // if
if (daisy[misc->playing].level <= misc->level)
misc->displaying = misc->current = misc->playing;
@@ -302,7 +305,7 @@ void view_time (misc_t *misc, daisy_t *daisy)
void view_screen (misc_t *misc, daisy_t *daisy)
{
- int i, x, x2;
+ int i, x, x2, hours, minutes, seconds;
float time;
mvwprintw (misc->titlewin, 1, 0,
@@ -321,9 +324,9 @@ void view_screen (misc_t *misc, daisy_t *daisy)
misc->level, misc->depth);
wprintw (misc->titlewin, " ");
time = misc->total_time / misc->speed;
- int hours = time / 3600;
- int minutes = (time - hours * 3600) / 60;
- int seconds = time - (hours * 3600 + minutes * 60);
+ hours = time / 3600;
+ minutes = (time - hours * 3600) / 60;
+ seconds = time - (hours * 3600 + minutes * 60);
mvwprintw (misc->titlewin, 1, 47, " ");
wprintw (misc->titlewin, gettext ("total length: %02d:%02d:%02d"),
hours, minutes,seconds);
@@ -372,10 +375,12 @@ void view_screen (misc_t *misc, daisy_t *daisy)
wrefresh (misc->screenwin);
view_page (misc, daisy);
view_time (misc, daisy);
-} // view_screen
+} // view_screen
void start_playing (misc_t *misc, daisy_t *daisy)
{
+ char tempo_str[15], begin[20], duration[20];
+
if (strcasecmp (misc->tag, "audio") != 0)
return;
if (misc->playing == -1)
@@ -383,28 +388,24 @@ void start_playing (misc_t *misc, daisy_t *daisy)
if (misc->clip_end - misc->clip_begin <= 0)
return;
misc->elapsed_seconds = time (NULL);
+
+ view_page (misc, daisy);
+ lseek (misc->tmp_wav_fd, SEEK_SET, 0);
+ snprintf (begin, 20, "%f", misc->clip_begin);
+ snprintf (duration, 20, "%f", misc->clip_end - misc->clip_begin);
+ madplay (misc->current_audio_file, begin, duration, misc->tmp_wav);
switch (misc->player_pid = fork ())
{
case -1:
failure (misc, "fork ()", errno);
case 0: // child
- break;
+ snprintf (tempo_str, 10, "%lf", misc->speed);
+ playfile (misc, misc->tmp_wav, "wav", misc->pulseaudio_device,
+ "pulseaudio", tempo_str);
+ exit (EXIT_SUCCESS);
default: // parent
return;
} // switch
-
- char tempo_str[15];
- char begin[20], duration[20];
-
- view_page (misc, daisy);
- lseek (misc->tmp_wav_fd, SEEK_SET, 0);
- snprintf (begin, 20, "%f", misc->clip_begin);
- snprintf (duration, 20, "%f", misc->clip_end - misc->clip_begin);
- madplay (misc->current_audio_file, begin, duration, misc->tmp_wav);
- snprintf (tempo_str, 10, "%lf", misc->speed);
- misc->player_pid = setpgrp ();
- playfile (misc, misc->tmp_wav, "wav", misc->sound_dev, "pulseaudio", tempo_str);
- _exit (0);
} // start_playing
void open_clips_file (misc_t *misc, my_attribute_t *my_attribute,
@@ -419,7 +420,7 @@ void open_clips_file (misc_t *misc, my_attribute_t *my_attribute,
e = errno;
snprintf (str, MAX_STR, "htmlParseFile (%s)", clips_file);
- failure (misc, str, e);
+ failure (misc, str, e);
} // if
if (! (misc->reader = xmlReaderWalker (misc->doc)))
{
@@ -431,7 +432,7 @@ void open_clips_file (misc_t *misc, my_attribute_t *my_attribute,
failure (misc, str, e);
} // if
- if (*anchor == 0)
+ if (*anchor == 0)
return;
// skip to anchor
@@ -447,7 +448,7 @@ void open_clips_file (misc_t *misc, my_attribute_t *my_attribute,
void write_wav (misc_t *misc, my_attribute_t *my_attribute,
daisy_t *daisy, char *label)
{
- char *in_file, *out_file, *out_cdr, *complete_cdr, *cmd;
+ char *out_file, *out_cdr, *complete_cdr;
struct passwd *pw;
int old_playing, old_displaying, old_current, old_just_this_item;
char begin[20], duration[20];
@@ -458,7 +459,7 @@ void write_wav (misc_t *misc, my_attribute_t *my_attribute,
sprintf (out_file, "%s/%s.wav", pw->pw_dir, label);
while (access (out_file, R_OK) == 0)
{
- out_file = realloc (out_file, 5);
+ out_file = realloc (out_file, strlen (out_file) + 5);
strcat (out_file, ".wav");
} // while
@@ -481,7 +482,6 @@ void write_wav (misc_t *misc, my_attribute_t *my_attribute,
} while (++misc->lsn_cursor <= daisy[misc->current].last_lsn);
if (misc->par)
paranoia_free (misc->par);
-// The .wav file is not correctly closed; I don't know the solution, sorry.
free (out_file);
kill (pid, SIGQUIT);
return;
@@ -498,7 +498,6 @@ void write_wav (misc_t *misc, my_attribute_t *my_attribute,
complete_cdr = malloc (strlen (misc->tmp_dir) + 20);
sprintf (complete_cdr, "%s/complete.cdr", misc->tmp_dir);
w = open (complete_cdr, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU);
- in_file = malloc (0);
while (1)
{
#define BUF_SIZE 8192
@@ -511,12 +510,17 @@ void write_wav (misc_t *misc, my_attribute_t *my_attribute,
get_next_clips (misc, my_attribute, daisy);
snprintf (begin, 20, "%f", daisy[misc->current].begin);
snprintf (duration, 20, "%f", daisy[misc->current].duration);
- in_file = realloc (in_file,
- strlen (misc->daisy_mp) + strlen (misc->current_audio_file) + 5);
- sprintf (in_file, "%s/%s", misc->daisy_mp, misc->current_audio_file);
- if (access (in_file, R_OK) != 0)
- failure (misc, in_file, errno);
- madplay (in_file, begin, duration, out_cdr);
+ if (access (misc->current_audio_file, R_OK) == -1)
+ {
+ int e;
+
+ e= errno;
+ endwin ();
+ beep ();
+ printf ("%s: %s\n", misc->current_audio_file, strerror (e));
+ _exit (-1);
+ } // if
+ madplay (misc->current_audio_file, begin, duration, out_cdr);
r = open (out_cdr, O_RDONLY);
while ((in = read (r, &buffer, BUF_SIZE)) > 0)
{
@@ -532,15 +536,10 @@ void write_wav (misc_t *misc, my_attribute_t *my_attribute,
misc->current += 1;
} // while
close (w);
-// playfile (misc, complete_cdr, "cdr", out_file, "wav", "1");
- cmd = malloc (strlen (complete_cdr) + strlen (out_file) + 50);
- sprintf (cmd, "sox -t cdr \"%s\" -t wav \"%s\"", complete_cdr, out_file);
- switch (system (cmd));
- free (in_file);
+ playfile (misc, complete_cdr, "cdr", out_file, "wav", "1");
free (out_file);
free (out_cdr);
free (complete_cdr);
- free (cmd);
misc->playing = old_playing;
misc->displaying = old_displaying;
misc->current= old_current;
@@ -550,6 +549,10 @@ void write_wav (misc_t *misc, my_attribute_t *my_attribute,
void pause_resume (misc_t *misc, my_attribute_t *my_attribute, daisy_t *daisy)
{
+ if (misc->playing < 0 && misc->pause_resume_playing < 0)
+ return;
+ if (*misc->pulseaudio_device == 0)
+ select_next_output_device (misc, daisy);
if (misc->playing > -1)
{
misc->pause_resume_playing = misc->playing;
@@ -564,12 +567,10 @@ void pause_resume (misc_t *misc, my_attribute_t *my_attribute, daisy_t *daisy)
misc->lsn_cursor = misc->pause_resume_lsn_cursor;
if (misc->cd_type == CDIO_DISC_MODE_CD_DA)
{
- misc->player_pid = play_track (misc, misc->sound_dev, "pulseaudio",
+ misc->player_pid = play_track (misc, misc->pulseaudio_device, "pulseaudio",
misc->pause_resume_lsn_cursor - 75 * 4);
return;
} // if
- if (misc->playing < 0)
- return;
open_clips_file (misc, my_attribute, daisy[misc->playing].clips_file,
daisy[misc->playing].clips_anchor);
while (1)
@@ -777,7 +778,7 @@ void calculate_times_3 (misc_t *misc, my_attribute_t *my_attribute,
break;
// get misc->clip_begin
if (strcasecmp (misc->tag, "audio") == 0)
- {
+ {
misc->has_audio_tag = 1;
get_clips (misc, my_attribute);
daisy[x].begin = misc->clip_begin;
@@ -805,7 +806,7 @@ void calculate_times_3 (misc_t *misc, my_attribute_t *my_attribute,
daisy[x].duration += misc->clip_end - misc->clip_begin;
} // IF
} // while
- if (x < misc->total_items - 1 && *daisy[x + 1].clips_anchor)
+ if (x < misc->total_items - 1 && *daisy[x + 1].clips_anchor)
if (strcasecmp
(my_attribute->id, daisy[x + 1].clips_anchor) == 0)
break;
@@ -821,7 +822,7 @@ void calculate_times_3 (misc_t *misc, my_attribute_t *my_attribute,
quit_daisy_player (misc, daisy);
printf ("%s\n", gettext (
"This book has no audio. Play this book with eBook-speaker"));
- _exit (0);
+ _exit (EXIT_FAILURE);
} // if
} // calculate_times_3
@@ -854,7 +855,7 @@ void change_level (misc_t *misc, my_attribute_t *my_attribute,
previous_item (misc, daisy);
view_screen (misc, daisy);
wmove (misc->screenwin, daisy[misc->current].y, daisy[misc->current].x);
-} // change_level
+} // change_level
void load_xml (misc_t *misc, my_attribute_t *my_attribute)
{
@@ -868,10 +869,7 @@ void load_xml (misc_t *misc, my_attribute_t *my_attribute)
snprintf (str, MAX_STR - 1, "%s/.daisy-player.xml", pw->pw_dir);
doc = xmlRecoverFile (str);
if (! (reader = xmlReaderWalker (doc)))
- {
- strncpy (misc->sound_dev, "0", MAX_STR - 1);
return;
- } // if
do
{
if (! get_tag_or_label (misc, my_attribute, reader))
@@ -898,7 +896,7 @@ void save_xml (misc_t *misc)
xmlTextWriterStartDocument (writer, NULL, NULL, NULL);
xmlTextWriterStartElement (writer, BAD_CAST "prefs");
xmlTextWriterWriteFormatAttribute
- (writer, BAD_CAST "sound_dev", "%s", misc->sound_dev);
+ (writer, BAD_CAST "pulseaudio_device", "%s", misc->pulseaudio_device);
xmlTextWriterWriteFormatAttribute (writer, BAD_CAST "speed", "%lf",
misc->speed);
xmlTextWriterWriteFormatAttribute
@@ -923,6 +921,11 @@ void quit_daisy_player (misc_t *misc, daisy_t *daisy)
unlink (misc->tmp_wav);
puts ("");
remove_tmp_dir (misc);
+ if (misc->mounted_by_daisy_player == 0)
+ return;
+ snprintf (misc->cmd, MAX_CMD,
+ "udisksctl unmount -b %s --force > /dev/null", misc->cd_dev);
+ system (misc->cmd);
} // quit_daisy_player
void search (misc_t *misc, my_attribute_t *my_attribute, daisy_t *daisy,
@@ -1003,8 +1006,8 @@ void search (misc_t *misc, my_attribute_t *my_attribute, daisy_t *daisy,
if (misc->cd_type == CDIO_DISC_MODE_CD_DA)
{
misc->elapsed_seconds = time (NULL);
- misc->player_pid = play_track (misc, misc->sound_dev, "pulseaudio",
- daisy[misc->current].first_lsn);
+ misc->player_pid = play_track (misc, misc->pulseaudio_device,
+ "pulseaudio", daisy[misc->current].first_lsn);
}
else
open_clips_file (misc, my_attribute, daisy[misc->current].clips_file,
@@ -1074,7 +1077,7 @@ void go_to_time (misc_t *misc, daisy_t *daisy, my_attribute_t *my_attribute)
} // if
if (misc->cd_type == CDIO_DISC_MODE_CD_DA)
{
- misc->player_pid = play_track (misc, misc->sound_dev, "pulseaudio",
+ misc->player_pid = play_track (misc, misc->pulseaudio_device, "pulseaudio",
daisy[misc->current].first_lsn + (secs * 75));
misc->elapsed_seconds = time (NULL) - secs;
misc->prev_id = strdup (misc->current_id);
@@ -1174,6 +1177,8 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
misc->pause_resume_playing = misc->just_this_item = -1;
misc->label_len = 0;
get_bookmark (misc, my_attribute, daisy);
+ if (*misc->pulseaudio_device == 0)
+ select_next_output_device (misc, daisy);
if (misc->cd_type == CDIO_DISC_MODE_CD_DA)
{
for (i = 0; i < misc->total_items; i++)
@@ -1182,8 +1187,8 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
daisy[i].page_number = 0;
} // for
misc->depth = 1;
- misc->player_pid = play_track (misc, misc->sound_dev, "pulseaudio",
- daisy[misc->current].first_lsn + (misc->seconds * 75));
+ misc->player_pid = play_track (misc, misc->pulseaudio_device,
+ "pulseaudio", daisy[misc->current].first_lsn + (misc->seconds * 75));
misc->elapsed_seconds = time (NULL) - misc->seconds;
} // if
view_screen (misc, daisy);
@@ -1195,10 +1200,10 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
quit_daisy_player (misc, daisy);
printf ("%s\n", gettext (
"This book has no audio. Play this book with eBook-speaker"));
- _exit (0);
+ _exit (-1);
} // if
- for (;;)
+ for (;;) // forever
{
switch (wgetch (misc->screenwin))
{
@@ -1219,23 +1224,23 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
len = strlen (wd) + strlen ( PACKAGE) +
strlen (misc->daisy_mp) +
strlen (daisy[misc->current].daisy_mp) +
- strlen (misc->sound_dev) + 100;
+ strlen (misc->pulseaudio_device) + 100;
str = malloc (len);
snprintf (str, len,
"cd \"%s\"; \"%s\" \"%s\"/\"%s\" -d %s",
wd, PACKAGE, misc->daisy_mp,
- daisy[misc->current].daisy_mp, misc->sound_dev);
+ daisy[misc->current].daisy_mp, misc->pulseaudio_device);
switch (system (str));
snprintf (str, len,
"cd \"%s\"; \"%s\" \"%s\" -d %s\n", wd, PACKAGE,
- misc->daisy_mp, misc->sound_dev);
+ misc->daisy_mp, misc->pulseaudio_device);
switch (system (str));
quit_daisy_player (misc, daisy);
_exit (0);
} // if
if (misc->cd_type == CDIO_DISC_MODE_CD_DA)
{
- misc->player_pid = play_track (misc, misc->sound_dev, "pulseaudio",
+ misc->player_pid = play_track (misc, misc->pulseaudio_device, "pulseaudio",
daisy[misc->current].first_lsn);
misc->elapsed_seconds = time (NULL);
break;
@@ -1333,7 +1338,7 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
misc->player_pid = -2;
if (misc->cd_type == CDIO_DISC_MODE_CD_DA)
{
- misc->player_pid = play_track (misc, misc->sound_dev, "pulseaudio",
+ misc->player_pid = play_track (misc, misc->pulseaudio_device, "pulseaudio",
daisy[misc->current].first_lsn);
}
else
@@ -1386,7 +1391,16 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
search (misc, my_attribute, daisy, misc->current - 1, 'N');
break;
case 'o':
- select_next_output_device (misc, my_attribute, daisy);
+ if (misc->playing > -1)
+ {
+ pause_resume (misc, my_attribute, daisy);
+ misc->player_pid = -2;
+ misc->playing = misc->just_this_item = -1;
+ view_screen (misc, daisy);
+ } // if
+ select_next_output_device (misc, daisy);
+ misc->playing = -1;
+ pause_resume (misc, my_attribute, daisy);
break;
case 'p':
put_bookmark (misc);
@@ -1394,12 +1408,13 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
break;
case 'q':
quit_daisy_player (misc, daisy);
- _exit (0);
+ exit (EXIT_SUCCESS);
case 's':
kill_player (misc);
if (misc->cd_type != CDIO_DISC_MODE_CD_DA)
misc->player_pid = -2;
misc->playing = misc->just_this_item = -1;
+ misc->pause_resume_playing = -1;
view_screen (misc, daisy);
wmove (misc->screenwin, daisy[misc->current].y,
daisy[misc->current].x);
@@ -1454,7 +1469,7 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
_exit (0);
} // if
} // if
- misc->player_pid = play_track (misc, misc->sound_dev, "pulseaudio",
+ misc->player_pid = play_track (misc, misc->pulseaudio_device, "pulseaudio",
misc->lsn_cursor);
break;
} // if
@@ -1477,7 +1492,7 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
if (misc->lsn_cursor < daisy[misc->playing].first_lsn)
misc->lsn_cursor = daisy[misc->playing].first_lsn;
} // if
- misc->player_pid = play_track (misc, misc->sound_dev, "pulseaudio",
+ misc->player_pid = play_track (misc, misc->pulseaudio_device, "pulseaudio",
misc->lsn_cursor);
break;
} // if
@@ -1544,26 +1559,20 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
break;
case 'v':
case '1':
- get_volume (misc);
- if (misc->volume <= misc->min_vol)
+ if (fork () == 0)
{
- beep ();
- break;
+ pactl (misc->pulseaudio_device, "-5%");
+ _exit (0);
} // if
- misc->volume -= 1;
- set_volume (misc);
break;
case 'V':
case '7':
- get_volume (misc);
- if (misc->volume >= misc->max_vol)
+ if (fork () == 0)
{
- beep ();
- break;
+ pactl (misc->pulseaudio_device, "+5%");
+ _exit (0);
} // if
- misc->volume += 1;
- set_volume (misc);
- break;
+ break;
default:
beep ();
break;
@@ -1642,11 +1651,12 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
void usage (int e)
{
printf (gettext ("Daisy-player - Version %s %s"), PACKAGE_VERSION, "\n");
- puts ("(C)2003-2017 J. Lemmens\n");
+ puts ("(C)2003-2018 J. Lemmens\n");
printf (gettext
("Usage: %s [directory_with_a_Daisy-structure] | [Daisy_book_archive]"),
PACKAGE);
- printf ("\n%s ", gettext ("[-c cdrom_device] [-d pulseaudio_sound_device]"));
+ printf ("\n%s ",
+ gettext ("[-c cdrom_device] [-d pulseaudio_sound_device]"));
printf ("[-h] [-i] [-n | -y]\n");
fflush (stdout);
_exit (e);
@@ -1669,8 +1679,7 @@ char *get_mount_point (misc_t *misc)
break;
} // while
fclose (proc);
- if (strcasestr (str, "iso9660") ||
- strcasestr (str, "udf"))
+ if (strcasestr (str, "iso9660") || strcasestr (str, "udf"))
{
misc->daisy_mp = strdup (strchr (str, ' ') + 1);
*strchr (misc->daisy_mp, ' ') = 0;
@@ -1712,8 +1721,8 @@ void handle_discinfo (misc_t *misc, my_attribute_t *my_attribute,
} // if (strcasecmp (misc->tag, "title") == 0)
if (strcasecmp (misc->tag, "a") == 0)
{
- strncpy (daisy[misc->current].filename, my_attribute->href,
- MAX_STR - 1);
+ get_path_name (misc->daisy_mp, my_attribute->href,
+ daisy[misc->current].filename);
htmlDocPtr doc =
htmlParseFile (daisy[misc->current].filename, "UTF-8");
if (! (ncc = xmlReaderWalker (doc)))
@@ -1742,7 +1751,7 @@ void handle_discinfo (misc_t *misc, my_attribute_t *my_attribute,
break;
} while (! *misc->label);
*daisy[misc->current].label = 0;
- strncpy (daisy[misc->current].daisy_mp,
+ strncpy (daisy[misc->current].daisy_mp,
dirname (daisy[misc->current].filename), MAX_STR - 1);
daisy[misc->current].level = 1;
daisy[misc->current].x = 0;
@@ -1768,6 +1777,7 @@ void handle_discinfo (misc_t *misc, my_attribute_t *my_attribute,
int main (int argc, char *argv[])
{
+
int opt;
char str[MAX_STR], DISCINFO_HTML[MAX_STR], *start_wd;
char *c_opt, *d_opt, cddb_opt;
@@ -1776,6 +1786,7 @@ int main (int argc, char *argv[])
daisy_t *daisy;
struct sigaction usr_action;
+ misc.main_pid = getpid ();
daisy = NULL;
misc.tmp_dir = misc.label = NULL;
misc.speed = 1;
@@ -1790,16 +1801,15 @@ int main (int argc, char *argv[])
*misc.daisy_title = 0;
*misc.ncc_html = 0;
strncpy (misc.cd_dev, "/dev/sr0", MAX_STR - 1);
+ sigfillset (&usr_action.sa_mask);
usr_action.sa_handler = player_ended;
usr_action.sa_flags = 0;
sigaction (SIGCHLD, &usr_action, NULL);
*misc.xmlversion = 0;
-// If option '-h' exit before load_xml ()
make_tmp_dir (&misc);
- if (access ("/usr/bin/sox", R_OK) != 0)
- failure (&misc, "daisy-player needs the sox package.", errno);
- strncpy (misc.sound_dev, "0", MAX_STR - 1);
+ misc.pulseaudio_device = strdup ("");
misc.cddb_flag = 'y';
+ misc.pause_resume_id = strdup ("");
if (! setlocale (LC_ALL, ""))
failure (&misc, "setlocale ()", errno);
if (! setlocale (LC_NUMERIC, "C"))
@@ -1821,8 +1831,8 @@ int main (int argc, char *argv[])
c_opt = strdup (misc.cd_dev);
break;
case 'd':
- strncpy (misc.sound_dev, optarg, 15);
- d_opt = strdup (misc.sound_dev);
+ misc.pulseaudio_device = strdup (optarg);
+ d_opt = strdup (misc.pulseaudio_device);
break;
case 'h':
free (start_wd);
@@ -1857,7 +1867,7 @@ int main (int argc, char *argv[])
misc.use_OPF = 1;
break;
default:
- beep ();
+ beep ();
remove_tmp_dir (&misc);
usage (1);
} // switch
@@ -1867,7 +1877,7 @@ int main (int argc, char *argv[])
if (c_opt)
strncpy (misc.cd_dev, c_opt, MAX_STR - 1);
if (d_opt)
- strncpy (misc.sound_dev, d_opt, MAX_STR - 1);
+ misc.pulseaudio_device = strdup (d_opt);
if (cddb_opt)
misc.cddb_flag = cddb_opt;
initscr ();
@@ -1876,14 +1886,14 @@ int main (int argc, char *argv[])
failure (&misc, "No curses", errno);
fclose (stderr);
getmaxyx (misc.screenwin, misc.max_y, misc.max_x);
- printw ("(C)2003-2017 J. Lemmens\n");
+ printw ("(C)2003-2018 J. Lemmens\n");
printw (gettext ("Daisy-player - Version %s %s"), PACKAGE_VERSION, "");
printw ("\n");
printw (gettext ("A parser to play Daisy CD's with Linux"));
printw ("\n");
printw (gettext ("Scanning for a Daisy CD..."));
refresh ();
- misc.total_pages = 0;
+ misc.total_pages = misc.mounted_by_daisy_player = 0;
if (argv[optind])
// if there is an argument
@@ -1897,7 +1907,7 @@ int main (int argc, char *argv[])
endwin ();
printf (gettext ("Daisy-player - Version %s %s"),
PACKAGE_VERSION, "\n");
- puts ("(C)2003-2017 J. Lemmens");
+ puts ("(C)2003-2018 J. Lemmens");
beep ();
remove_tmp_dir (&misc);
printf ("%s: %s\n", argv[optind], strerror (e));
@@ -2001,7 +2011,7 @@ int main (int argc, char *argv[])
endwin ();
printf (gettext ("Daisy-player - Version %s %s"),
PACKAGE_VERSION, "\n");
- puts ("(C)2003-2017 J. Lemmens");
+ puts ("(C)2003-2018 J. Lemmens");
beep ();
remove_tmp_dir (&misc);
snprintf (misc.str, MAX_STR, gettext ("Cannot read %s"),
@@ -2017,7 +2027,7 @@ int main (int argc, char *argv[])
endwin ();
printf (gettext ("Daisy-player - Version %s %s"),
PACKAGE_VERSION, "\n");
- puts ("(C)2003-2017 J. Lemmens");
+ puts ("(C)2003-2018 J. Lemmens");
beep ();
remove_tmp_dir (&misc);
printf ("\n%s is not a cd device\n", misc.cd_dev);
@@ -2070,23 +2080,24 @@ int main (int argc, char *argv[])
case CDIO_DISC_MODE_CD_MIXED:
{
endwin ();
- do
-// if not found a mounted cd, try to mount one
+ if (get_mount_point (&misc) == NULL)
{
- if (time (NULL) - start >= 10)
+// if not found a mounted cd, try to mount one
+ do
{
- endwin ();
- printf ("%s\n", gettext ("No Daisy CD in drive."));
- remove_tmp_dir (&misc);
- _exit (0);
- } // if
- snprintf (misc.cmd, MAX_CMD,
+ if (time (NULL) - start >= 10)
+ {
+ endwin ();
+ printf ("%s\n", gettext ("No Daisy CD in drive."));
+ remove_tmp_dir (&misc);
+ _exit (0);
+ } // if
+ snprintf (misc.cmd, MAX_CMD,
"udisksctl mount -b %s > /dev/null", misc.cd_dev);
- switch (system (misc.cmd));
- get_mount_point (&misc);
- } while (! get_mount_point (&misc));
- misc.titlewin = newwin (2, 80, 0, 0);
- misc.screenwin = newwin (23, 80, 2, 0);
+ switch (system (misc.cmd));
+ misc.mounted_by_daisy_player = 1;
+ } while (get_mount_point (&misc) == NULL);
+ } // if
break;
} // TRACK_COUNT_DATA"
case CDIO_DISC_MODE_CD_DA: /**< CD-DA */
@@ -2116,7 +2127,7 @@ int main (int argc, char *argv[])
} while (misc.cd_type == -1);
} // if use misc.cd_dev
keypad (misc.screenwin, TRUE);
- meta (misc.screenwin, TRUE);
+ meta (misc.screenwin, TRUE);
nonl ();
noecho ();
misc.player_pid = -2;
@@ -2223,7 +2234,7 @@ int main (int argc, char *argv[])
wattron (misc.titlewin, A_BOLD);
snprintf (str, MAX_STR - 1, gettext (
- "Daisy-player - Version %s - (C)2017 J. Lemmens"), PACKAGE_VERSION);
+ "Daisy-player - Version %s - (C)2018 J. Lemmens"), PACKAGE_VERSION);
mvwprintw (misc.titlewin, 0, 0, str);
wrefresh (misc.titlewin);
@@ -2238,10 +2249,13 @@ int main (int argc, char *argv[])
wprintw (misc.titlewin, "----------------------------------------");
mvwprintw (misc.titlewin, 1, 0, "%s ", gettext ("Press 'h' for help"));
misc.level = 1;
- *misc.search_str = 0;
+ misc.search_str = strdup ("");
snprintf (misc.tmp_wav, MAX_STR, "%s/daisy-player.wav", misc.tmp_dir);
if ((misc.tmp_wav_fd = mkstemp (misc.tmp_wav)) == 01)
failure (&misc, "mkstemp ()", errno);
+ misc.pause_resume_playing = -1;
+ if (misc.ignore_bookmark)
+ select_next_output_device (&misc, daisy);
browse (&misc, &my_attribute, daisy, start_wd);
return 0;
} // main