usbloadergx/source/language/UpdateLanguage.cpp

79 lines
2.2 KiB
C++
Raw Normal View History

/****************************************************************************
* languagefile updater
* for USB Loader GX *giantpune*
***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/dir.h>
#include "UpdateLanguage.h"
#include "listfiles.h"
#include "menu.h"
#include "network/networkops.h"
#include "network/http.h"
int updateLanguageFiles()
{
char languageFiles[50][MAXLANGUAGEFILES];
//get all the files in the language path
2010-09-24 02:48:03 +02:00
int countfiles = GetAllDirFiles(Settings.languagefiles_path);
//give up now if we didn't find any
2010-09-24 02:48:03 +02:00
if (!countfiles) return -2;
//now from the files we got, get only the .lang files
2010-09-24 02:48:03 +02:00
for (int cnt = 0; cnt < countfiles; cnt++)
{
char filename[64];
2010-09-24 02:48:03 +02:00
strlcpy(filename, GetFileName(cnt), sizeof(filename));
if (strcasestr(filename, ".lang"))
{
2010-09-24 02:48:03 +02:00
strcpy(languageFiles[cnt], filename);
}
}
2010-09-24 02:48:03 +02:00
subfoldercreate(Settings.languagefiles_path);
//we assume that the network will already be init by another function
// ( that has gui eletents in it because this one doesn't)
int done = 0, j = 0;
2010-09-24 02:48:03 +02:00
if (IsNetworkInit())
{
//build the URL, save path, and download each file and save it
2010-09-24 02:48:03 +02:00
while (j < countfiles)
{
char savepath[150];
char codeurl[200];
2010-09-24 02:48:03 +02:00
snprintf(codeurl, sizeof(codeurl), "http://usbloader-gui.googlecode.com/svn/trunk/Languages/%s",
languageFiles[j]);
snprintf(savepath, sizeof(savepath), "%s%s", Settings.languagefiles_path, languageFiles[j]);
2010-09-24 02:48:03 +02:00
struct block file = downloadfile(codeurl);
2010-09-24 02:48:03 +02:00
if (file.data != NULL)
{
FILE * pfile;
2010-09-24 02:48:03 +02:00
pfile = fopen(savepath, "wb");
if (pfile != NULL)
{
2010-09-24 02:48:03 +02:00
fwrite(file.data, 1, file.size, pfile);
fclose(pfile);
free(file.data);
done++;
}
}
j++;
}
}
//if there was no network init
else return -1;
// return the number of files we updated
return done;
}