diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-10-07 22:09:32 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-10-07 22:09:32 +0200 |
commit | a302a0c94bc737d89f07c17c930014150e8d16f7 (patch) | |
tree | 8d80c2edeaf39045b9534452bb597e5e17d0bc0b /src/daisy-player.c | |
parent | ad0259f517603f8961cd7a61c49df865320ee387 (diff) |
New upstream version 11.6.1.1
Diffstat (limited to 'src/daisy-player.c')
-rw-r--r-- | src/daisy-player.c | 250 |
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 |