All pastes #587001 Raw Edit

mangled strings

public text v1 · immutable
#587001 ·published 2007-06-24 05:52 UTC
rendered paste body
#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <sstream>
#include <dirent.h>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include "lamefuncs.h"
#include "opts.h"

using namespace std;

int main(int argc, char **argv)
{
    int preIdent;
	int ident=1;  //this variable sets the filname format in readtag() ie [ album - artist - track - title.mp3 ] etc.
    string preset, presetStr;
    bool deleteFlac = false;
    bool silent = false;
    parseCmdLn (argc, argv, preset, preIdent, ident, deleteFlac, silent);
    if(silent) cout << "\nencoding please wait...\n";
	struct dirent *direct;
	DIR *flacdir = opendir(".");
	if(flacdir != NULL) {
	while((direct = readdir(flacdir)) != NULL) {
		if(strstr(direct->d_name, ".flac")) {
			string file = (direct->d_name);

//start tagcode
	string mp3name;
	string album;
	string artist;
	string title;
	string genre;
	string date;
	//Start of code to read tags from the flac file.
	int trcknbr; //Track number to be converted to int from string using sstream.
	string tracknumber;
	string systrMeta = "metaflac --export-tags-to=metadata --no-utf8-convert \"" + file + "\"";
	system(systrMeta.c_str());
	fstream meta;
 	meta.open("metadata", ios::in | ios::binary);
	if (meta.is_open()) {
			while(! meta.eof() ) {
			string testAlb = "album=";  string testAlbUc = "ALBUM="; string testAlbUc1 = "Album=";
			string testArt = "artist="; string testArtUc = "ARTIST="; string testArtUc1 = "Artist=";
			string testTitl = "title="; string testTitlUc = "TITLE="; string testTitlUc1 = "Title=";
			string testGen = "genre=";  string testGenUc = "GENRE="; string testGenUc1 = "Genre=";
			string testDate = "date=";  string testDateUc = "DATE="; string testDateUc1 = "Date=";
			string testTrack = "tracknumber=";  string testTrackUc = "TRACKNUMBER=";
			string testTrackUc1 = "TrackNumber="; string testTrackUc2 = "Tracknumber=";
			string line; // String to hold lines in metadata.
			getline(meta, line);
			static int i;
			for(i=0; i<line.length(); i++)
			if(strchr("\\/<>*\?\"|:", line[i])) line[i]=',';
			if(!(line.find(testAlb, 0)==string::npos) || !(line.find(testAlbUc, 0)==string::npos) ||
				!(line.find(testAlbUc1, 0)==string::npos)) {
				album = line.substr (6,(line.length()-6));
				}
			else if(!(line.find(testArt, 0)==string::npos) || !(line.find(testArtUc, 0)==string::npos) ||
				!(line.find(testArtUc1, 0)==string::npos)) {
				artist = line.substr (7,(line.length()-7));
				}
			else if(!(line.find(testTitl, 0)==string::npos) || !(line.find(testTitlUc, 0)==string::npos) ||
				!(line.find(testTitlUc1, 0)==string::npos)) {
				title = line.substr (6,(line.length()-6));
				}
			else if(!(line.find(testGen, 0)==string::npos) || !(line.find(testGenUc, 0)==string::npos) ||
				!(line.find(testGenUc1, 0)==string::npos)) {
				genre = line.substr (6,(line.length()-6));
				}
			else if(!(line.find(testDate, 0)==string::npos) || !(line.find(testDateUc, 0)==string::npos) ||
				!(line.find(testDateUc1, 0)==string::npos)) {
				date = line.substr (5,(line.length()-5));
				}
			else if(!(line.find(testTrack, 0)==string::npos) || !(line.find(testTrackUc, 0)==string::npos)
				|| !(line.find(testTrackUc1, 0)==string::npos) || !(line.find(testTrackUc2, 0)==string::npos)) {
				tracknumber = line.substr (12,(line.length()-12));
				}
			else continue;
			}
		}
	meta.close();
	unlink("metadata");

  stringstream (tracknumber) >> trcknbr;
  stringstream strm;
  strm << trcknbr;
  string track;
  string str(strm.str());
   if(trcknbr < 10) track = "0" + str;
  else track = str;

	string noTagStr = file.substr(0, (file.length()-5)) + ".mp3";
	if(ident==1) {
		 if(!title.empty() && !tracknumber.empty()) mp3name = track + " - " + title + ".mp3";
		else mp3name = noTagStr;
		}
	else if(ident==2) {
		 if(!title.empty() && !artist.empty()) mp3name = artist + " - " + title + ".mp3";
		else mp3name = noTagStr;
		}
	else if(ident==3) {
		 if(!title.empty() && !tracknumber.empty() && !album.empty() && !artist.empty())
		 mp3name = artist + " - " + album + " - " + track + " - " + title + ".mp3";
		else mp3name = noTagStr;
		}
	else mp3name = noTagStr;
	//End of code reading tags from flac file.
    //cout << mp3name << endl;
	//Make lame string
	int i=0;
    if(preset.empty()) preset = "-h ";
    if(silent) presetStr = "lame --silent ";
    else presetStr = "lame ";
    presetStr.append(preset);
    char titleC[]="", genreC, trackC[3]="", mp3nameC[100]="";
    strcat(mp3nameC, mp3name.c_str());
    mp3nameC[strlen(mp3nameC)-1] = '\0';
    //strncat(trackC, track.c_str(), 2);
    //strcat(titleC, title.c_str());
    //trackC[strlen(trackC) - strlen(titleC)] = '\0';
    titleC[strlen(titleC) - 1] = '\0';
    if(!silent) {
	cout << "\n****************************************************************" << endl;
	cout << "File: " << file << endl;
	cout << "Artist:\t\t " << artist << endl;
	cout << "Track:\t\t " << track << endl;
	cout << "Album:\t\t " << album << endl;
	cout << "Title:\t\t " << title << endl;
	cout << "Genre:\t\t " << genre << endl;
	cout << "Date:\t\t " << date << endl;
	cout << "Tracknumber:\t " << tracknumber << endl;
	printf("%s\n", mp3nameC);
	//printf("mp3 filename:\t %s - %s", trackC, titleC);
	//printf(" - %s", titleC);
	printf(".mp3\n");
	cout << "****************************************************************\n" << endl;
    }

    string lameSysStr = presetStr + " temp.wav --tt \"" + title + "\" --ta \"" + artist + "\" --tl \"" + album + "\" --ty \"" + date + "\" --tc \"ÜberStandard - Ubershare.org\"" + " --tn \"" + track + "\" --tg \"" + genre + "\" --add-id3v2 \"" + mp3name + "\"";
//finish tagcode
	string systr = "flac -ds -o temp.wav \"" + file + "\"";
	system(systr.c_str());
	system(lameSysStr.c_str());
	if (deleteFlac) unlink(file.c_str());
	unlink("temp.wav");
			}
		}
	}
	closedir(flacdir);
	return 0;
}