diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
old mode 100644
new mode 100755
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
old mode 100644
new mode 100755
index 88ea3aa1..3cc336b9
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -1,6 +1,22 @@
+
+
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
old mode 100644
new mode 100755
diff --git a/.idea/dictionaries/shabinder.xml b/.idea/dictionaries/shabinder.xml
old mode 100644
new mode 100755
index ac6c8e56..7218236f
--- a/.idea/dictionaries/shabinder.xml
+++ b/.idea/dictionaries/shabinder.xml
@@ -2,15 +2,21 @@
downloadrecord
+ emoji
ffmpeg
flyer
insta
instagram
+ jetbrains
+ kotlinx
mainfragment
maxresdefault
moshi
+ mozilla
musicforeveryone
musicplaceholder
+ raleway
+ semibold
shabinder
singh
spoti
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
old mode 100644
new mode 100755
index 8d4ad2e2..37d461f3
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -16,6 +16,7 @@
+
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
old mode 100644
new mode 100755
diff --git a/.idea/misc.xml b/.idea/misc.xml
old mode 100644
new mode 100755
index 6a0d5af2..d10a516c
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -8,7 +8,7 @@
-
+
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
old mode 100644
new mode 100755
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
old mode 100644
new mode 100755
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
diff --git a/ScreenShots/DownloadHistory.png b/ScreenShots/DownloadHistory.png
old mode 100644
new mode 100755
diff --git a/ScreenShots/HomeScreen.png b/ScreenShots/HomeScreen.png
old mode 100644
new mode 100755
diff --git a/ScreenShots/LibraryScreen.jpg b/ScreenShots/LibraryScreen.jpg
old mode 100644
new mode 100755
diff --git a/ScreenShots/LibraryScreen2.jpg b/ScreenShots/LibraryScreen2.jpg
old mode 100644
new mode 100755
diff --git a/ScreenShots/Notification.png b/ScreenShots/Notification.png
old mode 100644
new mode 100755
diff --git a/ScreenShots/PlayList.png b/ScreenShots/PlayList.png
old mode 100644
new mode 100755
diff --git a/app/.gitignore b/app/.gitignore
old mode 100644
new mode 100755
diff --git a/app/SpotifyDownload.png b/app/SpotifyDownload.png
old mode 100644
new mode 100755
diff --git a/app/build.gradle b/app/build.gradle
old mode 100644
new mode 100755
index d8a2a6c8..0d1ba49f
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -25,7 +25,7 @@ apply plugin: 'dagger.hilt.android.plugin'
android {
compileSdkVersion 29
- buildToolsVersion "30.0.0"
+ buildToolsVersion "30.0.2"
buildFeatures{
dataBinding = true
@@ -35,8 +35,8 @@ android {
applicationId 'com.shabinder.spotiflyer'
minSdkVersion 22
targetSdkVersion 29
- versionCode 5
- versionName "1.4"
+ versionCode 6
+ versionName "1.5"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
packagingOptions {
@@ -61,6 +61,9 @@ android {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
+ kotlinOptions {
+ jvmTarget = "1.8"
+ }
lintOptions {
abortOnError false
}
@@ -73,20 +76,20 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include:['*.jar'])
- implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
- implementation 'androidx.core:core-ktx:1.3.1'
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.10"
+ implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.browser:browser:1.2.0'
- implementation 'androidx.webkit:webkit:1.2.0'
- implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ implementation 'androidx.webkit:webkit:1.3.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
- implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
- implementation 'androidx.navigation:navigation-ui-ktx:2.3.0'
+ implementation 'androidx.navigation:navigation-fragment-ktx:2.3.1'
+ implementation 'androidx.navigation:navigation-ui-ktx:2.3.1'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
- implementation 'com.google.android.material:material:1.2.0'
- implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.7"
- implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.7"
+ implementation 'com.google.android.material:material:1.2.1'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.0'
implementation "androidx.room:room-runtime:2.2.5"
kapt "androidx.room:room-compiler:2.2.5"
@@ -106,30 +109,21 @@ dependencies {
transitive = true
}
-// Authentication Way Changed!
-// implementation ('com.google.apis:google-api-services-youtube:v3-rev180-1.22.0'){
-// exclude module: 'httpclient'
-// }
-// //noinspection GradleDependency
-// implementation ('com.google.oauth-client:google-oauth-client:1.22.0'){
-// exclude module: 'httpclient'
-// }
-// implementation 'com.spotify.android:auth:1.1.0'
- implementation 'com.squareup.okhttp3:okhttp:4.8.0'
+ implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
- implementation "com.squareup.moshi:moshi:1.9.3"
- implementation "com.squareup.moshi:moshi-kotlin:1.9.3"
+ implementation 'com.squareup.moshi:moshi:1.11.0'
+ implementation 'com.squareup.moshi:moshi-kotlin:1.11.0'
implementation "com.squareup.retrofit2:converter-moshi:2.9.0"
implementation 'com.mpatric:mp3agic:0.9.1'
- implementation 'com.shreyaspatil:EasyUpiPayment:2.2'
- implementation 'com.github.sealedtx:java-youtube-downloader:2.2.3'
- implementation "androidx.tonyodev.fetch2:xfetch2:3.1.4"
+ implementation 'com.shreyaspatil:EasyUpiPayment:3.0.0'
+ implementation 'com.github.sealedtx:java-youtube-downloader:2.4.2'
+ implementation "androidx.tonyodev.fetch2:xfetch2:3.1.5"
implementation 'com.github.javiersantos:AppUpdater:2.7'
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
- testImplementation 'junit:junit:4.13'
- androidTestImplementation 'androidx.test.ext:junit:1.1.1'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+ testImplementation 'junit:junit:4.13.1'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
\ No newline at end of file
diff --git a/app/build_passing.svg b/app/build_passing.svg
old mode 100644
new mode 100755
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
old mode 100644
new mode 100755
diff --git a/app/src/androidTest/java/com/shabinder/spotiflyer/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/shabinder/spotiflyer/ExampleInstrumentedTest.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
old mode 100644
new mode 100755
index 81bbfd1c..a0b844e7
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -17,6 +17,7 @@
-->
@@ -29,8 +30,6 @@
-
-
+ android:theme="@style/AppTheme"
+ tools:targetApi="q">
-
+
@@ -57,10 +59,7 @@
-
+
@@ -68,5 +67,4 @@
-
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/App.kt b/app/src/main/java/com/shabinder/spotiflyer/App.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt b/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt
old mode 100644
new mode 100755
index 9f72b8dc..c23208af
--- a/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt
+++ b/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt
@@ -29,6 +29,7 @@ import android.os.PowerManager
import android.provider.Settings
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatDelegate
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import com.github.javiersantos.appupdater.AppUpdater
@@ -37,7 +38,7 @@ import com.shabinder.spotiflyer.databinding.MainActivityBinding
import com.shabinder.spotiflyer.downloadHelper.SpotifyDownloadHelper
import com.shabinder.spotiflyer.utils.SpotifyService
import com.shabinder.spotiflyer.utils.SpotifyServiceTokenRequest
-import com.shabinder.spotiflyer.utils.createDirectory
+import com.shabinder.spotiflyer.utils.createDirectories
import com.squareup.moshi.Moshi
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
@@ -62,20 +63,12 @@ class MainActivity : AppCompatActivity(){
@Inject lateinit var spotifyServiceTokenRequest: SpotifyServiceTokenRequest
@Inject lateinit var moshi: Moshi
- companion object{
- private var instance = MainActivity()
- fun getInstance():MainActivity{
- return instance
- }
- }
- init {
- instance = this
- }
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = DataBindingUtil.setContentView(this,R.layout.main_activity)
+ binding = DataBindingUtil.setContentView(this, R.layout.main_activity)
sharedViewModel = ViewModelProvider(this).get(SharedViewModel::class.java)
+ //Enabling Dark Mode
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
sharedPref = this.getPreferences(Context.MODE_PRIVATE)
//starting Notification and Downloader Service!
@@ -93,11 +86,17 @@ class MainActivity : AppCompatActivity(){
createDirectories()
isConnected = sharedViewModel.isOnline(this)
sharedViewModel.isConnected.value = isConnected
- Log.i("Connection Status",isConnected.toString())
+ Log.i("Connection Status", isConnected.toString())
handleIntentFromExternalActivity()
}
+ override fun onNewIntent(intent: Intent?) {
+ super.onNewIntent(intent)
+ Log.i("NEW INTENT", "Received")
+ handleIntentFromExternalActivity(intent)
+ }
+
@SuppressLint("BatteryLife")
fun disableDozeMode() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -133,7 +132,7 @@ class MainActivity : AppCompatActivity(){
/**
* Adding my own new Spotify Web Api Requests!
* */
- private fun implementSpotifyService(token:String) {
+ private fun implementSpotifyService(token: String) {
val httpClient: OkHttpClient.Builder = OkHttpClient.Builder()
httpClient.addInterceptor(object : Interceptor {
@@ -175,12 +174,12 @@ class MainActivity : AppCompatActivity(){
}
- private fun handleIntentFromExternalActivity() {
+ private fun handleIntentFromExternalActivity(intent: Intent? = getIntent()) {
if (intent?.action == Intent.ACTION_SEND) {
if ("text/plain" == intent.type) {
intent.getStringExtra(Intent.EXTRA_TEXT)?.let {
- Log.i("Intent Received",it)
- sharedViewModel.intentString = it
+ Log.i("Intent Received", it)
+ sharedViewModel.intentString.value = it
}
}
}
@@ -195,8 +194,8 @@ class MainActivity : AppCompatActivity(){
}
}
- override fun onSaveInstanceState(savedInstanceState:Bundle) {
- savedInstanceState.putString("token",token)
+ override fun onSaveInstanceState(savedInstanceState: Bundle) {
+ savedInstanceState.putString("token", token)
super.onSaveInstanceState(savedInstanceState)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
@@ -208,15 +207,6 @@ class MainActivity : AppCompatActivity(){
}
}
- private fun createDirectories() {
- createDirectory(SpotifyDownloadHelper.defaultDir)
- createDirectory(SpotifyDownloadHelper.defaultDir+".Images/")
- createDirectory(SpotifyDownloadHelper.defaultDir+"Tracks/")
- createDirectory(SpotifyDownloadHelper.defaultDir+"Albums/")
- createDirectory(SpotifyDownloadHelper.defaultDir+"Playlists/")
- createDirectory(SpotifyDownloadHelper.defaultDir+"YT_Downloads/")
- }
-
private fun checkIfLatestVersion() {
val appUpdater = AppUpdater(this)
.showAppUpdated(false)//true:Show App is Update Dialog
@@ -234,4 +224,14 @@ class MainActivity : AppCompatActivity(){
}
appUpdater.start()
}
+
+ companion object{
+ private var instance = MainActivity()
+ fun getInstance():MainActivity{
+ return instance
+ }
+ }
+ init {
+ instance = this
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/shabinder/spotiflyer/SharedViewModel.kt b/app/src/main/java/com/shabinder/spotiflyer/SharedViewModel.kt
old mode 100644
new mode 100755
index 831493bf..3705a905
--- a/app/src/main/java/com/shabinder/spotiflyer/SharedViewModel.kt
+++ b/app/src/main/java/com/shabinder/spotiflyer/SharedViewModel.kt
@@ -31,7 +31,7 @@ import kotlinx.coroutines.Job
import java.io.File
class SharedViewModel : ViewModel() {
- var intentString = ""
+ var intentString = MutableLiveData().apply { value = "" }
var spotifyService = MutableLiveData()
var accessToken = MutableLiveData().apply { value = "" }
var isConnected = MutableLiveData().apply { value = false }
diff --git a/app/src/main/java/com/shabinder/spotiflyer/database/DatabaseDAO.kt b/app/src/main/java/com/shabinder/spotiflyer/database/DatabaseDAO.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/database/DownloadRecord.kt b/app/src/main/java/com/shabinder/spotiflyer/database/DownloadRecord.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/database/DownloadRecordDatabase.kt b/app/src/main/java/com/shabinder/spotiflyer/database/DownloadRecordDatabase.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/SpotifyDownloadHelper.kt b/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/SpotifyDownloadHelper.kt
old mode 100644
new mode 100755
index 5061ac5f..5263d6a7
--- a/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/SpotifyDownloadHelper.kt
+++ b/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/SpotifyDownloadHelper.kt
@@ -27,7 +27,6 @@ import android.util.Log
import android.view.View
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
-import android.webkit.ValueCallback
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.TextView
@@ -38,6 +37,7 @@ import com.github.kiulian.downloader.model.quality.AudioQuality
import com.shabinder.spotiflyer.models.DownloadObject
import com.shabinder.spotiflyer.models.Track
import com.shabinder.spotiflyer.ui.spotify.SpotifyViewModel
+import com.shabinder.spotiflyer.utils.getEmojiByUnicode
import com.shabinder.spotiflyer.worker.ForegroundService
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -53,6 +53,7 @@ object SpotifyDownloadHelper {
private var isBrowserLoading = false
private var total = 0
private var Processed = 0
+ private var notFound = 0
private var listProcessed:Boolean = false
var youtubeList = mutableListOf()
@@ -107,36 +108,40 @@ object SpotifyDownloadHelper {
super.onPageFinished(view, url)
view?.evaluateJavascript(
"document.getElementsByClassName(\"yt-simple-endpoint style-scope ytd-video-renderer\")[0].href"
- ,object :ValueCallback{
- override fun onReceiveValue(value: String?) {
- Log.i("YT-id",value.toString().replace("\"",""))
- val id = value!!.substringAfterLast("=", "error").replace("\"","")
- Log.i("YT-id",id)
- if(id !="error"){//Link extracting error
- Processed++
- updateStatusBar()
- downloadFile(subFolder, type, track,ytDownloader,id)
- }
- if(youtubeList.isNotEmpty()){
- val request = youtubeList[0]
- spotifyViewModel!!.uiScope.launch {
- getYTLink(request.type,request.subFolder,request.ytDownloader,request.searchQuery,request.track)
- }
- youtubeList.remove(request)
- if(youtubeList.size == 0){//list processing completed , webView is free again!
- isBrowserLoading = false
- listProcessed = true
- }
- }else{//YT List Empty....Maybe it was one Single Download
- Handler().postDelayed({//Delay of 1.5 sec
- if(youtubeList.isEmpty()){//Lets Make It sure , There are No more Downloads In Queue.....
- isBrowserLoading = false
- listProcessed = true
- }
- },1500)
- }
+ ) { value ->
+ Log.i("YT-id Link", value.toString().replace("\"", ""))
+ val id = value!!.substringAfterLast("=", "error").replace("\"", "")
+ Log.i("YT-ID", id)
+ if (id != "error") {//Link extracting error
+ Processed++
+ downloadFile(subFolder, type, track, ytDownloader, id)
+ }else notFound++
+ updateStatusBar()
+ if (youtubeList.isNotEmpty()) {
+ val request = youtubeList[0]
+ spotifyViewModel!!.uiScope.launch {
+ getYTLink(
+ request.type,
+ request.subFolder,
+ request.ytDownloader,
+ request.searchQuery,
+ request.track
+ )
}
- } )
+ youtubeList.remove(request)
+ if (youtubeList.size == 0) {//list processing completed , webView is free again!
+ isBrowserLoading = false
+ listProcessed = true
+ }
+ } else {//YT List Empty....Maybe it was one Single Download
+ Handler().postDelayed({//Delay of 1.5 sec
+ if (youtubeList.isEmpty()) {//Lets Make It sure , There are No more Downloads In Queue.....
+ isBrowserLoading = false
+ listProcessed = true
+ }
+ }, 1500)
+ }
+ }
}
}
}
@@ -144,42 +149,51 @@ object SpotifyDownloadHelper {
private fun updateStatusBar() {
statusBar!!.visibility = View.VISIBLE
- statusBar?.text = "Total: $total Processed: $Processed"
+ statusBar?.text = "Total: $total ${getEmojiByUnicode(0x2705)}: $Processed ${getEmojiByUnicode(0x274C)}: $notFound"
}
fun downloadFile(subFolder: String?, type: String, track:Track, ytDownloader: YoutubeDownloader?, id: String) {
spotifyViewModel!!.uiScope.launch {
withContext(Dispatchers.IO) {
- val video = ytDownloader?.getVideo(id)
- val detail = video?.details()
- val format:Format? =try {
- video?.findAudioWithQuality(AudioQuality.high)?.get(0) as Format
- }catch (e:java.lang.IndexOutOfBoundsException){
- try {
- video?.findAudioWithQuality(AudioQuality.medium)?.get(0) as Format
- }catch (e:java.lang.IndexOutOfBoundsException){
- try{
- video?.findAudioWithQuality(AudioQuality.low)?.get(0) as Format
- }catch (e:java.lang.IndexOutOfBoundsException){
- Log.i("YTDownloader",e.toString())
- null
+ try {
+ val video = ytDownloader?.getVideo(id)
+ val detail = video?.details()
+ val format: Format? = try {
+ video?.findAudioWithQuality(AudioQuality.high)?.get(0) as Format
+ } catch (e: java.lang.IndexOutOfBoundsException) {
+ try {
+ video?.findAudioWithQuality(AudioQuality.medium)?.get(0) as Format
+ } catch (e: java.lang.IndexOutOfBoundsException) {
+ try {
+ video?.findAudioWithQuality(AudioQuality.low)?.get(0) as Format
+ } catch (e: java.lang.IndexOutOfBoundsException) {
+ Log.i("YTDownloader", e.toString())
+ null
+ }
}
}
- }
- format?.let {
- val url:String = format.url()
-// Log.i("DHelper Link Found", url)
- val outputFile:String = Environment.getExternalStorageDirectory().toString() + File.separator +
- defaultDir + removeIllegalChars(type) + File.separator + (if(subFolder == null){""}else{ removeIllegalChars(subFolder) + File.separator} + removeIllegalChars(track.name!!)+".m4a")
+ format?.let {
+ val url: String = format.url()
+ Log.i("DHelper Link Found", url)
+ val outputFile: String =
+ Environment.getExternalStorageDirectory().toString() + File.separator +
+ defaultDir + removeIllegalChars(type) + File.separator + (if (subFolder == null) {
+ ""
+ } else {
+ removeIllegalChars(subFolder) + File.separator
+ } + removeIllegalChars(track.name!!) + ".m4a")
- val downloadObject = DownloadObject(
- track = track,
- url = url,
- outputDir = outputFile
- )
- Log.i("DH",outputFile)
- startService(context!!, downloadObject)
+ val downloadObject = DownloadObject(
+ track = track,
+ url = url,
+ outputDir = outputFile
+ )
+ Log.i("DH", outputFile)
+ startService(context!!, downloadObject)
+ }
+ }catch (e: com.github.kiulian.downloader.YoutubeException){
+ Log.i("DH", "Error- Maybe Network")
}
}
}
diff --git a/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/YTDownloadHelper.kt b/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/YTDownloadHelper.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Album.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Album.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Artist.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Artist.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Copyright.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Copyright.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/DownloadObject.kt b/app/src/main/java/com/shabinder/spotiflyer/models/DownloadObject.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Episodes.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Episodes.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Followers.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Followers.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Image.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Image.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/LinkedTrack.kt b/app/src/main/java/com/shabinder/spotiflyer/models/LinkedTrack.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/PagingObjectPlaylistTrack.kt b/app/src/main/java/com/shabinder/spotiflyer/models/PagingObjectPlaylistTrack.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/PagingObjectTrack.kt b/app/src/main/java/com/shabinder/spotiflyer/models/PagingObjectTrack.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Playlist.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Playlist.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/PlaylistTrack.kt b/app/src/main/java/com/shabinder/spotiflyer/models/PlaylistTrack.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Token.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Token.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Track.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Track.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/UserPrivate.kt b/app/src/main/java/com/shabinder/spotiflyer/models/UserPrivate.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/UserPublic.kt b/app/src/main/java/com/shabinder/spotiflyer/models/UserPublic.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/YTTrack.kt b/app/src/main/java/com/shabinder/spotiflyer/models/YTTrack.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/recyclerView/DownloadRecordAdapter.kt b/app/src/main/java/com/shabinder/spotiflyer/recyclerView/DownloadRecordAdapter.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/shabinder/spotiflyer/recyclerView/SpotifyTrackListAdapter.kt b/app/src/main/java/com/shabinder/spotiflyer/recyclerView/SpotifyTrackListAdapter.kt
old mode 100644
new mode 100755
index fff27e88..ec6af4e4
--- a/app/src/main/java/com/shabinder/spotiflyer/recyclerView/SpotifyTrackListAdapter.kt
+++ b/app/src/main/java/com/shabinder/spotiflyer/recyclerView/SpotifyTrackListAdapter.kt
@@ -54,6 +54,7 @@ class SpotifyTrackListAdapter: ListAdapter