Implement drafts, introduce Room persistence library for db (#139)
Fix no draft message translation updates format improvements typo update some renaming refactors Use better naming convention remove duplicate source arrange draft titles enhance click listener area Launch drafts from reply screen and clean up Add message draft saved update repositories tasks Update user accounts repository with thread, remove async tasks remove async task in drafts update layout, change async to thread in drafts Merge branch 'master' into pull_139 # Conflicts: # app/build.gradle # app/src/main/java/org/mian/gitnex/activities/LoginActivity.java Merge branch 'master' into pull_139 # Conflicts: # app/src/main/java/org/mian/gitnex/activities/ReplyToIssueActivity.java Merge branch 'pull_139' of codeberg.org:gitnex/GitNex into pull_139 # Conflicts: # app/src/main/java/org/mian/gitnex/adapters/MyReposListAdapter.java Merge branch 'master' into pull_139 # Conflicts: # app/src/main/java/org/mian/gitnex/activities/LoginActivity.java # app/src/main/java/org/mian/gitnex/activities/ReplyToIssueActivity.java # app/src/main/java/org/mian/gitnex/adapters/MyReposListAdapter.java Merge branch 'master' into pull_139 Merge branch 'master' into pull_139 Merge branch 'master' into pull_139 and fix conflicts # Conflicts: # app/build.gradle # app/src/main/java/org/mian/gitnex/activities/LoginActivity.java # app/src/main/java/org/mian/gitnex/activities/MainActivity.java # app/src/main/java/org/mian/gitnex/activities/ReplyToIssueActivity.java # app/src/main/java/org/mian/gitnex/adapters/MyReposListAdapter.java # app/src/main/java/org/mian/gitnex/helpers/StaticGlobalVariables.java # app/src/main/res/values/strings.xml Code Format Merge branch 'master' into 15-comments-draft Merge branch 'master' into 15-comments-draft Merge branch 'master' into 15-comments-draft # Conflicts: # app/src/main/java/org/mian/gitnex/activities/MainActivity.java # app/src/main/res/values/strings.xml Go to draft, save on type and other fixes delete all drafts, added messages where needed delete draft Force logout Merge branch 'master' into 15-comments-draft Merge branch 'master' into 15-comments-draft # Conflicts: # app/src/main/java/org/mian/gitnex/activities/MainActivity.java # app/src/main/java/org/mian/gitnex/helpers/StaticGlobalVariables.java check if account data is null, we need to log the user out for the 1st time. Merge branch 'master' into 15-comments-draft fix repo owner, name sequence Add comments for test, show drafts list Add repos to db Add account to db and other refactors to the code Merge branch 'master' into 15-comments-draft Merge branch 'master' into 15-comments-draft Merge branch 'master' into 15-comments-draft Merge branch 'master' into 15-comments-draft # Conflicts: # app/build.gradle # app/src/main/AndroidManifest.xml Merge branch 'master' into 15-comments-draft merge more queries, added dao repositories, layout update Added queries in dao some refactor. added models, dao, entities (accounts, repositories, drafts) WIP on implementing drafts, introduced Room persistence library for db. Co-authored-by: M M Arif <mmarif@swatian.com> Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/139 Reviewed-by: opyale <opyale@noreply.codeberg.org>
This commit is contained in:
		
							
								
								
									
										109
									
								
								app/src/main/java/org/mian/gitnex/database/api/DraftsApi.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								app/src/main/java/org/mian/gitnex/database/api/DraftsApi.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,109 @@ | ||||
| package org.mian.gitnex.database.api; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.util.Log; | ||||
| import androidx.lifecycle.LiveData; | ||||
| import org.mian.gitnex.database.dao.DraftsDao; | ||||
| import org.mian.gitnex.database.db.GitnexDatabase; | ||||
| import org.mian.gitnex.database.models.Draft; | ||||
| import org.mian.gitnex.database.models.DraftWithRepository; | ||||
| import org.mian.gitnex.helpers.StaticGlobalVariables; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * Author M M Arif | ||||
|  */ | ||||
|  | ||||
| public class DraftsApi { | ||||
|  | ||||
| 	private static DraftsDao draftsDao; | ||||
| 	private static long draftId; | ||||
| 	private static Integer checkDraftFlag; | ||||
|  | ||||
| 	public DraftsApi(Context context) { | ||||
|  | ||||
| 		GitnexDatabase db; | ||||
| 		db = GitnexDatabase.getDatabaseInstance(context); | ||||
| 		draftsDao = db.draftsDao(); | ||||
| 	} | ||||
|  | ||||
| 	public long insertDraft(int repositoryId, int draftAccountId, int issueId, String draftText, String draftType) { | ||||
|  | ||||
| 		Draft draft = new Draft(); | ||||
| 		draft.setDraftRepositoryId(repositoryId); | ||||
| 		draft.setDraftAccountId(draftAccountId); | ||||
| 		draft.setIssueId(issueId); | ||||
| 		draft.setDraftText(draftText); | ||||
| 		draft.setDraftType(draftType); | ||||
|  | ||||
| 		return insertDraftAsyncTask(draft); | ||||
| 	} | ||||
|  | ||||
| 	private static long insertDraftAsyncTask(final Draft draft) { | ||||
|  | ||||
| 		try { | ||||
|  | ||||
| 			Thread thread = new Thread(() -> draftId = draftsDao.insertDraft(draft)); | ||||
| 			thread.start(); | ||||
| 			thread.join(); | ||||
| 		} | ||||
| 		catch(InterruptedException e) { | ||||
|  | ||||
| 			Log.e(StaticGlobalVariables.draftsRepository, e.toString()); | ||||
| 		} | ||||
|  | ||||
| 		return draftId; | ||||
| 	} | ||||
|  | ||||
| 	public Integer checkDraft(int issueId, int draftRepositoryId) { | ||||
|  | ||||
| 		try { | ||||
|  | ||||
| 			Thread thread = new Thread(() -> checkDraftFlag = draftsDao.checkDraftDao(issueId, draftRepositoryId)); | ||||
| 			thread.start(); | ||||
| 			thread.join(); | ||||
| 		} | ||||
| 		catch(InterruptedException e) { | ||||
|  | ||||
| 			Log.e(StaticGlobalVariables.draftsRepository, e.toString()); | ||||
| 		} | ||||
|  | ||||
| 		return checkDraftFlag; | ||||
| 	} | ||||
|  | ||||
| 	public LiveData<List<DraftWithRepository>> getDrafts(int accountId) { | ||||
|  | ||||
| 		return draftsDao.fetchAllDrafts(accountId); | ||||
| 	} | ||||
|  | ||||
| 	public LiveData<Draft> getDraftByIssueId(int issueId) { | ||||
|  | ||||
| 		return draftsDao.fetchDraftByIssueId(issueId); | ||||
| 	} | ||||
|  | ||||
| 	public static void deleteSingleDraft(final int draftId) { | ||||
|  | ||||
| 		final LiveData<Draft> draft = draftsDao.fetchDraftById(draftId); | ||||
|  | ||||
| 		if(draft != null) { | ||||
|  | ||||
| 			new Thread(() -> draftsDao.deleteByDraftId(draftId)).start(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public static void deleteAllDrafts(final int accountId) { | ||||
|  | ||||
| 		new Thread(() -> draftsDao.deleteAllDrafts(accountId)).start(); | ||||
| 	} | ||||
|  | ||||
| 	public static void updateDraft(final String draftText, final int draftId) { | ||||
|  | ||||
| 		new Thread(() -> draftsDao.updateDraft(draftText, draftId)).start(); | ||||
| 	} | ||||
|  | ||||
| 	public static void updateDraftByIssueIdAsyncTask(final String draftText, final int issueId, final int draftRepositoryId) { | ||||
|  | ||||
| 		new Thread(() -> draftsDao.updateDraftByIssueId(draftText, issueId, draftRepositoryId)).start(); | ||||
| 	} | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,140 @@ | ||||
| package org.mian.gitnex.database.api; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.util.Log; | ||||
| import androidx.lifecycle.LiveData; | ||||
| import org.mian.gitnex.database.dao.RepositoriesDao; | ||||
| import org.mian.gitnex.database.db.GitnexDatabase; | ||||
| import org.mian.gitnex.database.models.Repository; | ||||
| import org.mian.gitnex.helpers.StaticGlobalVariables; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * Author M M Arif | ||||
|  */ | ||||
|  | ||||
| public class RepositoriesApi { | ||||
|  | ||||
| 	private static RepositoriesDao repositoriesDao; | ||||
| 	private static long repositoryId; | ||||
| 	private static Repository repository; | ||||
| 	private static Integer checkRepository; | ||||
|  | ||||
| 	public RepositoriesApi(Context context) { | ||||
|  | ||||
| 		GitnexDatabase db; | ||||
| 		db = GitnexDatabase.getDatabaseInstance(context); | ||||
| 		repositoriesDao = db.repositoriesDao(); | ||||
| 	} | ||||
|  | ||||
| 	public long insertRepository(int repoAccountId, String repositoryOwner, String repositoryName) { | ||||
|  | ||||
| 		Repository repository = new Repository(); | ||||
| 		repository.setRepoAccountId(repoAccountId); | ||||
| 		repository.setRepositoryOwner(repositoryOwner); | ||||
| 		repository.setRepositoryName(repositoryName); | ||||
|  | ||||
| 		return insertRepositoryAsyncTask(repository); | ||||
| 	} | ||||
|  | ||||
| 	public long insertRepositoryAsyncTask(Repository repository) { | ||||
|  | ||||
| 		try { | ||||
|  | ||||
| 			Thread thread = new Thread(() -> repositoryId = repositoriesDao.newRepository(repository)); | ||||
| 			thread.start(); | ||||
| 			thread.join(); | ||||
| 		} | ||||
| 		catch(InterruptedException e) { | ||||
|  | ||||
| 			Log.e(StaticGlobalVariables.repositoriesRepository, e.toString()); | ||||
| 		} | ||||
|  | ||||
| 		return repositoryId; | ||||
| 	} | ||||
|  | ||||
| 	public Repository getRepository(int repoAccountId, String repositoryOwner, String repositoryName) { | ||||
|  | ||||
| 		try { | ||||
|  | ||||
| 			Thread thread = new Thread(() -> repository = repositoriesDao.getSingleRepositoryDao(repoAccountId, repositoryOwner, repositoryName)); | ||||
| 			thread.start(); | ||||
| 			thread.join(); | ||||
| 		} | ||||
| 		catch(InterruptedException e) { | ||||
|  | ||||
| 			Log.e(StaticGlobalVariables.repositoriesRepository, e.toString()); | ||||
| 		} | ||||
|  | ||||
| 		return repository; | ||||
| 	} | ||||
|  | ||||
| 	public LiveData<List<Repository>> getAllRepositories() { | ||||
|  | ||||
| 		return repositoriesDao.fetchAllRepositories(); | ||||
| 	} | ||||
|  | ||||
| 	public LiveData<List<Repository>> getAllRepositoriesByAccount(int repoAccountId) { | ||||
|  | ||||
| 		return repositoriesDao.getAllRepositoriesByAccountDao(repoAccountId); | ||||
| 	} | ||||
|  | ||||
| 	public Integer checkRepository(int repoAccountId, String repositoryOwner, String repositoryName) { | ||||
|  | ||||
| 		try { | ||||
|  | ||||
| 			Thread thread = new Thread(() -> checkRepository = repositoriesDao.checkRepositoryDao(repoAccountId, repositoryOwner, repositoryName)); | ||||
| 			thread.start(); | ||||
| 			thread.join(); | ||||
| 		} | ||||
| 		catch(InterruptedException e) { | ||||
|  | ||||
| 			Log.e(StaticGlobalVariables.repositoriesRepository, e.toString()); | ||||
| 		} | ||||
|  | ||||
| 		return checkRepository; | ||||
| 	} | ||||
|  | ||||
| 	public Repository fetchRepositoryById(int repositoryId) { | ||||
|  | ||||
| 		try { | ||||
|  | ||||
| 			Thread thread = new Thread(() -> repository = repositoriesDao.fetchRepositoryByIdDao(repositoryId)); | ||||
| 			thread.start(); | ||||
| 			thread.join(); | ||||
| 		} | ||||
| 		catch(InterruptedException e) { | ||||
|  | ||||
| 			Log.e(StaticGlobalVariables.repositoriesRepository, e.toString()); | ||||
| 		} | ||||
|  | ||||
| 		return repository; | ||||
| 	} | ||||
|  | ||||
| 	public Repository fetchRepositoryByAccountIdByRepositoryId(int repositoryId, int repoAccountId) { | ||||
|  | ||||
| 		try { | ||||
|  | ||||
| 			Thread thread = new Thread(() -> repository = repositoriesDao.fetchRepositoryByAccountIdByRepositoryIdDao(repositoryId, repoAccountId)); | ||||
| 			thread.start(); | ||||
| 			thread.join(); | ||||
| 		} | ||||
| 		catch(InterruptedException e) { | ||||
|  | ||||
| 			Log.e(StaticGlobalVariables.repositoriesRepository, e.toString()); | ||||
| 		} | ||||
|  | ||||
| 		return repository; | ||||
| 	} | ||||
|  | ||||
| 	public static void deleteRepositoriesByAccount(final int repoAccountId) { | ||||
|  | ||||
| 		new Thread(() -> repositoriesDao.deleteRepositoriesByAccount(repoAccountId)).start(); | ||||
| 	} | ||||
|  | ||||
| 	public static void deleteRepository(final int repositoryId) { | ||||
|  | ||||
| 		new Thread(() -> repositoriesDao.deleteRepository(repositoryId)).start(); | ||||
| 	} | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,98 @@ | ||||
| package org.mian.gitnex.database.api; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.util.Log; | ||||
| import androidx.lifecycle.LiveData; | ||||
| import org.mian.gitnex.database.dao.UserAccountsDao; | ||||
| import org.mian.gitnex.database.db.GitnexDatabase; | ||||
| import org.mian.gitnex.database.models.UserAccount; | ||||
| import org.mian.gitnex.helpers.StaticGlobalVariables; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * Author M M Arif | ||||
|  */ | ||||
|  | ||||
| public class UserAccountsApi { | ||||
|  | ||||
| 	private static UserAccountsDao userAccountsDao; | ||||
| 	private static UserAccount userAccount; | ||||
| 	private static Integer checkAccount; | ||||
|  | ||||
| 	public UserAccountsApi(Context context) { | ||||
|  | ||||
| 		GitnexDatabase db; | ||||
| 		db = GitnexDatabase.getDatabaseInstance(context); | ||||
| 		userAccountsDao = db.userAccountsDao(); | ||||
| 	} | ||||
|  | ||||
| 	public void insertNewAccount(String accountName, String instanceUrl, String userName, String token, String serverVersion) { | ||||
|  | ||||
| 		UserAccount userAccount = new UserAccount(); | ||||
| 		userAccount.setAccountName(accountName); | ||||
| 		userAccount.setInstanceUrl(instanceUrl); | ||||
| 		userAccount.setUserName(userName); | ||||
| 		userAccount.setToken(token); | ||||
| 		userAccount.setServerVersion(serverVersion); | ||||
|  | ||||
| 		insertNewAccountAsync(userAccount); | ||||
| 	} | ||||
|  | ||||
| 	private static void insertNewAccountAsync(final UserAccount userAccount) { | ||||
|  | ||||
| 		new Thread(() -> userAccountsDao.newAccount(userAccount)).start(); | ||||
| 	} | ||||
|  | ||||
| 	public static void updateServerVersion(final String serverVersion, final int accountId) { | ||||
|  | ||||
| 		new Thread(() -> userAccountsDao.updateServerVersion(serverVersion, accountId)).start(); | ||||
| 	} | ||||
|  | ||||
| 	public static void updateToken(final int accountId, final String token) { | ||||
|  | ||||
| 		new Thread(() -> userAccountsDao.updateAccountToken(accountId, token)).start(); | ||||
| 	} | ||||
|  | ||||
| 	public UserAccount getAccountData(String accountName) { | ||||
|  | ||||
| 		try { | ||||
|  | ||||
| 			Thread thread = new Thread(() -> userAccount = userAccountsDao.fetchRowByAccount_(accountName)); | ||||
| 			thread.start(); | ||||
| 			thread.join(); | ||||
| 		} | ||||
| 		catch(InterruptedException e) { | ||||
|  | ||||
| 			Log.e(StaticGlobalVariables.userAccountsRepository, e.toString()); | ||||
| 		} | ||||
|  | ||||
| 		return userAccount; | ||||
| 	} | ||||
|  | ||||
| 	public Integer getCount(String accountName) { | ||||
|  | ||||
| 		try { | ||||
|  | ||||
| 			Thread thread = new Thread(() -> checkAccount = userAccountsDao.getCount(accountName)); | ||||
| 			thread.start(); | ||||
| 			thread.join(); | ||||
| 		} | ||||
| 		catch(InterruptedException e) { | ||||
|  | ||||
| 			Log.e(StaticGlobalVariables.userAccountsRepository, e.toString()); | ||||
| 		} | ||||
|  | ||||
| 		return checkAccount; | ||||
| 	} | ||||
|  | ||||
| 	public LiveData<List<UserAccount>> getAllAccounts() { | ||||
|  | ||||
| 		return userAccountsDao.fetchAllAccounts(); | ||||
| 	} | ||||
|  | ||||
| 	public static void deleteAccount(final int accountId) { | ||||
|  | ||||
| 		new Thread(() -> userAccountsDao.deleteAccount(accountId)).start(); | ||||
| 	} | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,53 @@ | ||||
| package org.mian.gitnex.database.dao; | ||||
|  | ||||
| import androidx.lifecycle.LiveData; | ||||
| import androidx.room.Dao; | ||||
| import androidx.room.Insert; | ||||
| import androidx.room.Query; | ||||
| import org.mian.gitnex.database.models.Draft; | ||||
| import org.mian.gitnex.database.models.DraftWithRepository; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * Author M M Arif | ||||
|  */ | ||||
|  | ||||
| @Dao | ||||
| public interface DraftsDao { | ||||
|  | ||||
|     @Insert | ||||
|     long insertDraft(Draft drafts); | ||||
|  | ||||
|     @Query("SELECT * FROM Drafts JOIN Repositories ON Repositories.repositoryId = Drafts.draftRepositoryId WHERE draftAccountId = :accountId" + | ||||
|             " ORDER BY " + | ||||
|             "draftId DESC") | ||||
|     LiveData<List<DraftWithRepository>> fetchAllDrafts(int accountId); | ||||
|  | ||||
|     @Query("SELECT * FROM Drafts WHERE draftAccountId = :accountId ORDER BY draftId DESC") | ||||
|     LiveData<List<Draft>> fetchDrafts(int accountId); | ||||
|  | ||||
|     @Query("SELECT * FROM Drafts WHERE draftAccountId = :accountId and draftRepositoryId = :repositoryId") | ||||
|     LiveData<Draft> fetchSingleDraftByAccountIdAndRepositoryId(int accountId, int repositoryId); | ||||
|  | ||||
|     @Query("SELECT * FROM Drafts WHERE draftId = :draftId") | ||||
|     LiveData<Draft> fetchDraftById(int draftId); | ||||
|  | ||||
|     @Query("SELECT * FROM Drafts WHERE issueId = :issueId") | ||||
|     LiveData<Draft> fetchDraftByIssueId(int issueId); | ||||
|  | ||||
|     @Query("SELECT count(draftId) FROM Drafts WHERE issueId = :issueId AND draftRepositoryId = :draftRepositoryId") | ||||
|     Integer checkDraftDao(int issueId, int draftRepositoryId); | ||||
|  | ||||
|     @Query("UPDATE Drafts SET draftText= :draftText WHERE draftId = :draftId") | ||||
|     void updateDraft(String draftText, int draftId); | ||||
|  | ||||
|     @Query("UPDATE Drafts SET draftText= :draftText WHERE issueId = :issueId AND draftRepositoryId = :draftRepositoryId") | ||||
|     void updateDraftByIssueId(String draftText, int issueId, int draftRepositoryId); | ||||
|  | ||||
|     @Query("DELETE FROM Drafts WHERE draftId = :draftId") | ||||
|     void deleteByDraftId(int draftId); | ||||
|  | ||||
|     @Query("DELETE FROM Drafts WHERE draftAccountId = :accountId") | ||||
|     void deleteAllDrafts(int accountId); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,47 @@ | ||||
| package org.mian.gitnex.database.dao; | ||||
|  | ||||
| import androidx.lifecycle.LiveData; | ||||
| import androidx.room.Dao; | ||||
| import androidx.room.Insert; | ||||
| import androidx.room.Query; | ||||
| import org.mian.gitnex.database.models.Repository; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * Author M M Arif | ||||
|  */ | ||||
|  | ||||
| @Dao | ||||
| public interface RepositoriesDao { | ||||
|  | ||||
|     @Insert | ||||
|     long newRepository(Repository repositories); | ||||
|  | ||||
|     @Query("SELECT * FROM Repositories ORDER BY repositoryId ASC") | ||||
|     LiveData<List<Repository>> fetchAllRepositories(); | ||||
|  | ||||
|     @Query("SELECT * FROM Repositories WHERE repoAccountId = :repoAccountId") | ||||
|     LiveData<List<Repository>> getAllRepositoriesByAccountDao(int repoAccountId); | ||||
|  | ||||
|     @Query("SELECT count(repositoryId) FROM Repositories WHERE repoAccountId = :repoAccountId AND repositoryOwner = :repositoryOwner AND repositoryName = :repositoryName") | ||||
|     Integer checkRepositoryDao(int repoAccountId, String repositoryOwner, String repositoryName); | ||||
|  | ||||
| 	@Query("SELECT * FROM Repositories WHERE repoAccountId = :repoAccountId AND repositoryOwner = :repositoryOwner AND repositoryName = :repositoryName") | ||||
| 	Repository getSingleRepositoryDao(int repoAccountId, String repositoryOwner, String repositoryName); | ||||
|  | ||||
|     @Query("SELECT * FROM Repositories WHERE repositoryId = :repositoryId") | ||||
|     Repository fetchRepositoryByIdDao(int repositoryId); | ||||
|  | ||||
|     @Query("SELECT * FROM Repositories WHERE repositoryId = :repositoryId AND repoAccountId = :repoAccountId") | ||||
|     Repository fetchRepositoryByAccountIdByRepositoryIdDao(int repositoryId, int repoAccountId); | ||||
|  | ||||
|     @Query("UPDATE Repositories SET repositoryOwner = :repositoryOwner, repositoryName = :repositoryName  WHERE repositoryId = :repositoryId") | ||||
|     void updateRepositoryOwnerAndName(String repositoryOwner, String repositoryName, int repositoryId); | ||||
|  | ||||
|     @Query("DELETE FROM Repositories WHERE repositoryId = :repositoryId") | ||||
|     void deleteRepository(int repositoryId); | ||||
|  | ||||
|     @Query("DELETE FROM Repositories WHERE repoAccountId = :repoAccountId") | ||||
|     void deleteRepositoriesByAccount(int repoAccountId); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,53 @@ | ||||
| package org.mian.gitnex.database.dao; | ||||
|  | ||||
| import androidx.lifecycle.LiveData; | ||||
| import androidx.room.Dao; | ||||
| import androidx.room.Insert; | ||||
| import androidx.room.Query; | ||||
| import org.mian.gitnex.database.models.UserAccount; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * Author M M Arif | ||||
|  */ | ||||
|  | ||||
| @Dao | ||||
| public interface UserAccountsDao { | ||||
|  | ||||
|     @Insert | ||||
|     void newAccount(UserAccount userAccounts); | ||||
|  | ||||
|     @Query("SELECT * FROM UserAccounts ORDER BY accountId ASC") | ||||
|     LiveData<List<UserAccount>> fetchAllAccounts(); | ||||
|  | ||||
|     @Query("SELECT COUNT(accountId) FROM UserAccounts WHERE accountName = :accountName") | ||||
|     Integer getCount(String accountName); | ||||
|  | ||||
|     @Query("SELECT * FROM UserAccounts WHERE accountName = :accountName") | ||||
|     UserAccount fetchRowByAccount_(String accountName); | ||||
|  | ||||
|     @Query("SELECT * FROM UserAccounts WHERE accountId = :accountId") | ||||
|     UserAccount fetchRowByAccountId(int accountId); | ||||
|  | ||||
|     @Query("UPDATE UserAccounts SET serverVersion = :serverVersion WHERE accountId = :accountId") | ||||
|     void updateServerVersion(String serverVersion, int accountId); | ||||
|  | ||||
|     @Query("UPDATE UserAccounts SET accountName = :accountName WHERE accountId = :accountId") | ||||
|     void updateAccountName(String accountName, int accountId); | ||||
|  | ||||
|     @Query("UPDATE UserAccounts SET token = :token WHERE accountId = :accountId") | ||||
|     void updateAccountToken(int accountId, String token); | ||||
|  | ||||
|     @Query("UPDATE UserAccounts SET instanceUrl = :instanceUrl, token = :token WHERE accountId = :accountId") | ||||
|     void updateHostInfo(String instanceUrl, String token, int accountId); | ||||
|  | ||||
|     @Query("UPDATE UserAccounts SET userName = :userName WHERE accountId = :accountId") | ||||
|     void updateUserName(String userName, int accountId); | ||||
|  | ||||
|     @Query("UPDATE UserAccounts SET instanceUrl = :instanceUrl, token = :token, userName = :userName, serverVersion = :serverVersion WHERE accountId = :accountId") | ||||
|     void updateAll(String instanceUrl, String token, String userName, String serverVersion, int accountId); | ||||
|  | ||||
|     @Query("DELETE FROM UserAccounts WHERE accountId = :accountId") | ||||
|     void deleteAccount(int accountId); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,55 @@ | ||||
| package org.mian.gitnex.database.db; | ||||
|  | ||||
| import android.content.Context; | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.room.Database; | ||||
| import androidx.room.Room; | ||||
| import androidx.room.RoomDatabase; | ||||
| import androidx.room.migration.Migration; | ||||
| import androidx.sqlite.db.SupportSQLiteDatabase; | ||||
| import org.mian.gitnex.database.dao.DraftsDao; | ||||
| import org.mian.gitnex.database.dao.RepositoriesDao; | ||||
| import org.mian.gitnex.database.dao.UserAccountsDao; | ||||
| import org.mian.gitnex.database.models.Draft; | ||||
| import org.mian.gitnex.database.models.Repository; | ||||
| import org.mian.gitnex.database.models.UserAccount; | ||||
|  | ||||
| /** | ||||
|  * Author M M Arif | ||||
|  */ | ||||
|  | ||||
| @Database(entities = {Draft.class, Repository.class, UserAccount.class}, | ||||
|         version = 1, exportSchema = false) | ||||
| public abstract class GitnexDatabase extends RoomDatabase { | ||||
|  | ||||
|     private static GitnexDatabase gitnexDatabase; | ||||
|  | ||||
|     public static GitnexDatabase getDatabaseInstance(Context context) { | ||||
|  | ||||
|         if (gitnexDatabase == null) { | ||||
|             String DB_NAME = "gitnex"; | ||||
|             gitnexDatabase = Room.databaseBuilder(context, GitnexDatabase.class, DB_NAME) | ||||
|                     //.fallbackToDestructiveMigration() | ||||
|                     //.addMigrations(MIGRATION_1_2) | ||||
|                     .build(); | ||||
|         } | ||||
|  | ||||
|         return gitnexDatabase; | ||||
|     } | ||||
|  | ||||
|     public abstract DraftsDao draftsDao(); | ||||
|  | ||||
|     public abstract RepositoriesDao repositoriesDao(); | ||||
|  | ||||
|     public abstract UserAccountsDao userAccountsDao(); | ||||
|  | ||||
|     private static final Migration MIGRATION_1_2 = new Migration(1, 2) { | ||||
|         @Override | ||||
|         public void migrate(@NonNull SupportSQLiteDatabase database) { | ||||
|  | ||||
|             //database.execSQL("DROP TABLE Drafts"); | ||||
| 	        //database.execSQL("ALTER TABLE 'Drafts' ADD COLUMN 'draftType' TEXT"); | ||||
|  | ||||
|         } | ||||
|     }; | ||||
| } | ||||
							
								
								
									
										89
									
								
								app/src/main/java/org/mian/gitnex/database/models/Draft.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								app/src/main/java/org/mian/gitnex/database/models/Draft.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| package org.mian.gitnex.database.models; | ||||
|  | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.room.Entity; | ||||
| import androidx.room.ForeignKey; | ||||
| import androidx.room.Index; | ||||
| import androidx.room.PrimaryKey; | ||||
| import java.io.Serializable; | ||||
| import static androidx.room.ForeignKey.CASCADE; | ||||
|  | ||||
| /** | ||||
|  * Author M M Arif | ||||
|  */ | ||||
|  | ||||
| @Entity(tableName = "Drafts", foreignKeys = @ForeignKey(entity = Repository.class, parentColumns = "repositoryId", childColumns = "draftRepositoryId", onDelete = CASCADE), indices = {@Index("draftRepositoryId")}) | ||||
| public class Draft implements Serializable { | ||||
|  | ||||
| 	@PrimaryKey(autoGenerate = true) | ||||
| 	private int draftId; | ||||
|  | ||||
| 	private int draftRepositoryId; | ||||
| 	private int draftAccountId; | ||||
| 	private int issueId; | ||||
| 	private String draftText; | ||||
| 	@Nullable | ||||
| 	private String draftType; | ||||
|  | ||||
| 	public int getDraftId() { | ||||
|  | ||||
| 		return draftId; | ||||
| 	} | ||||
|  | ||||
| 	public void setDraftId(int draftId) { | ||||
|  | ||||
| 		this.draftId = draftId; | ||||
| 	} | ||||
|  | ||||
| 	public int getDraftRepositoryId() { | ||||
|  | ||||
| 		return draftRepositoryId; | ||||
| 	} | ||||
|  | ||||
| 	public void setDraftRepositoryId(int draftRepositoryId) { | ||||
|  | ||||
| 		this.draftRepositoryId = draftRepositoryId; | ||||
| 	} | ||||
|  | ||||
| 	public int getDraftAccountId() { | ||||
|  | ||||
| 		return draftAccountId; | ||||
| 	} | ||||
|  | ||||
| 	public void setDraftAccountId(int draftAccountId) { | ||||
|  | ||||
| 		this.draftAccountId = draftAccountId; | ||||
| 	} | ||||
|  | ||||
| 	public int getIssueId() { | ||||
|  | ||||
| 		return issueId; | ||||
| 	} | ||||
|  | ||||
| 	public void setIssueId(int issueId) { | ||||
|  | ||||
| 		this.issueId = issueId; | ||||
| 	} | ||||
|  | ||||
| 	public String getDraftText() { | ||||
|  | ||||
| 		return draftText; | ||||
| 	} | ||||
|  | ||||
| 	public void setDraftText(String draftText) { | ||||
|  | ||||
| 		this.draftText = draftText; | ||||
| 	} | ||||
|  | ||||
| 	@Nullable | ||||
| 	public String getDraftType() { | ||||
|  | ||||
| 		return draftType; | ||||
| 	} | ||||
|  | ||||
| 	public void setDraftType(@Nullable String draftType) { | ||||
|  | ||||
| 		this.draftType = draftType; | ||||
| 	} | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,122 @@ | ||||
| package org.mian.gitnex.database.models; | ||||
|  | ||||
| /** | ||||
|  * Author M M Arif | ||||
|  */ | ||||
|  | ||||
| public class DraftWithRepository { | ||||
|  | ||||
| 	private int repositoryId; | ||||
| 	private int draftId; | ||||
|  | ||||
| 	private int repoAccountId; | ||||
| 	private String repositoryOwner; | ||||
| 	private String repositoryName; | ||||
|  | ||||
| 	private int draftRepositoryId; | ||||
| 	private int draftAccountId; | ||||
| 	private int issueId; | ||||
| 	private String draftText; | ||||
| 	private String draftType; | ||||
|  | ||||
| 	public int getRepositoryId() { | ||||
|  | ||||
| 		return repositoryId; | ||||
| 	} | ||||
|  | ||||
| 	public void setRepositoryId(int repositoryId) { | ||||
|  | ||||
| 		this.repositoryId = repositoryId; | ||||
| 	} | ||||
|  | ||||
| 	public int getDraftId() { | ||||
|  | ||||
| 		return draftId; | ||||
| 	} | ||||
|  | ||||
| 	public void setDraftId(int draftId) { | ||||
|  | ||||
| 		this.draftId = draftId; | ||||
| 	} | ||||
|  | ||||
| 	public int getRepoAccountId() { | ||||
|  | ||||
| 		return repoAccountId; | ||||
| 	} | ||||
|  | ||||
| 	public void setRepoAccountId(int repoAccountId) { | ||||
|  | ||||
| 		this.repoAccountId = repoAccountId; | ||||
| 	} | ||||
|  | ||||
| 	public String getRepositoryOwner() { | ||||
|  | ||||
| 		return repositoryOwner; | ||||
| 	} | ||||
|  | ||||
| 	public void setRepositoryOwner(String repositoryOwner) { | ||||
|  | ||||
| 		this.repositoryOwner = repositoryOwner; | ||||
| 	} | ||||
|  | ||||
| 	public String getRepositoryName() { | ||||
|  | ||||
| 		return repositoryName; | ||||
| 	} | ||||
|  | ||||
| 	public void setRepositoryName(String repositoryName) { | ||||
|  | ||||
| 		this.repositoryName = repositoryName; | ||||
| 	} | ||||
|  | ||||
| 	public int getDraftRepositoryId() { | ||||
|  | ||||
| 		return draftRepositoryId; | ||||
| 	} | ||||
|  | ||||
| 	public void setDraftRepositoryId(int draftRepositoryId) { | ||||
|  | ||||
| 		this.draftRepositoryId = draftRepositoryId; | ||||
| 	} | ||||
|  | ||||
| 	public int getDraftAccountId() { | ||||
|  | ||||
| 		return draftAccountId; | ||||
| 	} | ||||
|  | ||||
| 	public void setDraftAccountId(int draftAccountId) { | ||||
|  | ||||
| 		this.draftAccountId = draftAccountId; | ||||
| 	} | ||||
|  | ||||
| 	public int getIssueId() { | ||||
|  | ||||
| 		return issueId; | ||||
| 	} | ||||
|  | ||||
| 	public void setIssueId(int issueId) { | ||||
|  | ||||
| 		this.issueId = issueId; | ||||
| 	} | ||||
|  | ||||
| 	public String getDraftText() { | ||||
|  | ||||
| 		return draftText; | ||||
| 	} | ||||
|  | ||||
| 	public void setDraftText(String draftText) { | ||||
|  | ||||
| 		this.draftText = draftText; | ||||
| 	} | ||||
|  | ||||
| 	public String getDraftType() { | ||||
|  | ||||
| 		return draftType; | ||||
| 	} | ||||
|  | ||||
| 	public void setDraftType(String draftType) { | ||||
|  | ||||
| 		this.draftType = draftType; | ||||
| 	} | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,59 @@ | ||||
| package org.mian.gitnex.database.models; | ||||
|  | ||||
| import androidx.room.Entity; | ||||
| import androidx.room.ForeignKey; | ||||
| import androidx.room.Index; | ||||
| import androidx.room.PrimaryKey; | ||||
| import java.io.Serializable; | ||||
| import static androidx.room.ForeignKey.CASCADE; | ||||
|  | ||||
| /** | ||||
|  * Author M M Arif | ||||
|  */ | ||||
|  | ||||
| @Entity(tableName = "Repositories", foreignKeys = @ForeignKey(entity = UserAccount.class, | ||||
|         parentColumns = "accountId", | ||||
|         childColumns = "repoAccountId", | ||||
|         onDelete = CASCADE), | ||||
|         indices = {@Index("repoAccountId")}) | ||||
| public class Repository implements Serializable { | ||||
|  | ||||
|     @PrimaryKey(autoGenerate = true) | ||||
|     private int repositoryId; | ||||
|  | ||||
|     private int repoAccountId; | ||||
|     private String repositoryOwner; | ||||
|     private String repositoryName; | ||||
|  | ||||
|     public int getRepositoryId() { | ||||
|         return repositoryId; | ||||
|     } | ||||
|  | ||||
|     public void setRepositoryId(int repositoryId) { | ||||
|         this.repositoryId = repositoryId; | ||||
|     } | ||||
|  | ||||
|     public int getRepoAccountId() { | ||||
|         return repoAccountId; | ||||
|     } | ||||
|  | ||||
|     public void setRepoAccountId(int repoAccountId) { | ||||
|         this.repoAccountId = repoAccountId; | ||||
|     } | ||||
|  | ||||
|     public String getRepositoryOwner() { | ||||
|         return repositoryOwner; | ||||
|     } | ||||
|  | ||||
|     public void setRepositoryOwner(String repositoryOwner) { | ||||
|         this.repositoryOwner = repositoryOwner; | ||||
|     } | ||||
|  | ||||
|     public String getRepositoryName() { | ||||
|         return repositoryName; | ||||
|     } | ||||
|  | ||||
|     public void setRepositoryName(String repositoryName) { | ||||
|         this.repositoryName = repositoryName; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,75 @@ | ||||
| package org.mian.gitnex.database.models; | ||||
|  | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.room.Entity; | ||||
| import androidx.room.PrimaryKey; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * Author M M Arif | ||||
|  */ | ||||
|  | ||||
| @Entity(tableName = "userAccounts") | ||||
| public class UserAccount implements Serializable { | ||||
|  | ||||
|     @PrimaryKey(autoGenerate = true) | ||||
|     private int accountId; | ||||
|  | ||||
|     @Nullable | ||||
|     private String accountName; | ||||
|     private String instanceUrl; | ||||
|     private String userName; | ||||
|     private String token; | ||||
|     @Nullable | ||||
|     private String serverVersion; | ||||
|  | ||||
|     public int getAccountId() { | ||||
|         return accountId; | ||||
|     } | ||||
|  | ||||
|     public void setAccountId(int accountId) { | ||||
|         this.accountId = accountId; | ||||
|     } | ||||
|  | ||||
|     @Nullable | ||||
|     public String getAccountName() { | ||||
|         return accountName; | ||||
|     } | ||||
|  | ||||
|     public void setAccountName(@Nullable String accountName) { | ||||
|         this.accountName = accountName; | ||||
|     } | ||||
|  | ||||
|     public String getInstanceUrl() { | ||||
|         return instanceUrl; | ||||
|     } | ||||
|  | ||||
|     public void setInstanceUrl(String instanceUrl) { | ||||
|         this.instanceUrl = instanceUrl; | ||||
|     } | ||||
|  | ||||
|     public String getUserName() { | ||||
|         return userName; | ||||
|     } | ||||
|  | ||||
|     public void setUserName(String userName) { | ||||
|         this.userName = userName; | ||||
|     } | ||||
|  | ||||
|     public String getToken() { | ||||
|         return token; | ||||
|     } | ||||
|  | ||||
|     public void setToken(String token) { | ||||
|         this.token = token; | ||||
|     } | ||||
|  | ||||
|     @Nullable | ||||
|     public String getServerVersion() { | ||||
|         return serverVersion; | ||||
|     } | ||||
|  | ||||
|     public void setServerVersion(@Nullable String serverVersion) { | ||||
|         this.serverVersion = serverVersion; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user