You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
356 lines
14 KiB
356 lines
14 KiB
|
11 years ago
|
package org.telegram.services;
|
||
|
|
|
||
|
|
import org.apache.commons.io.IOUtils;
|
||
|
|
import org.apache.http.HttpResponse;
|
||
|
|
import org.apache.http.client.HttpClient;
|
||
|
|
import org.apache.http.client.methods.HttpGet;
|
||
|
|
import org.apache.http.conn.ssl.NoopHostnameVerifier;
|
||
|
|
import org.apache.http.impl.client.CloseableHttpClient;
|
||
|
|
import org.apache.http.impl.client.HttpClientBuilder;
|
||
|
|
import org.telegram.BuildVars;
|
||
|
|
import org.telegram.methods.SendDocument;
|
||
|
|
|
||
|
|
import java.io.*;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @author Ruben Bermudez
|
||
|
|
* @version 1.0
|
||
|
|
* @brief Service that allow transifex files download
|
||
|
|
* @date 21 of June of 2015
|
||
|
|
*/
|
||
|
|
public class TransifexService {
|
||
|
|
private static final String BASEURLAndroid = "http://" + BuildVars.TRANSIFEXUSER + ":" + BuildVars.TRANSIFEXPASSWORD + "@www.transifex.com/api/2/project/telegram/resource/stringsxml-48/translation/@language?file"; ///< Base url for REST
|
||
|
|
private static final String BASEURLiOS = "http://" + BuildVars.TRANSIFEXUSER + ":" + BuildVars.TRANSIFEXPASSWORD + "@www.transifex.com/api/2/project/iphone-1/resource/localizablestrings/translation/@language?file"; ///< Base url for REST
|
||
|
|
private static final String BASEURLOSX = "http://" + BuildVars.TRANSIFEXUSER + ":" + BuildVars.TRANSIFEXPASSWORD + "@www.transifex.com/api/2/project/osx/resource/localizablestrings/translation/@language?file"; ///< Base url for REST
|
||
|
|
private static final String BASEURLTDesktop = "http://" + BuildVars.TRANSIFEXUSER + ":" + BuildVars.TRANSIFEXPASSWORD + "@www.transifex.com/api/2/project/telegram-desktop/resource/langstrings/translation/@language?file"; ///< Base url for REST
|
||
|
|
private static final String BASEURLTemplates = "http://" + BuildVars.TRANSIFEXUSER + ":" + BuildVars.TRANSIFEXPASSWORD + "@www.transifex.com/api/2/project/telegram-desktop/resource/tl_generaltxt/translation/@language?file"; ///< Base url for REST
|
||
|
|
private static final String BASEURLWebogram = "http://" + BuildVars.TRANSIFEXUSER + ":" + BuildVars.TRANSIFEXPASSWORD + "@www.transifex.com/api/2/project/telegram-web/resource/en-usjson/translation/@language?file"; ///< Base url for REST
|
||
|
|
private static final String BASEURLWP = "http://" + BuildVars.TRANSIFEXUSER + ":" + BuildVars.TRANSIFEXPASSWORD + "@www.transifex.com/api/2/project/wp-telegram-messenger-beta/resource/appresourcesresx/translation/@language?file"; ///< Base url for REST
|
||
|
|
private static final int STATUS200 = 200;
|
||
|
|
private static final int BYTES1024 = 1024;
|
||
|
|
private static volatile TransifexService instance; ///< Instance of this class
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Constructor (private due to singleton pattern)
|
||
|
|
*/
|
||
|
|
private TransifexService() {
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Singleton
|
||
|
|
*
|
||
|
|
* @return Return the instance of this class
|
||
|
|
*/
|
||
|
|
public static TransifexService getInstance() {
|
||
|
|
TransifexService currentInstance;
|
||
|
|
if (instance == null) {
|
||
|
|
synchronized (TransifexService.class) {
|
||
|
|
if (instance == null) {
|
||
|
|
instance = new TransifexService();
|
||
|
|
}
|
||
|
|
currentInstance = instance;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
currentInstance = instance;
|
||
|
|
}
|
||
|
|
return currentInstance;
|
||
|
|
}
|
||
|
|
|
||
|
|
private String getFileAndroid(String query) {
|
||
|
|
String result = null;
|
||
|
|
try {
|
||
|
|
CloseableHttpClient client = HttpClientBuilder.create().setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
|
||
|
|
HttpGet request = new HttpGet(BASEURLAndroid.replace("@language", query));
|
||
|
|
HttpResponse response = client.execute(request);
|
||
|
|
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
|
||
|
|
String line;
|
||
|
|
String responseString = "";
|
||
|
|
while ((line = rd.readLine()) != null) {
|
||
|
|
responseString += line;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (response.getStatusLine().getStatusCode() == STATUS200) {
|
||
|
|
result = responseString;
|
||
|
|
}
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
private byte[] getFileiOS(String query) {
|
||
|
|
byte[] result = null;
|
||
|
|
try {
|
||
|
|
HttpClient client = HttpClientBuilder.create().build();
|
||
|
|
HttpGet request = new HttpGet(BASEURLiOS.replace("@language", query));
|
||
|
|
HttpResponse response = client.execute(request);
|
||
|
|
result = IOUtils.toByteArray(new InputStreamReader(response.getEntity().getContent(), "UTF-16LE"));
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
private byte[] getFileOSX(String query) {
|
||
|
|
byte[] result = null;
|
||
|
|
try {
|
||
|
|
HttpClient client = HttpClientBuilder.create().build();
|
||
|
|
HttpGet request = new HttpGet(BASEURLOSX.replace("@language", query));
|
||
|
|
HttpResponse response = client.execute(request);
|
||
|
|
result = IOUtils.toByteArray(new InputStreamReader(response.getEntity().getContent(), "UTF-16LE"));
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
private byte[] getFileTDesktop(String query) {
|
||
|
|
byte[] result = null;
|
||
|
|
try {
|
||
|
|
HttpClient client = HttpClientBuilder.create().build();
|
||
|
|
HttpGet request = new HttpGet(BASEURLTDesktop.replace("@language", query));
|
||
|
|
HttpResponse response = client.execute(request);
|
||
|
|
result = IOUtils.toByteArray(new InputStreamReader(response.getEntity().getContent(), "UTF-16LE"));
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
public byte[] getFileTemplate(String languageCode) {
|
||
|
|
byte[] result = null;
|
||
|
|
try {
|
||
|
|
HttpClient client = HttpClientBuilder.create().build();
|
||
|
|
HttpGet request = new HttpGet(BASEURLTemplates.replace("@language", languageCode));
|
||
|
|
HttpResponse response = client.execute(request);
|
||
|
|
result = IOUtils.toByteArray(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
private byte[] getFileWebogram(String query) {
|
||
|
|
byte[] result = null;
|
||
|
|
try {
|
||
|
|
HttpClient client = HttpClientBuilder.create().build();
|
||
|
|
HttpGet request = new HttpGet(BASEURLWebogram.replace("@language", query));
|
||
|
|
HttpResponse response = client.execute(request);
|
||
|
|
result = IOUtils.toByteArray(new InputStreamReader(response.getEntity().getContent(), "UTF-16LE"));
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
private byte[] getFileWP(String query) {
|
||
|
|
byte[] result = null;
|
||
|
|
try {
|
||
|
|
HttpClient client = HttpClientBuilder.create().build();
|
||
|
|
HttpGet request = new HttpGet(BASEURLWP.replace("@language", query));
|
||
|
|
HttpResponse response = client.execute(request);
|
||
|
|
result = IOUtils.toByteArray(new InputStreamReader(response.getEntity().getContent(), "UTF-16LE"));
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* For languages that are composited of a regional part, change that part to uper case for transifex
|
||
|
|
* @param language Language received
|
||
|
|
* @return Language fixed
|
||
|
|
*/
|
||
|
|
private String fixCaseCompositedLanguages(String language) {
|
||
|
|
String[] parts = language.split("_");
|
||
|
|
if (parts.length == 1) {
|
||
|
|
language = parts[0];
|
||
|
|
} else {
|
||
|
|
language = parts[0] + "_" + parts[1].toUpperCase();
|
||
|
|
}
|
||
|
|
return language;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Fetch the language file for support members of android
|
||
|
|
* @param language Language requested
|
||
|
|
*/
|
||
|
|
public SendDocument getAndroidSupportLanguageFile(String language) {
|
||
|
|
String file = getFileAndroid(language);
|
||
|
|
SendDocument sendDocument;
|
||
|
|
if (file != null && file.getBytes().length / BYTES1024 >= 10) {
|
||
|
|
file = file.replaceAll("\"LanguageName\"\\>(\\w*)\\<\\/string\\>", "\"LanguageName\"\\>$1_1\\<\\/string\\>").replaceAll("\"LanguageCode\"\\>(\\w*)\\<\\/string\\>", "\"LanguageCode\"\\>$1_1\\<\\/string\\>");
|
||
|
|
try {
|
||
|
|
String fileName = "languages_Android_" + language + ".xml";
|
||
|
|
PrintWriter localFile = new PrintWriter(fileName);
|
||
|
|
localFile.print(file);
|
||
|
|
localFile.close();
|
||
|
|
File fileToUpload = new File(fileName);
|
||
|
|
sendDocument = new SendDocument();
|
||
|
|
sendDocument.setNewDocument(fileToUpload.getAbsolutePath(), fileName);
|
||
|
|
} catch (FileNotFoundException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
sendDocument = null;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
sendDocument = null;
|
||
|
|
}
|
||
|
|
return sendDocument;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Fetch the language file for Android
|
||
|
|
* @param language Language requested
|
||
|
|
*/
|
||
|
|
public SendDocument getAndroidLanguageFile(String language) {
|
||
|
|
String file = getFileAndroid(language);
|
||
|
|
SendDocument sendDocument;
|
||
|
|
if (file != null && file.getBytes().length / BYTES1024 >= 10) {
|
||
|
|
try {
|
||
|
|
String fileName = "languages_Android_" + language + ".xml";
|
||
|
|
PrintWriter localFile = new PrintWriter(fileName);
|
||
|
|
localFile.print(file);
|
||
|
|
localFile.close();
|
||
|
|
File fileToUpload = new File(fileName);
|
||
|
|
sendDocument = new SendDocument();
|
||
|
|
sendDocument.setNewDocument(fileToUpload.getAbsolutePath(), fileName);
|
||
|
|
} catch (FileNotFoundException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
sendDocument = null;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
sendDocument = null;
|
||
|
|
}
|
||
|
|
return sendDocument;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Fetch the language file for iOS
|
||
|
|
*
|
||
|
|
* @param language Language requested
|
||
|
|
*/
|
||
|
|
public SendDocument getiOSLanguageFile(String language) {
|
||
|
|
byte[] file = getFileiOS(language);
|
||
|
|
SendDocument sendDocument;
|
||
|
|
if (file != null && file.length / BYTES1024 >= 10) {
|
||
|
|
try {
|
||
|
|
String fileName = "languages_ios_" + language + ".strings";
|
||
|
|
File fileToUpload = new File(fileName);
|
||
|
|
FileOutputStream output = new FileOutputStream(fileToUpload);
|
||
|
|
IOUtils.write(file, output);
|
||
|
|
output.close();
|
||
|
|
sendDocument = new SendDocument();
|
||
|
|
sendDocument.setNewDocument(fileToUpload.getAbsolutePath(), fileName);
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
sendDocument = null;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
sendDocument = null;
|
||
|
|
}
|
||
|
|
return sendDocument;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Fetch the language file for OSX
|
||
|
|
* @param language Language requested
|
||
|
|
*/
|
||
|
|
public SendDocument getOSXLanguageFile(String language) {
|
||
|
|
byte[] file = getFileOSX(language);
|
||
|
|
SendDocument sendDocument;
|
||
|
|
if (file != null && file.length / BYTES1024 >= 10) {
|
||
|
|
try {
|
||
|
|
String fileName = "languages_osx_" + language + ".strings";
|
||
|
|
File fileToUpload = new File(fileName);
|
||
|
|
FileOutputStream output = new FileOutputStream(fileToUpload);
|
||
|
|
IOUtils.write(file, output);
|
||
|
|
output.close();
|
||
|
|
sendDocument = new SendDocument();
|
||
|
|
sendDocument.setNewDocument(fileToUpload.getAbsolutePath(), fileName);
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
sendDocument = null;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
sendDocument = null;
|
||
|
|
}
|
||
|
|
return sendDocument;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Fetch the language file for Tdesktop
|
||
|
|
* @param language Language requested
|
||
|
|
*/
|
||
|
|
public SendDocument getTdesktopLanguageFile(String language) {
|
||
|
|
byte[] file = getFileTDesktop(language);
|
||
|
|
SendDocument sendDocument = null;
|
||
|
|
if (file != null && file.length / BYTES1024 >= 10) {
|
||
|
|
try {
|
||
|
|
String fileName = "languages_tdesktop_" + language + ".strings";
|
||
|
|
File fileToUpload = new File(fileName);
|
||
|
|
FileOutputStream output = new FileOutputStream(fileToUpload);
|
||
|
|
IOUtils.write(file, output);
|
||
|
|
output.close();
|
||
|
|
if (fileToUpload.exists()) {
|
||
|
|
sendDocument = new SendDocument();
|
||
|
|
sendDocument.setNewDocument(fileToUpload.getAbsolutePath(), fileName);
|
||
|
|
}
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return sendDocument;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Fetch the language file for Webogram
|
||
|
|
* @param language Language requested
|
||
|
|
*/
|
||
|
|
public SendDocument getWebogramLanguageFile(String language) {
|
||
|
|
byte[] file = getFileWebogram(language);
|
||
|
|
SendDocument sendDocument = null;
|
||
|
|
if (file != null && file.length / BYTES1024 >= 10) {
|
||
|
|
try {
|
||
|
|
String fileName = "languages_webogram_" + language + ".json";
|
||
|
|
File fileToUpload = new File(fileName);
|
||
|
|
FileOutputStream output = new FileOutputStream(fileToUpload);
|
||
|
|
IOUtils.write(file, output);
|
||
|
|
output.close();
|
||
|
|
if (fileToUpload.exists()) {
|
||
|
|
sendDocument = new SendDocument();
|
||
|
|
sendDocument.setNewDocument(fileToUpload.getAbsolutePath(), fileName);
|
||
|
|
}
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return sendDocument;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Fetch the language file for WP
|
||
|
|
* @param language Language requested
|
||
|
|
*/
|
||
|
|
public SendDocument getWPLanguageFile(String language) {
|
||
|
|
byte[] file = getFileWP(language);
|
||
|
|
SendDocument sendDocument = null;
|
||
|
|
if (file != null && file.length / BYTES1024 >= 10) {
|
||
|
|
try {
|
||
|
|
String fileName = "languages_wp_" + language + ".xml";
|
||
|
|
File fileToUpload = new File(fileName);
|
||
|
|
FileOutputStream output = new FileOutputStream(fileToUpload);
|
||
|
|
IOUtils.write(file, output);
|
||
|
|
output.close();
|
||
|
|
if (fileToUpload.exists()) {
|
||
|
|
sendDocument = new SendDocument();
|
||
|
|
sendDocument.setNewDocument(fileToUpload.getAbsolutePath(), fileName);
|
||
|
|
}
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return sendDocument;
|
||
|
|
}
|
||
|
|
}
|