UserManager is now a Singleton as well.

This commit is contained in:
Fabian Schlenz 2017-02-22 06:57:58 +01:00
parent 42112d7607
commit 6d772a3be1
7 changed files with 36 additions and 26 deletions

View File

@ -37,7 +37,6 @@ public class CommandLineController {
private static Logger logger = LoggerFactory.getLogger(CommandLineController.class);
private ApiStorage storage;
public TelegramApp app;
public UserManager user = null;
public CommandLineController() {
logger.info("CommandLineController started. App version {}", Config.APP_APPVER);
@ -76,8 +75,11 @@ public class CommandLineController {
TelegramClient client = Kotlogram.getDefaultClient(app, storage, Kotlogram.PROD_DC4, handler);
try {
logger.info("Creating UserManager");
user = new UserManager(client);
logger.info("Initializing UserManager");
UserManager.init(client);
Database.init(client);
UserManager user = UserManager.getInstance();
if (!CommandLineOptions.cmd_login && !user.isLoggedIn()) {
System.out.println("Your authorization data is invalid or missing. You will have to login with Telegram again.");
@ -104,7 +106,7 @@ public class CommandLineController {
logger.debug("CommandLineOptions.val_export: {}", CommandLineOptions.val_export);
if (CommandLineOptions.val_export != null) {
if (CommandLineOptions.val_export.toLowerCase().equals("html")) {
(new HTMLExporter()).export(user);
(new HTMLExporter()).export();
System.exit(0);
} else {
show_error("Unknown export format.");
@ -125,7 +127,7 @@ public class CommandLineController {
}
logger.info("Initializing Download Manager");
DownloadManager d = new DownloadManager(user, client, new CommandLineDownloadProgress());
DownloadManager d = new DownloadManager(client, new CommandLineDownloadProgress());
logger.debug("Calling DownloadManager.downloadMessages with limit {}", CommandLineOptions.val_limit_messages);
d.downloadMessages(CommandLineOptions.val_limit_messages);
@ -141,7 +143,7 @@ public class CommandLineController {
logger.error("Exception caught!", e);
} finally {
if (CommandLineOptions.cmd_daemon) {
handler.setUser(user, client);
handler.activate();
System.out.println("DAEMON mode requested - keeping running.");
} else {
client.close();
@ -209,6 +211,7 @@ public class CommandLineController {
}
private void cmd_login(String phone) throws RpcErrorException, IOException {
UserManager user = UserManager.getInstance();
if (phone==null) {
System.out.println("Please enter your phone number in international format.");
System.out.println("Example: +4917077651234");

View File

@ -55,12 +55,8 @@ public class Database {
private final static Logger logger = LoggerFactory.getLogger(Database.class);
private static Database instance = null;
public Database(UserManager user_manager, TelegramClient client) {
this(user_manager, client, true);
}
public Database(UserManager user_manager, TelegramClient client, boolean update_db) {
this.user_manager = user_manager;
private Database(TelegramClient client) {
this.user_manager = UserManager.getInstance();
this.client = client;
System.out.println("Opening database...");
try {
@ -80,15 +76,15 @@ public class Database {
CommandLineController.show_error("Could not connect to SQLITE database.");
}
this.init(update_db);
instance = this;
// Run updates
DatabaseUpdates updates = new DatabaseUpdates(conn, this);
updates.doUpdates();
System.out.println("Database is ready.");
}
private void init(boolean update_db) {
if (!update_db) return;
DatabaseUpdates updates = new DatabaseUpdates(conn, this);
updates.doUpdates();
public static void init(TelegramClient c) {
instance = new Database(c);
}
public static Database getInstance() {

View File

@ -60,11 +60,11 @@ public class DownloadManager {
static boolean last_download_succeeded = true;
static final Logger logger = LoggerFactory.getLogger(DownloadManager.class);
public DownloadManager(UserManager u, TelegramClient c, DownloadProgressInterface p) {
this.user = u;
public DownloadManager(TelegramClient c, DownloadProgressInterface p) {
this.user = UserManager.getInstance();
this.client = c;
this.prog = p;
this.db = new Database(u, c);
this.db = Database.getInstance();
}
public void downloadMessages(Integer limit) throws RpcErrorException, IOException {

View File

@ -32,7 +32,7 @@ class TelegramUpdateHandler implements UpdateCallback {
private Database db = null;
public boolean debug = false;
public void setUser(UserManager user, TelegramClient client) { this.user = user; this.db = new Database(user, client, false);}
public void activate() { this.user = UserManager.getInstance(); this.db = Database.getInstance();}
public void onUpdates(TelegramClient c, TLUpdates u) {
if (db==null) return;

View File

@ -58,7 +58,7 @@ class TestFeatures {
// Prints system.encoding and default charset
System.out.println("Default Charset: " + Charset.defaultCharset());
System.out.println("file.encoding: " + System.getProperty("file.encoding"));
Database db = new Database(user, client, false);
Database db = Database.getInstance();
System.out.println("Database encoding: " + db.getEncoding());
}
}

View File

@ -43,8 +43,13 @@ public class UserManager {
private TLAuthorization auth = null;
private boolean password_needed = false;
private static Logger logger = LoggerFactory.getLogger(UserManager.class);
private static UserManager instance = null;
public UserManager(TelegramClient c) throws IOException {
public static void init(TelegramClient c) throws IOException {
instance = new UserManager(c);
}
private UserManager(TelegramClient c) throws IOException {
this.client = c;
logger.debug("Calling getFullUser");
try {
@ -56,6 +61,11 @@ public class UserManager {
}
}
public static UserManager getInstance() {
if (instance==null) throw new RuntimeException("UserManager is not yet initialized.");
return instance;
}
public boolean isLoggedIn() { return user!=null; }
public void sendCodeToPhoneNumber(String number) throws RpcErrorException, IOException {

View File

@ -45,9 +45,10 @@ import org.slf4j.LoggerFactory;
public class HTMLExporter {
private static Logger logger = LoggerFactory.getLogger(HTMLExporter.class);
public void export(UserManager user) throws IOException {
public void export() throws IOException {
try {
Database db = new Database(user, null);
UserManager user = UserManager.getInstance();
Database db = Database.getInstance();
// Create base dir
logger.debug("Creating base dir");