From f006ba004a3ef646717a0b7ca60de0363019e80c Mon Sep 17 00:00:00 2001 From: kl3jvi Date: Sun, 20 Mar 2022 16:13:02 +0100 Subject: [PATCH] Fixing video player --- .idea/misc.xml | 4 + .../data/model/ui_models/AnimeMetaModel.kt | 2 +- .../animity/data/paging/SearchPagingSource.kt | 4 +- .../HomeRepositoryImpl.kt | 2 +- .../SearchRepositoryImpl.kt | 1 - .../fragment_repositories/HomeRepository.kt | 3 +- .../fragment_repositories/SearchRepository.kt | 1 - .../use_cases/GetAnimeDetailsUseCase.kt | 5 +- .../domain/use_cases/GetAnimesUseCase.kt | 11 +- .../domain/use_cases/GetEpisodeInfoUseCase.kt | 13 +- .../use_cases/GetSearchResultUseCase.kt | 6 +- .../ui/activities/login/LoginActivity.kt | 12 +- .../ui/activities/player/PlayerViewModel.kt | 2 +- .../HomeRecyclerViewAdapter.kt | 2 +- .../HomeRecyclerViewHolder.kt | 2 +- .../HomeRecyclerViewItem.kt | 2 +- .../animity/ui/fragments/home/HomeFragment.kt | 2 +- .../ui/fragments/home/HomeViewModel.kt | 2 +- .../ui/fragments/profile/ProfileFragment.kt | 36 ++-- .../com/kl3jvi/animity/utils/Constants.kt | 26 +-- .../java/com/kl3jvi/animity/utils/Resource.kt | 2 - .../kl3jvi/animity/utils/parser/HtmlParser.kt | 59 +++---- app/src/main/res/layout/fragment_profile.xml | 162 ++---------------- app/src/main/res/layout/item_profile_card.xml | 96 +++++++++++ .../main/res/layout/item_profile_header.xml | 26 +++ .../main/res/layout/item_today_selection.xml | 2 +- .../main/res/layout/layout_no_internet.xml | 30 ++++ app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/integers.xml | 2 +- app/src/main/res/values/strings.xml | 1 + build.gradle | 4 +- 31 files changed, 263 insertions(+), 260 deletions(-) rename app/src/main/java/com/kl3jvi/animity/ui/adapters/{testAdapter => homeAdapter}/HomeRecyclerViewAdapter.kt (98%) rename app/src/main/java/com/kl3jvi/animity/ui/adapters/{testAdapter => homeAdapter}/HomeRecyclerViewHolder.kt (98%) rename app/src/main/java/com/kl3jvi/animity/ui/adapters/{testAdapter => homeAdapter}/HomeRecyclerViewItem.kt (94%) create mode 100644 app/src/main/res/layout/item_profile_card.xml create mode 100644 app/src/main/res/layout/item_profile_header.xml create mode 100644 app/src/main/res/layout/layout_no_internet.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index 2f040ead..faf84286 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -83,8 +83,12 @@ + + + + diff --git a/app/src/main/java/com/kl3jvi/animity/data/model/ui_models/AnimeMetaModel.kt b/app/src/main/java/com/kl3jvi/animity/data/model/ui_models/AnimeMetaModel.kt index 0cb4d29e..5b12205e 100644 --- a/app/src/main/java/com/kl3jvi/animity/data/model/ui_models/AnimeMetaModel.kt +++ b/app/src/main/java/com/kl3jvi/animity/data/model/ui_models/AnimeMetaModel.kt @@ -4,7 +4,7 @@ import android.os.Parcelable import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey -import com.kl3jvi.animity.ui.adapters.testAdapter.HomeRecyclerViewItem +import com.kl3jvi.animity.ui.adapters.homeAdapter.HomeRecyclerViewItem import kotlinx.parcelize.Parcelize @Parcelize diff --git a/app/src/main/java/com/kl3jvi/animity/data/paging/SearchPagingSource.kt b/app/src/main/java/com/kl3jvi/animity/data/paging/SearchPagingSource.kt index 5df43869..9a792f51 100644 --- a/app/src/main/java/com/kl3jvi/animity/data/paging/SearchPagingSource.kt +++ b/app/src/main/java/com/kl3jvi/animity/data/paging/SearchPagingSource.kt @@ -6,7 +6,7 @@ import com.kl3jvi.animity.data.model.ui_models.AnimeMetaModel import com.kl3jvi.animity.data.network.anime_service.AnimeApiClient import com.kl3jvi.animity.utils.Constants import com.kl3jvi.animity.utils.Constants.Companion.STARTING_PAGE_INDEX -import com.kl3jvi.animity.utils.Constants.Companion.getHeader +import com.kl3jvi.animity.utils.Constants.Companion.getNetworkHeader import com.kl3jvi.animity.utils.parser.HtmlParser import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -27,7 +27,7 @@ class SearchPagingSource( val searchList = withContext(Dispatchers.IO) { HtmlParser.parseMovie( animeService.fetchSearchData( - header = getHeader(), + header = getNetworkHeader(), keyword = query, page = page ).string(), diff --git a/app/src/main/java/com/kl3jvi/animity/data/repository/fragment_repositories/HomeRepositoryImpl.kt b/app/src/main/java/com/kl3jvi/animity/data/repository/fragment_repositories/HomeRepositoryImpl.kt index 83cf2530..0b18211f 100644 --- a/app/src/main/java/com/kl3jvi/animity/data/repository/fragment_repositories/HomeRepositoryImpl.kt +++ b/app/src/main/java/com/kl3jvi/animity/data/repository/fragment_repositories/HomeRepositoryImpl.kt @@ -3,7 +3,7 @@ package com.kl3jvi.animity.data.repository.fragment_repositories import com.kl3jvi.animity.data.model.ui_models.toAnime import com.kl3jvi.animity.data.network.anime_service.AnimeApiClient import com.kl3jvi.animity.domain.repositories.fragment_repositories.HomeRepository -import com.kl3jvi.animity.ui.adapters.testAdapter.HomeRecyclerViewItem +import com.kl3jvi.animity.ui.adapters.homeAdapter.HomeRecyclerViewItem import com.kl3jvi.animity.utils.Constants.Companion.TYPE_MOVIE import com.kl3jvi.animity.utils.Constants.Companion.TYPE_NEW_SEASON import com.kl3jvi.animity.utils.Constants.Companion.TYPE_POPULAR_ANIME diff --git a/app/src/main/java/com/kl3jvi/animity/data/repository/fragment_repositories/SearchRepositoryImpl.kt b/app/src/main/java/com/kl3jvi/animity/data/repository/fragment_repositories/SearchRepositoryImpl.kt index cf978076..e7d69191 100644 --- a/app/src/main/java/com/kl3jvi/animity/data/repository/fragment_repositories/SearchRepositoryImpl.kt +++ b/app/src/main/java/com/kl3jvi/animity/data/repository/fragment_repositories/SearchRepositoryImpl.kt @@ -21,7 +21,6 @@ class SearchRepositoryImpl @Inject constructor( ) : SearchRepository { override fun fetchSearchData( - header: Map, keyword: String, ): Flow> { return Pager( diff --git a/app/src/main/java/com/kl3jvi/animity/domain/repositories/fragment_repositories/HomeRepository.kt b/app/src/main/java/com/kl3jvi/animity/domain/repositories/fragment_repositories/HomeRepository.kt index 501ce4ee..3c06f35b 100644 --- a/app/src/main/java/com/kl3jvi/animity/domain/repositories/fragment_repositories/HomeRepository.kt +++ b/app/src/main/java/com/kl3jvi/animity/domain/repositories/fragment_repositories/HomeRepository.kt @@ -1,7 +1,6 @@ package com.kl3jvi.animity.domain.repositories.fragment_repositories -import com.kl3jvi.animity.data.model.ui_models.AnimeMetaModel -import com.kl3jvi.animity.ui.adapters.testAdapter.HomeRecyclerViewItem +import com.kl3jvi.animity.ui.adapters.homeAdapter.HomeRecyclerViewItem import com.kl3jvi.animity.utils.parser.HtmlParser interface HomeRepository { diff --git a/app/src/main/java/com/kl3jvi/animity/domain/repositories/fragment_repositories/SearchRepository.kt b/app/src/main/java/com/kl3jvi/animity/domain/repositories/fragment_repositories/SearchRepository.kt index aff7695f..f95047f9 100644 --- a/app/src/main/java/com/kl3jvi/animity/domain/repositories/fragment_repositories/SearchRepository.kt +++ b/app/src/main/java/com/kl3jvi/animity/domain/repositories/fragment_repositories/SearchRepository.kt @@ -6,7 +6,6 @@ import kotlinx.coroutines.flow.Flow interface SearchRepository { fun fetchSearchData( - header: Map, keyword: String, ): Flow> } \ No newline at end of file diff --git a/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetAnimeDetailsUseCase.kt b/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetAnimeDetailsUseCase.kt index 45132ba4..0cfe88d2 100644 --- a/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetAnimeDetailsUseCase.kt +++ b/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetAnimeDetailsUseCase.kt @@ -7,6 +7,7 @@ import com.kl3jvi.animity.data.repository.fragment_repositories.DetailsRepositor import com.kl3jvi.animity.persistence.AnimeRepository import com.kl3jvi.animity.persistence.EpisodeDao import com.kl3jvi.animity.utils.Constants +import com.kl3jvi.animity.utils.Constants.Companion.getNetworkHeader import com.kl3jvi.animity.utils.Resource import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow @@ -27,7 +28,7 @@ class GetAnimeDetailsUseCase @Inject constructor( fun fetchAnimeInfo(url: String): Flow> = flow { try { emit(Resource.Loading()) - val response = detailsRepository.fetchAnimeInfo(Constants.getHeader(), url) + val response = detailsRepository.fetchAnimeInfo(getNetworkHeader(), url) emit( Resource.Success( data = response @@ -56,7 +57,7 @@ class GetAnimeDetailsUseCase @Inject constructor( try { emit(Resource.Loading()) val response = detailsRepository.fetchEpisodeList( - header = Constants.getHeader(), + header = getNetworkHeader(), id = id ?: "", endEpisode = endEpisode ?: "0", alias = alias ?: "" diff --git a/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetAnimesUseCase.kt b/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetAnimesUseCase.kt index bfce80a8..2a5fb257 100644 --- a/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetAnimesUseCase.kt +++ b/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetAnimesUseCase.kt @@ -1,8 +1,9 @@ package com.kl3jvi.animity.domain.use_cases import com.kl3jvi.animity.data.repository.fragment_repositories.HomeRepositoryImpl -import com.kl3jvi.animity.ui.adapters.testAdapter.HomeRecyclerViewItem +import com.kl3jvi.animity.ui.adapters.homeAdapter.HomeRecyclerViewItem import com.kl3jvi.animity.utils.Constants +import com.kl3jvi.animity.utils.Constants.Companion.getNetworkHeader import com.kl3jvi.animity.utils.Resource import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.async @@ -25,17 +26,17 @@ class GetAnimesUseCase @Inject constructor( val recentSubDubDeferred = async { homeRepository.fetchRecentSubOrDub( - Constants.getHeader(), + getNetworkHeader(), 1, Constants.TYPE_RECENT_DUB ) } val newSeasonDeferred = - async { homeRepository.fetchNewSeason(Constants.getHeader(), 1) } + async { homeRepository.fetchNewSeason(getNetworkHeader(), 1) } val moviesDeferred = - async { homeRepository.fetchMovies(Constants.getHeader(), 1) } + async { homeRepository.fetchMovies(getNetworkHeader(), 1) } val popularDeferred = - async { homeRepository.fetchPopularFromAjax(Constants.getHeader(), 1) } + async { homeRepository.fetchPopularFromAjax(getNetworkHeader(), 1) } val recentSub = recentSubDubDeferred.await() val newSeason = newSeasonDeferred.await() diff --git a/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetEpisodeInfoUseCase.kt b/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetEpisodeInfoUseCase.kt index b5bdadc2..ef4b659a 100644 --- a/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetEpisodeInfoUseCase.kt +++ b/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetEpisodeInfoUseCase.kt @@ -1,7 +1,7 @@ package com.kl3jvi.animity.domain.use_cases +import android.util.Log import com.kl3jvi.animity.data.repository.activity_repositories.PlayerRepositoryImpl -import com.kl3jvi.animity.utils.Constants import com.kl3jvi.animity.utils.Constants.Companion.REFERER import com.kl3jvi.animity.utils.Constants.Companion.getNetworkHeader import com.kl3jvi.animity.utils.Resource @@ -20,28 +20,31 @@ class GetEpisodeInfoUseCase @Inject constructor( operator fun invoke(url: String) = flow { emit(Resource.Loading()) try { - val response = playerRepository.fetchEpisodeMediaUrl(Constants.getHeader(), url) + val response = playerRepository.fetchEpisodeMediaUrl(getNetworkHeader(), url) emit(Resource.Success(data = response)) } catch (e: Exception) { emit(Resource.Error("Oops an error occurred, try again!")) } }.flowOn(ioDispatcher) -// + + // fun fetchM3U8(url: String?) = flow { emit(Resource.Loading()) try { val response = playerRepository.fetchM3u8Url(getNetworkHeader(), url ?: "") + Log.e("response", response.toString()) emit(Resource.Success(data = response.last())) } catch (e: Exception) { e.printStackTrace() emit(Resource.Error("Couldn't find a Stream for this Anime")) } }.flowOn(ioDispatcher) -// + + // fun fetchEncryptedAjaxUrl(url: String?) = flow { emit(Resource.Loading()) try { - val response = playerRepository.fetchEncryptedAjaxUrl(Constants.getHeader(), url ?: "") + val response = playerRepository.fetchEncryptedAjaxUrl(getNetworkHeader(), url ?: "") val streamUrl = "${REFERER}encrypt-ajax.php?${response}" emit(Resource.Success(data = streamUrl)) } catch (e: Exception) { diff --git a/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetSearchResultUseCase.kt b/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetSearchResultUseCase.kt index fc8b7552..8c309e73 100644 --- a/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetSearchResultUseCase.kt +++ b/app/src/main/java/com/kl3jvi/animity/domain/use_cases/GetSearchResultUseCase.kt @@ -3,7 +3,6 @@ package com.kl3jvi.animity.domain.use_cases import androidx.paging.PagingData import com.kl3jvi.animity.data.model.ui_models.AnimeMetaModel import com.kl3jvi.animity.data.repository.fragment_repositories.SearchRepositoryImpl -import com.kl3jvi.animity.utils.Constants import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOn @@ -17,9 +16,6 @@ class GetSearchResultUseCase @Inject constructor( ) { operator fun invoke(searchQuery: String): Flow> { - return searchRepository.fetchSearchData( - Constants.getHeader(), - searchQuery - ).flowOn(ioDispatcher) + return searchRepository.fetchSearchData(searchQuery).flowOn(ioDispatcher) } } diff --git a/app/src/main/java/com/kl3jvi/animity/ui/activities/login/LoginActivity.kt b/app/src/main/java/com/kl3jvi/animity/ui/activities/login/LoginActivity.kt index 87826e08..1cd46414 100644 --- a/app/src/main/java/com/kl3jvi/animity/ui/activities/login/LoginActivity.kt +++ b/app/src/main/java/com/kl3jvi/animity/ui/activities/login/LoginActivity.kt @@ -79,8 +79,8 @@ class LoginActivity : BindingActivity(R.layout.activity_lo .appendPath("v2") .appendPath("oauth") .appendPath("authorize") - .appendQueryParameter("client_id", ANILIST_ID) - .appendQueryParameter("redirect_uri", REDIRECT_URI) + .appendQueryParameter("client_id", anilistid) + .appendQueryParameter("redirect_uri", redirecturi) .appendQueryParameter("response_type", "code") .build() } @@ -88,16 +88,16 @@ class LoginActivity : BindingActivity(R.layout.activity_lo override fun onHandleAuthIntent(intent: Intent?) { if (intent != null && intent.data != null) { val uri = intent.data - if (uri.toString().startsWith(REDIRECT_URI)) { + if (uri.toString().startsWith(redirecturi)) { val authorizationToken = uri?.getQueryParameter("code") Log.e("AUTH TOKEN", authorizationToken.toString()) if (!authorizationToken.isNullOrEmpty()) { collectFlow( viewModel.getAccessToken( grantType = AUTH_GRANT_TYPE, - clientId = ANILIST_ID.toInt(), - clientSecret = ANILIST_SECRET, - redirectUri = REDIRECT_URI, + clientId = anilistid.toInt(), + clientSecret = anilistsecret, + redirectUri = redirecturi, authorizationToken = authorizationToken ) ) { state -> diff --git a/app/src/main/java/com/kl3jvi/animity/ui/activities/player/PlayerViewModel.kt b/app/src/main/java/com/kl3jvi/animity/ui/activities/player/PlayerViewModel.kt index 219ee906..f65f8468 100644 --- a/app/src/main/java/com/kl3jvi/animity/ui/activities/player/PlayerViewModel.kt +++ b/app/src/main/java/com/kl3jvi/animity/ui/activities/player/PlayerViewModel.kt @@ -58,7 +58,7 @@ class PlayerViewModel @Inject constructor( fun getPlaybackPosition(episodeUrl: String): LiveData { viewModelScope.launch(ioDispatcher) { if (episodeDao.isEpisodeOnDatabase(episodeUrl)) { - _playBackPosition.value = episodeDao.getEpisodeContent(episodeUrl).watchedDuration + _playBackPosition.postValue(episodeDao.getEpisodeContent(episodeUrl).watchedDuration) } } return _playBackPosition diff --git a/app/src/main/java/com/kl3jvi/animity/ui/adapters/testAdapter/HomeRecyclerViewAdapter.kt b/app/src/main/java/com/kl3jvi/animity/ui/adapters/homeAdapter/HomeRecyclerViewAdapter.kt similarity index 98% rename from app/src/main/java/com/kl3jvi/animity/ui/adapters/testAdapter/HomeRecyclerViewAdapter.kt rename to app/src/main/java/com/kl3jvi/animity/ui/adapters/homeAdapter/HomeRecyclerViewAdapter.kt index 3a008bf5..31421e20 100644 --- a/app/src/main/java/com/kl3jvi/animity/ui/adapters/testAdapter/HomeRecyclerViewAdapter.kt +++ b/app/src/main/java/com/kl3jvi/animity/ui/adapters/homeAdapter/HomeRecyclerViewAdapter.kt @@ -1,4 +1,4 @@ -package com.kl3jvi.animity.ui.adapters.testAdapter +package com.kl3jvi.animity.ui.adapters.homeAdapter import android.view.LayoutInflater import android.view.ViewGroup diff --git a/app/src/main/java/com/kl3jvi/animity/ui/adapters/testAdapter/HomeRecyclerViewHolder.kt b/app/src/main/java/com/kl3jvi/animity/ui/adapters/homeAdapter/HomeRecyclerViewHolder.kt similarity index 98% rename from app/src/main/java/com/kl3jvi/animity/ui/adapters/testAdapter/HomeRecyclerViewHolder.kt rename to app/src/main/java/com/kl3jvi/animity/ui/adapters/homeAdapter/HomeRecyclerViewHolder.kt index 0d404440..94585eba 100644 --- a/app/src/main/java/com/kl3jvi/animity/ui/adapters/testAdapter/HomeRecyclerViewHolder.kt +++ b/app/src/main/java/com/kl3jvi/animity/ui/adapters/homeAdapter/HomeRecyclerViewHolder.kt @@ -1,4 +1,4 @@ -package com.kl3jvi.animity.ui.adapters.testAdapter +package com.kl3jvi.animity.ui.adapters.homeAdapter import android.graphics.Color import android.view.View diff --git a/app/src/main/java/com/kl3jvi/animity/ui/adapters/testAdapter/HomeRecyclerViewItem.kt b/app/src/main/java/com/kl3jvi/animity/ui/adapters/homeAdapter/HomeRecyclerViewItem.kt similarity index 94% rename from app/src/main/java/com/kl3jvi/animity/ui/adapters/testAdapter/HomeRecyclerViewItem.kt rename to app/src/main/java/com/kl3jvi/animity/ui/adapters/homeAdapter/HomeRecyclerViewItem.kt index bb2dc5f3..88a9a23e 100644 --- a/app/src/main/java/com/kl3jvi/animity/ui/adapters/testAdapter/HomeRecyclerViewItem.kt +++ b/app/src/main/java/com/kl3jvi/animity/ui/adapters/homeAdapter/HomeRecyclerViewItem.kt @@ -1,4 +1,4 @@ -package com.kl3jvi.animity.ui.adapters.testAdapter +package com.kl3jvi.animity.ui.adapters.homeAdapter import com.kl3jvi.animity.data.model.ui_models.AnimeMetaModel import com.kl3jvi.animity.data.model.ui_models.GenreModel diff --git a/app/src/main/java/com/kl3jvi/animity/ui/fragments/home/HomeFragment.kt b/app/src/main/java/com/kl3jvi/animity/ui/fragments/home/HomeFragment.kt index ea5301a0..e1573d14 100644 --- a/app/src/main/java/com/kl3jvi/animity/ui/fragments/home/HomeFragment.kt +++ b/app/src/main/java/com/kl3jvi/animity/ui/fragments/home/HomeFragment.kt @@ -8,7 +8,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.kl3jvi.animity.R import com.kl3jvi.animity.databinding.FragmentHomeBinding import com.kl3jvi.animity.ui.activities.main.MainActivity -import com.kl3jvi.animity.ui.adapters.testAdapter.HomeRecyclerViewAdapter +import com.kl3jvi.animity.ui.adapters.homeAdapter.HomeRecyclerViewAdapter import com.kl3jvi.animity.ui.base.viewBinding import com.kl3jvi.animity.utils.NetworkUtils.isConnectedToInternet import com.kl3jvi.animity.utils.Resource diff --git a/app/src/main/java/com/kl3jvi/animity/ui/fragments/home/HomeViewModel.kt b/app/src/main/java/com/kl3jvi/animity/ui/fragments/home/HomeViewModel.kt index ec530a1a..70e8380c 100644 --- a/app/src/main/java/com/kl3jvi/animity/ui/fragments/home/HomeViewModel.kt +++ b/app/src/main/java/com/kl3jvi/animity/ui/fragments/home/HomeViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.kl3jvi.animity.domain.use_cases.GetAnimesUseCase -import com.kl3jvi.animity.ui.adapters.testAdapter.HomeRecyclerViewItem +import com.kl3jvi.animity.ui.adapters.homeAdapter.HomeRecyclerViewItem import com.kl3jvi.animity.utils.Resource import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher diff --git a/app/src/main/java/com/kl3jvi/animity/ui/fragments/profile/ProfileFragment.kt b/app/src/main/java/com/kl3jvi/animity/ui/fragments/profile/ProfileFragment.kt index 45cb15dd..bc76e676 100644 --- a/app/src/main/java/com/kl3jvi/animity/ui/fragments/profile/ProfileFragment.kt +++ b/app/src/main/java/com/kl3jvi/animity/ui/fragments/profile/ProfileFragment.kt @@ -5,9 +5,6 @@ import android.view.* import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.fragment.app.viewModels -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import coil.load import com.apollographql.apollo3.api.ApolloResponse import com.kl3jvi.animity.AnimeListCollectionQuery import com.kl3jvi.animity.R @@ -17,7 +14,6 @@ import com.kl3jvi.animity.databinding.FragmentProfileGuestBinding import com.kl3jvi.animity.ui.activities.login.LoginActivity import com.kl3jvi.animity.ui.activities.main.MainActivity import com.kl3jvi.animity.ui.base.BaseFragment -import com.kl3jvi.animity.utils.Constants.Companion.DEFAULT_COVER import com.kl3jvi.animity.utils.NetworkUtils.isConnectedToInternet import com.kl3jvi.animity.utils.hide import com.kl3jvi.animity.utils.launchActivity @@ -64,18 +60,18 @@ class ProfileFragment : BaseFragment() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.spinner.onItemSelectedListener = this +// binding.spinner.onItemSelectedListener = this } private fun getProfileData() { observeLiveData(viewModel.profileData, viewLifecycleOwner) { - binding.bgImage.load( - if (it.data?.user?.bannerImage.isNullOrEmpty()) - DEFAULT_COVER - else - it.data?.user?.bannerImage - ) +// binding.bgImage.load( +// if (it.data?.user?.bannerImage.isNullOrEmpty()) +// DEFAULT_COVER +// else +// it.data?.user?.bannerImage +// ) binding.userData = it.data } } @@ -84,11 +80,11 @@ class ProfileFragment : BaseFragment() observeLiveData(viewModel.animeList, viewLifecycleOwner) { animeCollectionResponse -> binding.animeData = animeCollectionResponse.data animeCollectionResponseGlobal = animeCollectionResponse - val animeRecyclerView = binding.watchedAnime - animeRecyclerView.layoutManager = LinearLayoutManager( - requireContext(), - RecyclerView.HORIZONTAL, false - ) +// val animeRecyclerView = binding.watchedAnime +// animeRecyclerView.layoutManager = LinearLayoutManager( +// requireContext(), +// RecyclerView.HORIZONTAL, false +// ) animeCollectionResponse.data?.media?.lists?.toList()?.let { addSpinnerItems(it) } @@ -115,7 +111,7 @@ class ProfileFragment : BaseFragment() private fun addSpinnerItems(passedArray: List) { val list = passedArray.map { it?.name } - val spinner = binding.spinner +// val spinner = binding.spinner val spinnerArrayAdapter: ArrayAdapter = ArrayAdapter( requireContext(), R.layout.spinner_item, @@ -123,7 +119,7 @@ class ProfileFragment : BaseFragment() list ) //selected item will look like a spinner set from XML spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item) - spinner.adapter = spinnerArrayAdapter +// spinner.adapter = spinnerArrayAdapter } @@ -166,11 +162,11 @@ class ProfileFragment : BaseFragment() private fun handleNetworkChanges() { requireActivity().isConnectedToInternet(viewLifecycleOwner) { isConnected -> if (!isGuestLogin() && isConnected) { - binding.hasInternet.show() +// binding.hasInternet.show() binding.noInternet.hide() } else { binding.noInternet.show() - binding.hasInternet.hide() +// binding.hasInternet.hide() } } } diff --git a/app/src/main/java/com/kl3jvi/animity/utils/Constants.kt b/app/src/main/java/com/kl3jvi/animity/utils/Constants.kt index 232aadcb..72c4cb9d 100644 --- a/app/src/main/java/com/kl3jvi/animity/utils/Constants.kt +++ b/app/src/main/java/com/kl3jvi/animity/utils/Constants.kt @@ -20,7 +20,7 @@ class Constants { const val AUTH_URL = "https://anilist.co/api/v2/oauth/token" // Base URLS - const val BASE_URL = "https://gogoanime.fi" + const val BASE_URL = "https://gogoanime.gg" const val ANILIST_API_URL = "https://graphql.anilist.co" const val EPISODE_LOAD_URL = "https://ajax.gogocdn.net/ajax/load-list-episode" @@ -31,8 +31,7 @@ class Constants { const val TERMS_AND_PRIVACY_LINK = "https://anilist.co/terms" const val SIGNUP_URL = "https://anilist.co/signup" - const val DEFAULT_COVER = - "https://s4.anilist.co/file/anilistcdn/user/banner/n189170-XTnyb5J5KRai.jpg" + const val DEFAULT_COVER = "https://bit.ly/3p6DE28" // Model Type @@ -54,13 +53,18 @@ class Constants { private const val ORIGIN = "https://streamani.io" const val REFERER = "https://streamani.io/" - fun getHeader(): Map { - return mapOf( - "referer" to REFERER, - "origin" to ORIGIN, - "user-agent" to USER_AGENT - ) - } + // fun getHeader(): Map { +// return mapOf( +// "referer" to REFERER, +// "origin" to ORIGIN, +// "user-agent" to USER_AGENT +// ) +// } + + //Gogoanime Secrets + const val GogoSecretkey = "25716538522938396164662278833288" + const val GogoSecretIV = "1285672985238393" + val GogoPadding = byteArrayOf(0x8, 0xe, 0x3, 0x8, 0x9, 0x3, 0x4, 0x9) fun getSafeString(string: String?) = string.toString() @@ -91,7 +95,7 @@ class Constants { "sec-fetch-user" to "?1", "sec-fetch-mode" to "navigate", "sec-fetch-dest" to "video" - ) + getHeader() // Adds the headers from the provider, e.g Authorization + ) + getNetworkHeader() // Adds the headers from the provider, e.g Authorization setDefaultRequestProperties(headers) } } diff --git a/app/src/main/java/com/kl3jvi/animity/utils/Resource.kt b/app/src/main/java/com/kl3jvi/animity/utils/Resource.kt index 29f17930..bc23e798 100644 --- a/app/src/main/java/com/kl3jvi/animity/utils/Resource.kt +++ b/app/src/main/java/com/kl3jvi/animity/utils/Resource.kt @@ -1,7 +1,5 @@ package com.kl3jvi.animity.utils -import com.kl3jvi.animity.ui.adapters.testAdapter.HomeRecyclerViewItem - sealed class Resource(val data: T? = null, val message: String? = null) { class Success(data: T?) : Resource(data) class Error(message: String?) : Resource(null, message) diff --git a/app/src/main/java/com/kl3jvi/animity/utils/parser/HtmlParser.kt b/app/src/main/java/com/kl3jvi/animity/utils/parser/HtmlParser.kt index 63bb4480..f58ee174 100644 --- a/app/src/main/java/com/kl3jvi/animity/utils/parser/HtmlParser.kt +++ b/app/src/main/java/com/kl3jvi/animity/utils/parser/HtmlParser.kt @@ -1,13 +1,11 @@ package com.kl3jvi.animity.utils.parser import android.os.Build -import android.util.Log import com.kl3jvi.animity.data.model.ui_models.* -import org.apache.commons.lang3.RandomStringUtils +import com.kl3jvi.animity.utils.Constants import org.json.JSONObject import org.jsoup.Jsoup import org.jsoup.select.Elements -import java.net.URLDecoder import java.util.* import javax.crypto.Cipher import javax.crypto.spec.IvParameterSpec @@ -18,6 +16,7 @@ import javax.crypto.spec.SecretKeySpec */ object HtmlParser { + fun parseRecentSubOrDub(response: String, typeValue: Int): ArrayList { val animeMetaModelList: ArrayList = ArrayList() val document = Jsoup.parse(response) @@ -26,7 +25,6 @@ object HtmlParser { lists?.forEach { anime -> val animeInfo = anime.getElementsByClass("name").first().select("a") val title = animeInfo.attr("title") - Log.e("HASHED FROM PARSER", title.lowercase(Locale.getDefault()).hashCode().toString()) val episodeUrl = animeInfo.attr("href") val episodeNumber = anime.getElementsByClass("episode").first().text() val animeImageInfo = anime.selectFirst("a") @@ -214,7 +212,7 @@ object HtmlParser { private fun decryptAES(encrypted: String, key: String, iv: String): String { val ix = IvParameterSpec(iv.toByteArray()) - val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") + val cipher = Cipher.getInstance("AES/CBC/NoPadding") val secretKey = SecretKeySpec(key.toByteArray(Charsets.UTF_8), "AES") cipher.init(Cipher.DECRYPT_MODE, secretKey, ix) return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -233,14 +231,15 @@ object HtmlParser { private fun encryptAes(text: String, key: String, iv: String): String { val ix = IvParameterSpec(iv.toByteArray()) - val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") + val cipher = Cipher.getInstance("AES/CBC/NoPadding") val secretKey = SecretKeySpec(key.toByteArray(), "AES") cipher.init(Cipher.ENCRYPT_MODE, secretKey, ix) return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - Base64.getEncoder().encodeToString(cipher.doFinal(text.toByteArray())) + Base64.getEncoder() + .encodeToString(cipher.doFinal(text.toByteArray() + Constants.GogoPadding)) } else { android.util.Base64.encodeToString( - cipher.doFinal(text.toByteArray()), + cipher.doFinal(text.toByteArray() + Constants.GogoPadding), android.util.Base64.DEFAULT ) } @@ -249,36 +248,20 @@ object HtmlParser { fun parseEncryptAjax(response: String): String { val document = Jsoup.parse(response) - val value6 = document.getElementsByAttributeValue("data-name", "ts").attr("data-value") - val value5 = document.getElementsByAttributeValue("name", "crypto").attr("content") - val value1 = decryptAES( - document.getElementsByAttributeValue("data-name", "crypto").attr("data-value"), - URLDecoder.decode(value6 + value6, Charsets.UTF_8.name()), - URLDecoder.decode(value6, Charsets.UTF_8.name()) - ) - val value4 = decryptAES( - value5, - URLDecoder.decode(value1, Charsets.UTF_8.name()), - URLDecoder.decode(value6, Charsets.UTF_8.name()) - ) - val value2 = RandomStringUtils.randomAlphanumeric(16) - val value3 = URLDecoder.decode(value4, Charsets.UTF_8.name()).toString() - val encrypted = encryptAes( - value4.removeRange(value4.indexOf("&"), value4.length), - URLDecoder.decode(value1, Charsets.UTF_8.name()), - URLDecoder.decode(value2, Charsets.UTF_8.name()) - ) - return "id=" + encrypted + "&time=" + "00" + value2 + "00" + value3.substring( - value3.indexOf( - "&" - ) - ) + val value2 = document.select("script[data-name='crypto']").attr("data-value") + val decryptkey = + decryptAES(value2, Constants.GogoSecretkey, Constants.GogoSecretIV).replaceAfter( + "&", + "" + ).removeSuffix("&") + val encrypted = encryptAes(decryptkey, Constants.GogoSecretkey, Constants.GogoSecretIV) + return "id=$encrypted" } fun parseMediaUrl(response: String): EpisodeInfo { val mediaUrl: String? val document = Jsoup.parse(response) - val info = document?.getElementsByClass("vidcdn")?.first()?.select("a") + val info = document?.getElementsByClass("anime")?.first()?.select("a") mediaUrl = info?.attr("data-video").toString() val nextEpisodeUrl = document.getElementsByClass("anime_video_body_episodes_r")?.select("a")?.first() @@ -297,8 +280,14 @@ object HtmlParser { fun parseEncryptedUrls(response: String): ArrayList { val urls: ArrayList = ArrayList() var i = 0 - val res = JSONObject(response).getJSONArray("source") - Log.e("resu,", res.toString()) + var crackit = JSONObject(response).getString("data") + crackit = decryptAES( + crackit, + Constants.GogoSecretkey, + Constants.GogoSecretIV + ).replace("""o" - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toTopOf="parent" + tools:listitem="@layout/item_profile_card" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_profile_card.xml b/app/src/main/res/layout/item_profile_card.xml new file mode 100644 index 00000000..09dc9fa2 --- /dev/null +++ b/app/src/main/res/layout/item_profile_card.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_profile_header.xml b/app/src/main/res/layout/item_profile_header.xml new file mode 100644 index 00000000..82919a4f --- /dev/null +++ b/app/src/main/res/layout/item_profile_header.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_today_selection.xml b/app/src/main/res/layout/item_today_selection.xml index a1fe095f..7dae3a62 100644 --- a/app/src/main/res/layout/item_today_selection.xml +++ b/app/src/main/res/layout/item_today_selection.xml @@ -6,7 +6,7 @@ + type="com.kl3jvi.animity.ui.adapters.homeAdapter.HomeRecyclerViewItem.Anime" /> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index c9464e33..a20e6848 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -13,4 +13,5 @@ 20dp 5dp 10dp + 32dp \ No newline at end of file diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml index 418a2980..60b0fa3f 100644 --- a/app/src/main/res/values/integers.xml +++ b/app/src/main/res/values/integers.xml @@ -1,4 +1,4 @@ - 300 + 200 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5f351cfc..3b23d219 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -82,5 +82,6 @@ shared_anime_image Player Settings Donate Creator + Connecting, Please Wait! \ No newline at end of file diff --git a/build.gradle b/build.gradle index 8862128f..d166fb6b 100644 --- a/build.gradle +++ b/build.gradle @@ -8,14 +8,14 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.1' + classpath 'com.android.tools.build:gradle:7.1.2' classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10' classpath "com.google.dagger:hilt-android-gradle-plugin:2.40.5" classpath 'com.google.gms:google-services:4.3.10' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' // classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:0.13.4' - def nav_version = "2.3.5" + def nav_version = '2.4.1' classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"