Add CI (#236)
* Create main.yml * Run ktlintFormat * Don't error on translation lint issues * Fix lint error about POST_NOTIFICATIONS permission * Increase memory limit to speedup the build * Only build debug * refactor: rename `main.yml` to `build.yaml` * lint: error on `ExtraTranslation` --------- Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
This commit is contained in:
parent
a2e581bc91
commit
5f7b7eaf63
23 changed files with 70 additions and 27 deletions
29
.github/workflows/build.yaml
vendored
Normal file
29
.github/workflows/build.yaml
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Validate Gradle Wrapper
|
||||
uses: gradle/wrapper-validation-action@v1
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: 11
|
||||
distribution: temurin
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v2
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew lintDebug ktlintCheck assembleDebug
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: phone-universal-debug.apk
|
||||
path: ./app/phone/build/outputs/apk/debug/phone-universal-debug.apk
|
|
@ -2,6 +2,7 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
<uses-feature android:name="android.hardware.wifi" android:required="false" />
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@ import android.app.Application
|
|||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import com.google.android.material.color.DynamicColors
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
import timber.log.Timber
|
||||
|
||||
@HiltAndroidApp
|
||||
class BaseApplication : Application() {
|
||||
|
|
|
@ -113,4 +113,4 @@ class DownloadEpisodeListAdapter(
|
|||
class OnClickListener(val clickListener: (item: PlayerItem) -> Unit) {
|
||||
fun onClick(item: PlayerItem) = clickListener(item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,11 +15,11 @@ import androidx.lifecycle.repeatOnLifecycle
|
|||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.fragment.navArgs
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import dev.jdtech.jellyfin.R
|
||||
import dev.jdtech.jellyfin.adapters.UserLoginListAdapter
|
||||
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
||||
import dev.jdtech.jellyfin.databinding.FragmentLoginBinding
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import dev.jdtech.jellyfin.R
|
||||
import dev.jdtech.jellyfin.viewmodels.LoginViewModel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.launch
|
||||
|
|
|
@ -7,8 +7,8 @@ import androidx.navigation.fragment.findNavController
|
|||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import dev.jdtech.jellyfin.R
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import dev.jdtech.jellyfin.R
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
|
|
|
@ -12,4 +12,4 @@ fun Fragment.checkIfLoginRequired(error: String?) {
|
|||
findNavController().navigate(AppNavigationDirections.actionGlobalLoginFragment(reLogin = true))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import com.android.build.api.dsl.CommonExtension
|
||||
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
@Suppress("DSL_SCOPE_VIOLATION") // False positive
|
||||
plugins {
|
||||
|
@ -18,6 +20,17 @@ allprojects {
|
|||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
val configureAndroid = { _: AppliedPlugin ->
|
||||
extensions.configure<CommonExtension<*, *, *, *>>("android") {
|
||||
lint {
|
||||
informational += "MissingTranslation"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pluginManager.withPlugin("com.android.library", configureAndroid)
|
||||
pluginManager.withPlugin("com.android.application", configureAndroid)
|
||||
}
|
||||
|
||||
tasks.create<Delete>("clean") {
|
||||
|
|
|
@ -6,9 +6,9 @@ import dagger.Provides
|
|||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import dev.jdtech.jellyfin.api.JellyfinApi
|
||||
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
|
|
|
@ -11,8 +11,8 @@ import dev.jdtech.jellyfin.models.SortBy
|
|||
import dev.jdtech.jellyfin.viewmodels.LibraryViewModel
|
||||
import java.lang.IllegalStateException
|
||||
import java.util.UUID
|
||||
import org.jellyfin.sdk.model.api.SortOrder
|
||||
import javax.inject.Inject
|
||||
import org.jellyfin.sdk.model.api.SortOrder
|
||||
|
||||
@AndroidEntryPoint
|
||||
class SortDialogFragment(
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package dev.jdtech.jellyfin.models
|
||||
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
import java.util.UUID
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
|
||||
sealed class EpisodeItem {
|
||||
abstract val id: UUID
|
||||
|
@ -13,4 +13,4 @@ sealed class EpisodeItem {
|
|||
data class Episode(val episode: BaseItemDto) : EpisodeItem() {
|
||||
override val id = episode.id
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,8 @@ package dev.jdtech.jellyfin.models
|
|||
|
||||
data class ExceptionUiText(
|
||||
val uiText: UiText
|
||||
): Exception()
|
||||
) : Exception()
|
||||
|
||||
data class ExceptionUiTexts(
|
||||
val uiTexts: Collection<UiText>
|
||||
): Exception()
|
||||
) : Exception()
|
||||
|
|
|
@ -16,4 +16,4 @@ sealed class HomeItem {
|
|||
}
|
||||
|
||||
abstract val id: UUID
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,14 +4,14 @@ import android.content.res.Resources
|
|||
import androidx.annotation.StringRes
|
||||
|
||||
sealed class UiText {
|
||||
data class DynamicString(val value: String): UiText()
|
||||
data class DynamicString(val value: String) : UiText()
|
||||
class StringResource(
|
||||
@StringRes val resId: Int,
|
||||
vararg val args: Any?
|
||||
): UiText()
|
||||
) : UiText()
|
||||
|
||||
fun asString(resources: Resources): String {
|
||||
return when(this) {
|
||||
return when (this) {
|
||||
is DynamicString -> return value
|
||||
is StringResource -> resources.getString(resId, args)
|
||||
}
|
||||
|
|
|
@ -3,8 +3,9 @@ package dev.jdtech.jellyfin.viewmodels
|
|||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import dev.jdtech.jellyfin.core.R
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import dev.jdtech.jellyfin.api.JellyfinApi
|
||||
import dev.jdtech.jellyfin.core.R
|
||||
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
||||
import dev.jdtech.jellyfin.models.DiscoveredServer
|
||||
import dev.jdtech.jellyfin.models.ExceptionUiText
|
||||
|
@ -12,7 +13,6 @@ import dev.jdtech.jellyfin.models.ExceptionUiTexts
|
|||
import dev.jdtech.jellyfin.models.Server
|
||||
import dev.jdtech.jellyfin.models.ServerAddress
|
||||
import dev.jdtech.jellyfin.models.UiText
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import java.util.UUID
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CancellationException
|
||||
|
|
|
@ -5,8 +5,8 @@ import androidx.lifecycle.viewModelScope
|
|||
import androidx.paging.PagingData
|
||||
import androidx.paging.cachedIn
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import dev.jdtech.jellyfin.repository.JellyfinRepository
|
||||
import dev.jdtech.jellyfin.models.SortBy
|
||||
import dev.jdtech.jellyfin.repository.JellyfinRepository
|
||||
import java.util.UUID
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
|
|
@ -3,12 +3,12 @@ package dev.jdtech.jellyfin.viewmodels
|
|||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import dev.jdtech.jellyfin.core.R
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import dev.jdtech.jellyfin.api.JellyfinApi
|
||||
import dev.jdtech.jellyfin.core.R
|
||||
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
||||
import dev.jdtech.jellyfin.models.UiText
|
||||
import dev.jdtech.jellyfin.models.User
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import javax.inject.Inject
|
||||
import kotlin.Exception
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
|
|
@ -3,10 +3,10 @@ package dev.jdtech.jellyfin.viewmodels
|
|||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import dev.jdtech.jellyfin.api.JellyfinApi
|
||||
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
||||
import dev.jdtech.jellyfin.models.Server
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package dev.jdtech.jellyfin.api
|
||||
|
||||
import android.content.Context
|
||||
import dev.jdtech.jellyfin.data.BuildConfig
|
||||
import dev.jdtech.jellyfin.Constants
|
||||
import dev.jdtech.jellyfin.data.BuildConfig
|
||||
import java.util.UUID
|
||||
import org.jellyfin.sdk.api.client.HttpClientOptions
|
||||
import org.jellyfin.sdk.api.client.extensions.devicesApi
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
||||
# Specifies the JVM arguments used for the daemon process.
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
||||
org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8
|
||||
# When configured, Gradle will run in incubating parallel mode.
|
||||
# This option should only be used with decoupled projects. More details, visit
|
||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
|
|
|
@ -4,9 +4,9 @@ import android.app.Dialog
|
|||
import android.os.Bundle
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import dev.jdtech.jellyfin.player.video.R
|
||||
import dev.jdtech.jellyfin.mpv.MPVPlayer
|
||||
import dev.jdtech.jellyfin.mpv.TrackType
|
||||
import dev.jdtech.jellyfin.player.video.R
|
||||
import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel
|
||||
import java.lang.IllegalStateException
|
||||
|
||||
|
|
|
@ -4,4 +4,4 @@ enum class TrackType(val type: String) {
|
|||
VIDEO("video"),
|
||||
AUDIO("audio"),
|
||||
SUBTITLE("sub")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,10 +7,10 @@ import androidx.lifecycle.ViewModel
|
|||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.media3.common.MimeTypes
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import dev.jdtech.jellyfin.player.video.R
|
||||
import dev.jdtech.jellyfin.database.DownloadDatabaseDao
|
||||
import dev.jdtech.jellyfin.models.ExternalSubtitle
|
||||
import dev.jdtech.jellyfin.models.PlayerItem
|
||||
import dev.jdtech.jellyfin.player.video.R
|
||||
import dev.jdtech.jellyfin.repository.JellyfinRepository
|
||||
import dev.jdtech.jellyfin.utils.getDownloadPlayerItem
|
||||
import dev.jdtech.jellyfin.utils.isItemAvailable
|
||||
|
|
Loading…
Reference in a new issue