summaryrefslogtreecommitdiff
path: root/mg_setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'mg_setup.c')
-rw-r--r--mg_setup.c182
1 files changed, 180 insertions, 2 deletions
diff --git a/mg_setup.c b/mg_setup.c
index a1ffcd4..3afc30d 100644
--- a/mg_setup.c
+++ b/mg_setup.c
@@ -16,18 +16,24 @@
#include "mg_setup.h"
+#include "mg_tools.h"
+#include "mg_db.h"
+#include <stdio.h>
#include <string>
+#include <getopt.h>
+#include <tools.h>
mgSetup the_setup;
mgSetup::mgSetup ()
{
+ m_mugglei=false;
InitLoopMode = 0;
InitShuffleMode = 0;
AudioMode = 1;
DisplayMode = 3;
- BackgrMode = 1;
+ BackgrMode = 2;
TargetLevel = DEFAULT_TARGET_LEVEL;
LimiterLevel = DEFAULT_LIMITER_LEVEL;
Only48kHz = 0;
@@ -38,9 +44,26 @@ mgSetup::mgSetup ()
DbName = strdup ("GiantDisc");
DbUser = 0;
DbPass = 0;
+ asprintf(&DbDatadir,"%s/.muggle",getenv("HOME"));
ToplevelDir = strdup("/mnt/music/");
-
+ CreateMode = false;
DeleteStaleReferences = false;
+
+ // stuff related to cover image display
+ ImageCacheDir = strdup( "/tmp" );
+ UseDeviceStillPicture = true;
+}
+
+bool
+mgSetup::IsMugglei() const
+{
+ return m_mugglei;
+}
+
+void
+mgSetup::SetMugglei()
+{
+ m_mugglei = true;
}
mgSetup::~mgSetup ()
@@ -50,7 +73,9 @@ mgSetup::~mgSetup ()
free(DbName);
free(DbUser);
free(DbPass);
+ free(DbDatadir);
free(ToplevelDir);
+ free(ImageCacheDir);
}
bool
@@ -59,3 +84,156 @@ mgSetup::NoHost() const
return !DbHost || strlen(DbHost)==0;
}
+bool mgSetup::ProcessArguments (int argc, char *argv[])
+{
+ mgSetDebugLevel (1);
+ char b[1000];
+ sprintf(b,"mgSetup::ProcessArgs ");
+ for (int i=1;i<argc;i++)
+ {
+ if (strlen(b)+strlen(argv[i]+2)>1000) break;;
+ strcat(b," ");
+ strcat(b,argv[i]);
+ }
+ mgDebug(1,b);
+
+ struct option long_options[50];
+ char short_options[100];
+ memset(short_options,0,sizeof(short_options));
+ memset(long_options,0,sizeof(long_options));
+ static struct option all_options[] =
+ {
+ {"host", required_argument, 0, 'h'},
+ {"socket", required_argument, 0, 's'},
+ {"port", required_argument, 0, 'p'},
+ {"user", required_argument, 0, 'u'},
+ {"password", required_argument, 0, 'w'},
+ {"name", required_argument, 0, 'n'},
+ {"datadir", required_argument, 0, 'd'},
+ {"toplevel", required_argument, 0, 't'},
+ {"verbose", required_argument, 0, 'v'},
+ {"create", no_argument, 0, 'c'},
+ {"delete", no_argument, 0, 'z'},
+ {0,0,0}
+ };
+ char wanted_opts[50];
+ strcpy(wanted_opts,"ndtv");
+ if (IsMugglei())
+ strcat(wanted_opts,"cz");
+ mgDb* db = GenerateDB();
+ strcat(wanted_opts,db->Options());
+ delete db;
+ char *p = wanted_opts;
+ char *s = short_options;
+ int li = 0;
+ while (*p)
+ {
+ for (unsigned int idx = 0; all_options[idx].name;idx++)
+ {
+ if (*p==all_options[idx].val)
+ {
+ *s++ = *p;
+ if (all_options[idx].has_arg==required_argument)
+ *s++ = ':';
+ long_options[li++]=all_options[idx];
+ break;
+ }
+ }
+ p++;
+ }
+ int c, option_index = 0;
+ while ((c = getopt_long(argc, argv, short_options,long_options,&option_index)) != -1)
+ {
+ switch (c)
+ {
+ case 'h':
+ {
+ free(DbHost);
+ DbHost = strdup (optarg);
+ }
+ break;
+ case 's':
+ {
+ free(DbSocket);
+ DbSocket = strdup(optarg);
+ }
+ break;
+ case 'p':
+ {
+ DbPort = atoi (optarg);
+ }
+ break;
+ case 'u':
+ {
+ free(DbUser);
+ DbUser = strdup(optarg);
+ }
+ break;
+ case 'w':
+ {
+ free(DbPass);
+ DbPass = strdup(optarg);
+ }
+ break;
+ case 'n':
+ {
+ free(DbName);
+ DbName = strdup(optarg);
+ }
+ break;
+ case 'd':
+ {
+ free(DbDatadir);
+ DbDatadir = strdup(optarg);
+ }
+ break;
+ case 'v':
+ {
+ mgSetDebugLevel (atol(optarg));
+ }
+ break;
+ case 't':
+ {
+ free(ToplevelDir);
+ if (optarg[strlen (optarg) - 1] != '/')
+ {
+ std::string res = std::string (optarg) + "/";
+ ToplevelDir = strdup (res.c_str ());
+ }
+ else
+ ToplevelDir = strdup(optarg);
+ }
+ break;
+ case 'z':
+ {
+ DeleteStaleReferences = true;
+ }
+ break;
+ case 'c':
+ {
+ CreateMode = true;
+ }
+ break;
+ }
+ }
+ return true;
+}
+
+const char*
+mgSetup::HelpText()
+{
+ static char buf[2000];
+ strcpy(buf,
+ " -n NNNN, --name=NNNN specify database name (default is GiantDisc)\n"
+ " -t TTTT, --toplevel=TTTT specify toplevel directory for music (default is /mnt/music)\n"
+ " -d DIRN, --datadir=DIRN specify directory for embedded sql data (default is $HOME/.muggle)\n"
+ " -v, --verbose specify debug level. The higher the more. Default is 1\n");
+ if (IsMugglei())
+ strcat(buf,
+ " -z --delete scan all data base entries and delete entries if their file is not found\n"
+ " -c --create delete the entire data base and create a new one\n");
+ mgDb* db = GenerateDB();
+ strcat(buf,db->HelpText());
+ delete db;
+ return buf;
+}