~ubuntu-branches/ubuntu/utopic/dradio/utopic

« back to all changes in this revision

Viewing changes to src/dradio.c

  • Committer: Bazaar Package Importer
  • Author(s): Alejandro Garrido Mota
  • Date: 2009-10-12 19:48:55 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20091012194855-v8z7tmaqlkh3spv6
Tags: 3.6-1
New upstream release 

Show diffs side-by-side

added added

removed removed

Lines of Context:
100
100
      exit(EXIT_FAILURE);
101
101
   }
102
102
 
103
 
   update_xterm_title(&main_win);
 
103
   update_xterm_title(&main_win, NULL);
104
104
 
105
105
   mplayer_outlog = open_outlog();
106
106
   mplayer_errlog = open_errlog();
120
120
 
121
121
   main_win_create(&main_win);
122
122
 
123
 
   /*doupdate();*/
124
 
 
125
123
 
126
124
   /* watch stdin (fd 0) for user input */
127
125
   FD_ZERO(&watchset);
184
182
      /* handle pselect timeout */
185
183
      if (pselect_retval == 0)
186
184
      {
187
 
         if (!mplayer->ispaused && main_win.cur_rss_item != NULL)
 
185
         if (main_win.visible)
188
186
         {
189
 
            mplayer_get_time_length(mplayer);
190
 
            mplayer_get_time_pos(mplayer);
 
187
            if (!mplayer->ispaused && main_win.cur_rss_item != NULL)
 
188
            {
 
189
               mplayer_get_time_length(mplayer);
 
190
               mplayer_get_time_pos(mplayer);
 
191
            }
 
192
 
 
193
            /* query pause status */
 
194
            mplayer_ispaused(mplayer);
191
195
         }
 
196
 
192
197
         tv_p = NULL;
193
198
      }
194
199
 
216
221
      /* ready mplayer stdout, unless pselect was interrupted */
217
222
      if (FD_ISSET(fileno(mplayer->out), &inset) && pselect_retval != -1)
218
223
      {
219
 
         if (mplayer_handle_stdout(main_win.stat_win, mplayer_outlog) < 0)
 
224
         if (mplayer_handle_stdout(&main_win, mplayer_outlog) < 0)
220
225
         {
221
226
            /* something is amiss, do not read again */
222
227
            FD_CLR(fileno(mplayer->out), &watchset);
237
242
      {
238
243
         if (!mplayer->ispaused && main_win.cur_rss_item != NULL)
239
244
         {
240
 
            /* set new timeout */
 
245
            /* set .1 sec new timeout */
241
246
            tv.tv_sec = 0;
242
247
            tv.tv_nsec = 100000000;
243
248
            tv_p = &tv;
244
249
         }
 
250
         else
 
251
         {
 
252
            /* set new .5 sec timeout primarily to update pause status */
 
253
            tv.tv_sec = 0;
 
254
            tv.tv_nsec = 500000000;
 
255
            tv_p = &tv;
 
256
         }
245
257
 
246
258
         wnoutrefresh(main_win.menu_win);
247
259
         wnoutrefresh(main_win.stat_win);
269
281
   fclose(mplayer_outlog);
270
282
   fclose(mplayer_errlog);
271
283
 
 
284
   update_xterm_title(&main_win, NULL);
 
285
 
272
286
   return exit_status;
273
287
}
274
288
 
350
364
         else
351
365
            mplayer_loadfile(mplayer, (char *)cur_conf_item->src);
352
366
 
353
 
         update_xterm_title(w);
 
367
         update_xterm_title(w, w->cur_item);
354
368
         break;
355
369
       case '<':          /* (podcast) previous in rss */
356
370
         if (w->cur_rss_item && w->cur_rss_item->prev)
386
400
         break;
387
401
       case 'p':          /* pause */
388
402
         mplayer_pause(mplayer);
389
 
         cur_item_name_update(w);
390
403
         break;
391
404
       case '*':          /* volume up */
392
405
         cur_item_name_update(w);
426
439
 
427
440
/** handle mplayer stdout on pselect interrupt */
428
441
 
429
 
int mplayer_handle_stdout(WINDOW *stat_win, FILE *mplayer_outlog)
 
442
int mplayer_handle_stdout(MAIN_WIN *w, FILE *mplayer_outlog)
430
443
{
431
444
   int rc;
432
445
   char mplayer_outbuf[BUFSIZ];
433
446
 
 
447
   WINDOW *stat_win = w->stat_win;
 
448
 
434
449
   double ans_length = -1;
435
450
   double ans_time_position = -1;
436
451
 
437
452
   mplayer_outbuf[0] = 0;
438
453
 
 
454
 
439
455
   /* If a read() is interrupted by a signal before it reads any
440
456
    * data, it shall return -1 with errno set to [EINTR].
441
457
    *
465
481
   else
466
482
   {
467
483
      double f;
468
 
      char *s;
 
484
      char *s, ans_paused[4];
469
485
 
470
486
      mplayer_outbuf[rc] = '\0';
471
487
 
472
488
      s = mplayer_outbuf;
473
489
      while ( (s = strtok(s, "\n")) != NULL)
474
490
      {
475
 
         if (sscanf(s, "ANS_LENGTH=%lf", &ans_length) == 1)
 
491
         if (sscanf(s, "ANS_pause=%3s", ans_paused) == 1)
 
492
         {
 
493
            /* mplayer->ispaused should not be set anywhere else, otherwise
 
494
               the flag may get out of sync with mplayer */
 
495
            int old_ispaused = mplayer->ispaused;
 
496
 
 
497
            if (strcmp(ans_paused, "yes") == 0) 
 
498
               mplayer->ispaused = 1;
 
499
            else
 
500
               mplayer->ispaused = 0;
 
501
 
 
502
            if (old_ispaused != mplayer->ispaused)
 
503
               cur_item_name_update(w);
 
504
         }
 
505
         else if (sscanf(s, "ANS_LENGTH=%lf", &ans_length) == 1)
476
506
         {
477
507
            seconds_to_string(ans_length, mplayer->ans_length, sizeof(mplayer->ans_length));
478
508
         }