summaryrefslogtreecommitdiff
path: root/mugglei.c
blob: 1e3d059e2d2ea8c791485c6984869012e33dcebc (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
/*!
 * \file mugglei.c
 * \brief implement a small utility for importing files
 *
 * \author  Lars von Wedel
 */

// #define VERBOSE

#include <unistd.h>
#include <string>

#include <stdlib.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <getopt.h>
#include <stdarg.h>

#include <tag.h>
#include <mpegfile.h>
#include <flacfile.h>
#include <id3v2tag.h>
#include <fileref.h>

#include "mg_tools.h"
#include "mg_setup.h"
#include "mg_db.h"


using namespace std;

int SysLogLevel = 1;

void showmessage(int duration,const char *msg,...)
{
	va_list ap;
	va_start(ap,msg);
	vfprintf(stderr,msg,ap);
	fprintf(stderr,"\n");
	va_end(ap);
}

void showimportcount(unsigned int importcount,bool final=false)
{
	if (final)
		mgDebug(1,"Imported %d tracks",importcount);
}

bool
create_question()
{
    return the_setup.CreateMode;
}

void
import()
{
}

const char *I18nTranslate(const char *s,const char *Plugin)
{
	return s;
}

bool
path_within_tld()
{
	char path[5000];
	if (!getcwd(path,4999))
	{
		std::cout << "Path too long" << std::endl;
		exit (1);
	}
  	int tldlen = strlen(the_setup.ToplevelDir);
	strcat(path,"/");
	int pathlen = strlen(path);
	if (pathlen<tldlen)
		return false;
  	return !strncmp(path,the_setup.ToplevelDir,tldlen);
}

int main( int argc, char *argv[] )
{
	the_setup.SetMugglei();
	mgSetDebugLevel(1);
      
  if( argc < 2 )
    { // we need at least a filename!
      std::cout << "mugglei -- import helper for Muggle VDR plugin" << std::endl;
      std::cout << "(C) Lars von Wedel" << std::endl;
      std::cout << "This is free software; see the source for copying conditions." << std::endl;
      std::cout << "" << std::endl;
      std::cout << "Usage: mugglei [OPTION]... [FILE]..." << std::endl;
      std::cout << "" << std::endl;
      std::cout << "  all FILE arguments will be imported. If they are directories, their content is imported"<< std::endl;
      std::cout << "" << std::endl;
      std::cout << "Only files ending in .flac, .mp3, .ogg (ignoring case) will be imported" << std::endl;
      std::cout << "" << std::endl;
      std::cout << "Options:" << std::endl;
      std::cout << the_setup.HelpText();

      exit( 2 );
    }

  the_setup.ProcessArguments(argc,argv);

  if (!path_within_tld())
  {
      std::cout << "you should be in " << the_setup.ToplevelDir
	      << " or below" << std::endl;
      exit( 2 );
  }
  if (optind<argc)
  {
  	mgDb *sync = GenerateDB();
	sync->Sync(argv+optind);
  	delete sync;
	delete DbServer;
  }
  return 0;
}