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 "FileOperations/fileops.h"
#include "FileOperations/DirList.h"
#include "menu.h"
#include "network/networkops.h"
#include "network/http.h"
int updateLanguageFiles()
{
char languageFiles[50][MAXLANGUAGEFILES];
DirList Dir(Settings.languagefiles_path);
//give up now if we didn't find any
if (Dir.GetFilecount() == 0) return -2;
//now from the files we got, get only the .lang files
for (int cnt = 0; cnt < Dir.GetFilecount(); cnt++)
{
char filename[64];
strlcpy(filename, Dir.GetFilename(cnt), sizeof(filename));
2010-09-24 02:48:03 +02:00
if (strcasestr(filename, ".lang"))
{
2010-09-24 02:48:03 +02:00
strcpy(languageFiles[cnt], filename);
}
}
CreateSubfolder(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
while (j < Dir.GetFilecount())
{
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;
}