Skip to content
Snippets Groups Projects
database.c 6.72 KiB
Newer Older
T.Wadi's avatar
T.Wadi committed
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "database.h"
#include "datastructure.h"
#include "tools.h"
#include "cds.h"
#include "datetime.h"

void load()
{
    clearScreen();

    FILE *datei = fopen("cds.xml", "r");
    if (datei)
    {
        loadCD(datei);
        fclose(datei);
        waitForEnter();
        clearBuffer();
    }
}
void loadCD(FILE *datei)
{
    char zeile[101];
    char *zeilenAnfang;
    int len;
    if (datei)
    {
        do
        {
            fscanf(datei, " %101[^\n]", zeile);
            spacesRemove(&zeilenAnfang, zeile);
            while (fscanf(datei, " %101[^\n]", zeile) == 1)
            {
                if (strncmp(zeilenAnfang, "<CD>", 4) == 0)
                {
                    while (fscanf(datei, " %101[^\n]", zeile) == 1)
                    {
                        if (strncmp(zeilenAnfang, "<Title>", 7) == 0)
                        {
                            len = strlen(zeilenAnfang + 7) - 8;
                            if (strncmp(zeilenAnfang + 7 + len - 1, "</Title>", 8) == 0)
                            {
                                (CDData + countCDs)->title = calloc(len + 1, sizeof(char));
                                if ((CDData + countCDs)->title)
                                {
                                    strncpy((CDData + countCDs)->title, zeilenAnfang + 7, len - 1);
                                }
                            }
                        }
                        if (strncmp(zeilenAnfang, "<Interpret>", 11) == 0)
                        {
                            len = strlen(zeilenAnfang + 11) - 12;
                            if (strncmp(zeilenAnfang + 11 + len - 1, "</Interpret>", 12) == 0)
                            {
                                (CDData + countCDs)->artist = calloc(len + 1, sizeof(char));
                                if ((CDData + countCDs)->artist)
                                {
                                    strncpy((CDData + countCDs)->artist, zeilenAnfang + 11, len - 1);
                                }
                            }
                        }
                        if (strncmp(zeilenAnfang, "<YearOfAppearance>", 18) == 0)
                        {
                            len = strlen(zeilenAnfang + 18) - 19;
                            if (strncmp(zeilenAnfang + 18 + len - 1, "</YearOfAppearance>", 19) == 0)
                            {
                                char *tmp;
                                tmp = malloc(20 * sizeof(char));
                                if (tmp)
                                {
                                    strncpy(tmp, zeilenAnfang + 18, 4);
                                    printf("here is tmp = %s\n", tmp);
                                    (CDData + countCDs)->publicationYear = (unsigned int)atoi(tmp);
                                        free(tmp);
                                }
                            }
                        }
                        if (strncmp(zeilenAnfang, "<Song>", 6) == 0)
                        {
                            void loadSong();
                            {
                                while (fscanf(datei, " %101[^\n]", zeile) == 1)
                                {
                                    if (strncmp(zeilenAnfang, "<Title>", 7) == 0)
                                    {
                                        len = strlen(zeilenAnfang + 7) - 8;
                                        if (strncmp(zeilenAnfang + 7 + len - 1, "</Title>", 8) == 0)
                                        {
                                            (CDData + countCDs)->Songs[(CDData + countCDs)->numberOfSongs].title = calloc(len + 1, sizeof(char));
                                            if ((CDData + countCDs)->Songs[(CDData + countCDs)->numberOfSongs].title)
                                            {
                                                strncpy((CDData + countCDs)->Songs[(CDData + countCDs)->numberOfSongs].title, zeilenAnfang + 7, len - 1);
                                            }
                                        }
                                    }
                                    if (strncmp(zeilenAnfang, "<Interpret>", 11) == 0)
                                    {
                                        len = strlen(zeilenAnfang + 11) - 12;
                                        if (strncmp(zeilenAnfang + 11 + len - 1, "</Interpret>", 12) == 0)
                                        {
                                            (CDData + countCDs)->Songs[(CDData + countCDs)->numberOfSongs].artist = calloc(len + 1, sizeof(char));
                                            if ((CDData + countCDs)->Songs[(CDData + countCDs)->numberOfSongs].artist)
                                            {
                                                strncpy((CDData + countCDs)->Songs[(CDData + countCDs)->numberOfSongs].artist, zeilenAnfang + 11, len - 1);
                                            }
                                        }
                                    }
                                    if (strncmp(zeilenAnfang, "<Duration>", 10) == 0)
                                    {
                                        len = strlen(zeilenAnfang + 10) - 11;
                                        if (strncmp(zeilenAnfang + 10 + len - 1, "</Duration>", 11) == 0)
                                        {
                                            char *tmp;
                                            tmp = malloc(20 * sizeof(char));
                                            if (tmp)
                                            {
                                                strncpy(tmp, zeilenAnfang + 10, len - 1);
                                                getTimeFromString(tmp, &((CDData + countCDs)->Songs[(CDData + countCDs)->numberOfSongs].duration));
                                                free(tmp);
                                            }
                                        }
                                    }
                                    if (strncmp(zeilenAnfang, "</Song>", 7) == 0)
                                        break;
                                }
                                (CDData + countCDs)->numberOfSongs++;
                            }
                        }

                        if (strncmp(zeilenAnfang, "</CD>", 5) == 0)
                            break;
                    }
                    countCDs++;
                }
            }

            fclose(datei);
        } while (feof(datei) || strncmp(zeile, "</Data>", 7) != 0);
    }
    else
        puts("datei konnte nicht geoffnet werden\n");
}

void loadSong(FILE *datei)
{
}