#include "common.h" #include #include #include #include #include #include "seafile-session.h" #include "seaf-utils.h" #include "log.h" SeafileSession * seafile_session_new(const char *central_config_dir, const char *seafile_dir, CcnetClient *ccnet_session, gboolean need_db) { char *abs_central_config_dir = NULL; char *abs_seafile_dir; char *tmp_file_dir; char *config_file_path; struct stat st; GKeyFile *config; SeafileSession *session = NULL; if (!ccnet_session) return NULL; abs_seafile_dir = ccnet_expand_path (seafile_dir); tmp_file_dir = g_build_filename (abs_seafile_dir, "tmpfiles", NULL); if (central_config_dir) { abs_central_config_dir = ccnet_expand_path (central_config_dir); } const char *confdir = abs_central_config_dir ? abs_central_config_dir : abs_seafile_dir; config_file_path = g_build_filename(confdir, "seafile.conf", NULL); if (g_stat(confdir, &st) < 0 || !S_ISDIR(st.st_mode)) { seaf_warning ("Config dir dir %s does not exist\n", abs_seafile_dir); goto onerror; } if (g_stat(abs_seafile_dir, &st) < 0 || !S_ISDIR(st.st_mode)) { seaf_warning ("Seafile data dir %s does not exist\n", abs_seafile_dir); goto onerror; } if (g_stat(tmp_file_dir, &st) < 0 || !S_ISDIR(st.st_mode)) { seaf_warning ("Seafile tmp dir %s does not exist\n", tmp_file_dir); goto onerror; } GError *error = NULL; config = g_key_file_new (); if (!g_key_file_load_from_file (config, config_file_path, G_KEY_FILE_NONE, &error)) { seaf_warning ("Failed to load config file.\n"); g_key_file_free (config); goto onerror; } session = g_new0(SeafileSession, 1); session->seaf_dir = abs_seafile_dir; session->tmp_file_dir = tmp_file_dir; session->session = ccnet_session; session->config = config; if (need_db) { if (load_database_config (session) < 0) { seaf_warning ("Failed to load database config.\n"); goto onerror; } } session->cfg_mgr = seaf_cfg_manager_new (session); if (!session->cfg_mgr) goto onerror; session->fs_mgr = seaf_fs_manager_new (session, abs_seafile_dir); if (!session->fs_mgr) goto onerror; session->block_mgr = seaf_block_manager_new (session, abs_seafile_dir); if (!session->block_mgr) goto onerror; session->commit_mgr = seaf_commit_manager_new (session); if (!session->commit_mgr) goto onerror; session->repo_mgr = seaf_repo_manager_new (session); if (!session->repo_mgr) goto onerror; session->branch_mgr = seaf_branch_manager_new (session); if (!session->branch_mgr) goto onerror; return session; onerror: free (abs_seafile_dir); g_free (tmp_file_dir); g_free (config_file_path); g_free (session); return NULL; }