Return whether Log::set_file_path succeded or not.

GitOrigin-RevId: a928f8691ebedfd7451bf8bd7957071786b50349
This commit is contained in:
levlam 2018-01-28 19:38:59 +03:00
parent 662471ea48
commit a47d5d5511
13 changed files with 64 additions and 51 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
project(TDLib VERSION 1.0.5 LANGUAGES CXX C)
project(TDLib VERSION 1.0.6 LANGUAGES CXX C)
option(TD_ENABLE_JNI "Use \"ON\" to enable JNI-compatible TDLib API.")

View File

@ -102,7 +102,7 @@ target_link_libraries(YourTarget PRIVATE Td::TdStatic)
Or you could install `TDLib` and then reference it in your CMakeLists.txt like this:
```
find_package(Td 1.0.5 REQUIRED)
find_package(Td 1.0.6 REQUIRED)
target_link_libraries(YourTarget PRIVATE Td::TdStatic)
```
See [example/cpp/CMakeLists.txt](https://github.com/tdlib/td/tree/master/example/cpp/CMakeLists.txt).

View File

@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
project(TdExample VERSION 1.0 LANGUAGES CXX)
find_package(Td 1.0.5 REQUIRED)
find_package(Td 1.0.6 REQUIRED)
add_executable(tdjson_example tdjson_example.cpp)
target_link_libraries(tdjson_example PRIVATE Td::TdJson)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.1)
cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
project(TdJavaExample VERSION 1.0 LANGUAGES CXX)
@ -29,7 +29,7 @@ endif()
add_custom_target(td_generate_java_api
COMMAND ${GENERATE_JAVA_API_CMD}
COMMENT "Generate Java TDLib API source files"
COMMENT "Generating Java TDLib API source files"
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/td/bin/td_generate_java_api ${TD_API_TLO_PATH} ${TD_API_TL_PATH} ${JAVADOC_TL_DOCUMENTATION_GENERATOR_PATH}
)
@ -38,7 +38,7 @@ get_filename_component(JAVA_OUTPUT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin REALPAT
file(MAKE_DIRECTORY ${JAVA_OUTPUT_DIRECTORY})
add_custom_target(build_java
COMMAND ${Java_JAVAC_EXECUTABLE} -d ${JAVA_OUTPUT_DIRECTORY} ${JAVA_SOURCE_PATH}/example/Example.java ${JAVA_SOURCE_PATH}/Client.java ${JAVA_SOURCE_PATH}/Log.java ${JAVA_SOURCE_PATH}/TdApi.java
COMMENT "Build Java code"
COMMENT "Building Java code"
DEPENDS td_generate_java_api
)
@ -46,7 +46,7 @@ set(JAVA_SOURCE_PATH "${TD_API_JAVA_PATH}/${TD_API_JAVA_PACKAGE}")
add_custom_target(generate_javadoc
COMMAND ${Java_JAVADOC_EXECUTABLE} -d ${JAVA_OUTPUT_DIRECTORY}/../docs org.drinkless.tdlib
WORKING_DIRECTORY ${TD_API_JAVA_PATH}
COMMENT "Generate Javadoc documentation"
COMMENT "Generating Javadoc documentation"
DEPENDS td_generate_java_api
)

View File

@ -31,8 +31,9 @@ public final class Log {
*
* @param filePath Path to a file for writing TDLib internal log. Use an empty path to
* switch back to logging to the System.err.
* @return whether opening the log file succeeded
*/
public static native void setFilePath(String filePath);
public static native boolean setFilePath(String filePath);
/**
* Changes maximum size of TDLib log file.

View File

@ -11,6 +11,8 @@ import org.drinkless.tdlib.Log;
import org.drinkless.tdlib.TdApi;
import java.io.Console;
import java.io.IOError;
import java.io.IOException;
import java.util.NavigableSet;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
@ -161,39 +163,43 @@ public final class Example {
}
private static void getCommand() {
String command = System.console().readLine("Enter command (gcs - GetChats, gc - GetChat, me - GetMe, sm <chatId> <message> - SendMessage, lo - LogOut, q - Quit): ");
String command = System.console().readLine("Enter command (gcs - GetChats, gc <chatId> - GetChat, me - GetMe, sm <chatId> <message> - SendMessage, lo - LogOut, q - Quit): ");
String[] commands = command.split(" ", 2);
switch (commands[0]) {
case "gcs": {
int limit = 20;
if (commands.length > 1) {
limit = toInt(commands[1]);
try {
switch (commands[0]) {
case "gcs": {
int limit = 20;
if (commands.length > 1) {
limit = toInt(commands[1]);
}
getChatList(limit);
break;
}
getChatList(limit);
break;
case "gc":
client.send(new TdApi.GetChat(getChatId(commands[1])), defaultHandler);
break;
case "me":
client.send(new TdApi.GetMe(), defaultHandler);
break;
case "sm": {
String[] args = commands[1].split(" ", 2);
sendMessage(getChatId(args[0]), args[1]);
break;
}
case "lo":
haveAuthorization = false;
client.send(new TdApi.LogOut(), defaultHandler);
break;
case "q":
quiting = true;
haveAuthorization = false;
client.send(new TdApi.Close(), defaultHandler);
break;
default:
System.err.println("Unsupported command: " + command);
}
case "gc":
client.send(new TdApi.GetChat(getChatId(commands[1])), defaultHandler);
break;
case "me":
client.send(new TdApi.GetMe(), defaultHandler);
break;
case "sm": {
String[] args = commands[1].split(" ", 2);
sendMessage(getChatId(args[0]), args[1]);
break;
}
case "lo":
haveAuthorization = false;
client.send(new TdApi.LogOut(), defaultHandler);
break;
case "q":
quiting = true;
haveAuthorization = false;
client.send(new TdApi.Close(), defaultHandler);
break;
default:
System.err.println("Unsupported command: " + command);
} catch (ArrayIndexOutOfBoundsException e) {
print("Not enough arguments");
}
}
@ -259,6 +265,9 @@ public final class Example {
public static void main(String[] args) throws InterruptedException {
// disable TDLib log
Log.setVerbosityLevel(0);
if (!Log.setFilePath("log")) {
throw new IOError(new IOException("Write access to the current directory is required"));
}
// create client
client = Client.create(new UpdatesHandler(), null, null);

View File

@ -73,8 +73,8 @@ static void Log_setVerbosityLevel(JNIEnv *env, jclass clazz, jint new_log_verbos
td::Log::set_verbosity_level(static_cast<int>(new_log_verbosity_level));
}
static void Log_setFilePath(JNIEnv *env, jclass clazz, jstring file_path) {
td::Log::set_file_path(td::jni::from_jstring(env, file_path));
static jboolean Log_setFilePath(JNIEnv *env, jclass clazz, jstring file_path) {
return td::Log::set_file_path(td::jni::from_jstring(env, file_path)) ? JNI_TRUE : JNI_FALSE;
}
static void Log_setMaxFileSize(JNIEnv *env, jclass clazz, jlong max_file_size) {
@ -132,7 +132,7 @@ static jint register_native(JavaVM *vm) {
register_method(client_class, "destroyNativeClient", "(J)V", Client_destroyNativeClient);
register_method(log_class, "setVerbosityLevel", "(I)V", Log_setVerbosityLevel);
register_method(log_class, "setFilePath", "(Ljava/lang/String;)V", Log_setFilePath);
register_method(log_class, "setFilePath", "(Ljava/lang/String;)Z", Log_setFilePath);
register_method(log_class, "setMaxFileSize", "(J)V", Log_setMaxFileSize);
register_method(object_class, "toString", "()Ljava/lang/String;", Object_toString);

View File

@ -30,7 +30,7 @@ td_json_client_destroy.restype = None
td_json_client_destroy.argtypes = [c_void_p]
td_set_log_file_path = tdjson.td_set_log_file_path
td_set_log_file_path.restype = None
td_set_log_file_path.restype = c_int
td_set_log_file_path.argtypes = [c_char_p]
td_set_log_max_file_size = tdjson.td_set_log_max_file_size

View File

@ -24,17 +24,18 @@ static void fatal_error_callback_wrapper(CSlice message) {
fatal_error_callback(message.c_str());
}
void Log::set_file_path(string file_path) {
bool Log::set_file_path(string file_path) {
if (file_path.empty()) {
log_interface = default_log_interface;
return;
return true;
}
if (file_log.init(file_path, max_log_file_size)) {
log_interface = &ts_log;
} else {
LOG(FATAL) << "Can't init file log";
return true;
}
return false;
}
void Log::set_max_file_size(int64 max_file_size) {

View File

@ -30,8 +30,9 @@ class Log {
*
* \param[in] file_path Path to a file where the internal TDLib log will be written. Use an empty path to
* switch back to the default logging behaviour.
* \return True on success, or false otherwise, i.e. if the file can't be opened for writing.
*/
static void set_file_path(std::string file_path);
static bool set_file_path(std::string file_path);
/**
* Sets maximum size of the file to where the internal TDLib log is written before the file will be auto-rotated.

View File

@ -187,7 +187,7 @@ class Td final : public NetQueryCallback {
static td_api::object_ptr<td_api::Object> static_request(td_api::object_ptr<td_api::Function> function);
private:
static constexpr const char *tdlib_version = "1.0.5";
static constexpr const char *tdlib_version = "1.0.6";
static constexpr int32 ONLINE_TIMEOUT = 240;
void send_result(uint64 id, tl_object_ptr<td_api::Object> object);

View File

@ -10,8 +10,8 @@
#include <cstdint>
void td_set_log_file_path(const char *file_path) {
td::Log::set_file_path(file_path == nullptr ? "" : file_path);
int td_set_log_file_path(const char *file_path) {
return static_cast<int>(td::Log::set_file_path(file_path == nullptr ? "" : file_path));
}
void td_set_log_max_file_size(long long max_file_size) {

View File

@ -25,8 +25,9 @@ extern "C" {
*
* \param[in] file_path Null-terminated path to a file where the internal TDLib log will be written.
* Use an empty path to switch back to the default logging behaviour.
* \return True 1 on success, or 0 otherwise, i.e. if the file can't be opened for writing.
*/
TDJSON_EXPORT void td_set_log_file_path(const char *file_path);
TDJSON_EXPORT int td_set_log_file_path(const char *file_path);
/**
* Sets maximum size of the file to where the internal TDLib log is written before the file will be auto-rotated.