summaryrefslogtreecommitdiff
path: root/vdr_setup.c
blob: 093cf98e6a396c599aff019c317918f8753e7c8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*!
 * \file vdr_setup.c
 * \brief A setup class for a VDR media plugin (muggle)
 *
 * \version $Revision: 1.3 $
 * \date    $Date$
 * \author  Ralf Klueber, Lars von Wedel, Andreas Kellner
 * \author  Responsible author: $Author$
 *
 * $Id$
 *
 * Partially adapted from
 * MP3/MPlayer plugin to VDR (C++)
 * (C) 2001,2002 Stefan Huelswitt <huels@iname.com>
 */

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <cstring>

#include "vdr_setup.h"
#include "i18n.h"

mgSetup the_setup;

char *readline(FILE *f);
std::string GdFindFile( std::string mp3file, std::string ToplevelDir );

// --- mgMenuSetup -----------------------------------------------------------

mgMenuSetup::mgMenuSetup ()
{
    m_data = the_setup;

    SetSection (tr ("Muggle"));

    Add (new
        cMenuEditBoolItem (tr ("Setup.Muggle$Initial loop mode"),
        &m_data.InitLoopMode));
    Add (new
        cMenuEditBoolItem (tr ("Setup.Muggle$Initial shuffle mode"),
        &m_data.InitShuffleMode));
    Add (new
        cMenuEditBoolItem (tr ("Setup.Muggle$Audio mode"), &m_data.AudioMode,
        tr ("Round"), tr ("Dither")));
    Add (new
        cMenuEditBoolItem (tr ("Setup.Muggle$Use 48kHz mode only"),
        &m_data.Only48kHz));
    Add (new
        cMenuEditIntItem (tr ("Setup.Muggle$Display mode"),
        &m_data.DisplayMode, 1, 3));
    Add (new
        cMenuEditBoolItem (tr ("Setup.Muggle$Background mode"),
        &m_data.BackgrMode, tr ("Black"), tr ("Live")));
    Add (new
        cMenuEditIntItem (tr ("Setup.Muggle$Normalizer level"),
        &m_data.TargetLevel, 0, MAX_TARGET_LEVEL));
    Add (new
        cMenuEditIntItem (tr ("Setup.Muggle$Limiter level"),
        &m_data.LimiterLevel, MIN_LIMITER_LEVEL, 100));
}


void
mgMenuSetup::Store (void)
{
    the_setup = m_data;

    SetupStore ("InitLoopMode", the_setup.InitLoopMode);
    SetupStore ("InitShuffleMode", the_setup.InitShuffleMode);
    SetupStore ("AudioMode", the_setup.AudioMode);
    SetupStore ("DisplayMode", the_setup.DisplayMode);
    SetupStore ("BackgrMode", the_setup.BackgrMode);
    SetupStore ("TargetLevel", the_setup.TargetLevel);
    SetupStore ("LimiterLevel", the_setup.LimiterLevel);
    SetupStore ("Only48kHz", the_setup.Only48kHz);
}


// --- mgSetup ---------------------------------------------------------------

mgSetup::mgSetup ()
{
    InitLoopMode = 0;
    InitShuffleMode = 0;
    AudioMode = 1;
    DisplayMode = 3;
    BackgrMode = 1;
    TargetLevel = DEFAULT_TARGET_LEVEL;
    LimiterLevel = DEFAULT_LIMITER_LEVEL;
    Only48kHz = 0;
    ToplevelDir = "/mnt/music/";
}

std::string
mgSetup::getFilename( std::string basename )
{
  if( GdCompatibility )
    {
      return GdFindFile( basename, std::string( ToplevelDir ) );
    }
  else
    {
      return string( ToplevelDir ) + basename;
    }
}

#define MAXPARSEBUFFER 1024

char *readline(FILE *f)
{
  static char buffer[MAXPARSEBUFFER];
  if (fgets(buffer, sizeof(buffer), f) > 0) 
    {
      int l = strlen(buffer) - 1;
      if (l >= 0 && buffer[l] == '\n')
        buffer[l] = 0;
      return buffer;
    }
  return NULL;
}

#define FINDCMD      "cd '%s' && find -follow -name '%s' 2> /dev/null"

std::string GdFindFile( std::string mp3file, std::string tld )
{
  std::string fullname = "";
  char *cmd = NULL;
  asprintf( &cmd, FINDCMD, ToplevelDir.c_str(), mp3file.c_str() );
  FILE *p = popen( cmd, "r" );
  if (p) 
    {
      char *s;
      while( (s = readline(p) ) != NULL) 
	{
	  // printf( "Found: %s", s );
	  fullname = std::string( tld ) + std::string( s );
	}
      pclose(p);
    }

  free( cmd );

  return fullname;
}