diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..4621850 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.{kt,kts}] +max_line_length = 140 + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[*.{json,toml}] +indent_size = 2 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 059b2e7..44fa792 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -89,6 +89,9 @@ jobs: name: Test needs: [ build ] runs-on: ubuntu-latest + permissions: + contents: read + security-events: write steps: # Free GitHub Actions Environment Disk Space @@ -139,6 +142,14 @@ jobs: name: tests-result path: ${{ github.workspace }}/build/reports/tests + # Upload Detekt SARIF for GitHub Code Scanning + - name: Upload Detekt SARIF + if: ${{ always() }} + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: build/reports/detekt/detekt.sarif + category: detekt + # Upload the Kover report to CodeCov - name: Upload Code Coverage Report uses: codecov/codecov-action@v5 diff --git a/build.gradle.kts b/build.gradle.kts index 5338013..e98a547 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,6 +4,7 @@ plugins { id("java") alias(libs.plugins.kotlin) alias(libs.plugins.intelliJPlatform) + alias(libs.plugins.detekt) alias(libs.plugins.qodana) alias(libs.plugins.kover) } @@ -47,6 +48,8 @@ dependencies { implementation("org.bytedeco:javacpp:1.5.13:macosx-arm64") implementation("org.bytedeco:javacpp:1.5.13:windows-x86_64") + detektPlugins(libs.detekt.formatting) + testImplementation(libs.junit) testImplementation(libs.opentest4j) @@ -111,6 +114,19 @@ kover { } } +detekt { + buildUponDefaultConfig = true + config.setFrom(files("$projectDir/detekt.yml")) + basePath.set(projectDir) +} + +tasks.withType().configureEach { + reports { + html.required.set(true) + sarif.required.set(true) + } +} + val buildPlayerUi by tasks.registering(Exec::class) { workingDir = file("ui") commandLine("bash", "-lc", "npm run build") @@ -150,4 +166,4 @@ intellijPlatformTesting { } } } -} \ No newline at end of file +} diff --git a/detekt.yml b/detekt.yml new file mode 100644 index 0000000..e1a805d --- /dev/null +++ b/detekt.yml @@ -0,0 +1,52 @@ +complexity: + LongMethod: + allowedLines: 80 + LongParameterList: + allowedFunctionParameters: 8 + allowedConstructorParameters: 10 + TooManyFunctions: + allowedFunctionsPerClass: 15 + allowedFunctionsPerFile: 15 + CyclomaticComplexMethod: + allowedComplexity: 20 + NestedBlockDepth: + allowedDepth: 5 + +exceptions: + TooGenericExceptionCaught: + active: false + +style: + ReturnCount: + max: 3 + MagicNumber: + ignorePropertyDeclaration: true + ignoreCompanionObjectPropertyDeclaration: true + ignoreAnnotation: true + ignoreEnums: true + ignoreNamedArgument: true + ignoreLocalVariableDeclaration: true + ignoreNumbers: + - '-1' + - '0' + - '1' + - '2' + MaxLineLength: + maxLineLength: 140 + WildcardImport: + active: true + +ktlint: + MaximumLineLength: + maxLineLength: 140 + ArgumentListWrapping: + maxLineLength: 140 + TrailingCommaOnCallSite: + active: true + useTrailingCommaOnCallSite: true + TrailingCommaOnDeclarationSite: + active: true + useTrailingCommaOnDeclarationSite: true + ImportOrdering: + active: true + layout: '*,java.**,javax.**,kotlin.**,^' \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a8d8ff0..001a244 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,16 +4,19 @@ junit = "4.13.2" opentest4j = "1.3.0" # plugins +detekt = "2.0.0-alpha.2" intelliJPlatform = "2.13.1" kotlin = "2.3.20" kover = "0.9.7" qodana = "2025.3.2" [libraries] +detekt-formatting = { module = "dev.detekt:detekt-rules-ktlint-wrapper", version.ref = "detekt" } junit = { group = "junit", name = "junit", version.ref = "junit" } opentest4j = { group = "org.opentest4j", name = "opentest4j", version.ref = "opentest4j" } [plugins] +detekt = { id = "dev.detekt", version.ref = "detekt" } intelliJPlatform = { id = "org.jetbrains.intellij.platform", version.ref = "intelliJPlatform" } kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" } diff --git a/src/main/kotlin/dev/twango/jetplay/JetPlayConstants.kt b/src/main/kotlin/dev/twango/jetplay/JetPlayConstants.kt index 6d5901b..4cd0a16 100644 --- a/src/main/kotlin/dev/twango/jetplay/JetPlayConstants.kt +++ b/src/main/kotlin/dev/twango/jetplay/JetPlayConstants.kt @@ -4,4 +4,5 @@ object JetPlayConstants { const val PLUGIN_NAME = "JetPlay" const val NOTIFICATION_GROUP_ID = PLUGIN_NAME const val ISSUES_URL = "https://github.com/twangodev/jetplay/issues" -} \ No newline at end of file + const val BYTES_PER_KB = 1024 +} diff --git a/src/main/kotlin/dev/twango/jetplay/browser/PlayerBridge.kt b/src/main/kotlin/dev/twango/jetplay/browser/PlayerBridge.kt index 348e7b1..6f74bfa 100644 --- a/src/main/kotlin/dev/twango/jetplay/browser/PlayerBridge.kt +++ b/src/main/kotlin/dev/twango/jetplay/browser/PlayerBridge.kt @@ -29,17 +29,13 @@ class PlayerBridge(private val browser: JBCefBrowser) { } } - fun updateProgress(percent: Double) = - executeJs("window.jetplayUpdateProgress?.($percent)") + fun updateProgress(percent: Double) = executeJs("window.jetplayUpdateProgress?.($percent)") - fun updateDownloadProgress(percent: Double) = - executeJs("window.jetplayUpdateDownloadProgress?.($percent)") + fun updateDownloadProgress(percent: Double) = executeJs("window.jetplayUpdateDownloadProgress?.($percent)") - fun mediaReady(url: String) = - executeJs("window.jetplayReady?.('${escapeJs(url)}')") + fun mediaReady(url: String) = executeJs("window.jetplayReady?.('${escapeJs(url)}')") - fun showError(message: String) = - executeJs("window.jetplayError?.('${escapeJs(message)}')") + fun showError(message: String) = executeJs("window.jetplayError?.('${escapeJs(message)}')") fun loadHtml(html: String) = browser.loadHTML(html) @@ -50,13 +46,12 @@ class PlayerBridge(private val browser: JBCefBrowser) { } companion object { - fun escapeJs(s: String): String = - s.replace("\\", "\\\\") - .replace("'", "\\'") - .replace("\"", "\\\"") - .replace("\n", "\\n") - .replace("\r", "") - .replace("<", "\\x3c") - .replace(">", "\\x3e") + fun escapeJs(s: String): String = s.replace("\\", "\\\\") + .replace("'", "\\'") + .replace("\"", "\\\"") + .replace("\n", "\\n") + .replace("\r", "") + .replace("<", "\\x3c") + .replace(">", "\\x3e") } } diff --git a/src/main/kotlin/dev/twango/jetplay/browser/PlayerConfig.kt b/src/main/kotlin/dev/twango/jetplay/browser/PlayerConfig.kt index 6f6051d..1e23aec 100644 --- a/src/main/kotlin/dev/twango/jetplay/browser/PlayerConfig.kt +++ b/src/main/kotlin/dev/twango/jetplay/browser/PlayerConfig.kt @@ -9,12 +9,12 @@ data class PlayerConfig( val errorMessage: String = "", val transcodingReason: String = "", val downloadingReason: String = "", - val ui: UiStrings = UiStrings() + val ui: UiStrings = UiStrings(), ) data class UiStrings( val downloadingLabel: String = "", val transcodingLabel: String = "", val transcodingTip: String = "", - val errorTitle: String = "" + val errorTitle: String = "", ) diff --git a/src/main/kotlin/dev/twango/jetplay/browser/PlayerHtmlLoader.kt b/src/main/kotlin/dev/twango/jetplay/browser/PlayerHtmlLoader.kt index defee8d..c37ea39 100644 --- a/src/main/kotlin/dev/twango/jetplay/browser/PlayerHtmlLoader.kt +++ b/src/main/kotlin/dev/twango/jetplay/browser/PlayerHtmlLoader.kt @@ -15,25 +15,24 @@ class PlayerHtmlLoader(private val bridge: PlayerBridge) { bridge.loadHtml(playerHtml.replace("", "$configScript")) } - private fun buildConfigScript(config: PlayerConfig, openLinkJs: String): String = - buildString { - append("") - } + private fun buildConfigScript(config: PlayerConfig, openLinkJs: String): String = buildString { + append("") + } } diff --git a/src/main/kotlin/dev/twango/jetplay/editor/MediaFileEditor.kt b/src/main/kotlin/dev/twango/jetplay/editor/MediaFileEditor.kt index 59535e5..66542d7 100644 --- a/src/main/kotlin/dev/twango/jetplay/editor/MediaFileEditor.kt +++ b/src/main/kotlin/dev/twango/jetplay/editor/MediaFileEditor.kt @@ -26,11 +26,9 @@ import java.beans.PropertyChangeListener import javax.swing.JComponent import javax.swing.JPanel -class MediaFileEditor( - private val project: Project, - private val file: VirtualFile, - private val source: MediaSource -) : UserDataHolderBase(), FileEditor { +class MediaFileEditor(private val project: Project, private val file: VirtualFile, private val source: MediaSource) : + UserDataHolderBase(), + FileEditor { private val browser = JBCefBrowser() private val bridge = PlayerBridge(browser) @@ -41,7 +39,7 @@ class MediaFileEditor( downloadingLabel = JetPlayBundle.message("ui.downloading.label"), transcodingLabel = JetPlayBundle.message("ui.transcoding.label"), transcodingTip = JetPlayBundle.message("ui.transcoding.tip"), - errorTitle = JetPlayBundle.message("ui.error.title") + errorTitle = JetPlayBundle.message("ui.error.title"), ) private val component: JComponent = JPanel(BorderLayout()).apply { @@ -66,8 +64,8 @@ class MediaFileEditor( fileName = source.fileName, fileExtension = source.extension, downloadingReason = JetPlayBundle.message("downloading.reason"), - ui = uiStrings - ) + ui = uiStrings, + ), ) downloadSession = DownloadSession(source as RemoteFileMediaSource, bridge) { if (source.needsTranscoding) { @@ -93,8 +91,8 @@ class MediaFileEditor( fileName = source.fileName, fileExtension = source.extension, transcodingReason = JetPlayBundle.message("transcoding.reason", source.extension.uppercase()), - ui = uiStrings - ) + ui = uiStrings, + ), ) } transcodeSession = TranscodeSession(source.toLocalFile(), bridge).also { it.start() } @@ -107,8 +105,8 @@ class MediaFileEditor( fileName = source.fileName, fileExtension = source.extension, mediaUrl = source.resolvePlayableUrl(), - ui = uiStrings - ) + ui = uiStrings, + ), ) } @@ -119,22 +117,24 @@ class MediaFileEditor( .createNotification( JetPlayBundle.message("error.transcoding.notification.title"), JetPlayBundle.message("error.transcoding.notification.content", source.extension.uppercase()), - NotificationType.WARNING + NotificationType.WARNING, + ) + .addAction( + NotificationAction.createSimpleExpiring(JetPlayBundle.message("action.report.issue")) { + BrowserUtil.browse(JetPlayConstants.ISSUES_URL) + }, ) - .addAction(NotificationAction.createSimpleExpiring(JetPlayBundle.message("action.report.issue")) { - BrowserUtil.browse(JetPlayConstants.ISSUES_URL) - }) .notify(project) } override fun getComponent(): JComponent = component override fun getPreferredFocusedComponent(): JComponent = component override fun getName(): String = JetPlayBundle.message("editor.name") - override fun setState(state: FileEditorState) {} + override fun setState(state: FileEditorState) = Unit override fun isModified(): Boolean = false override fun isValid(): Boolean = file.isValid - override fun addPropertyChangeListener(listener: PropertyChangeListener) {} - override fun removePropertyChangeListener(listener: PropertyChangeListener) {} + override fun addPropertyChangeListener(listener: PropertyChangeListener) = Unit + override fun removePropertyChangeListener(listener: PropertyChangeListener) = Unit override fun getFile(): VirtualFile = file override fun dispose() { diff --git a/src/main/kotlin/dev/twango/jetplay/editor/MediaFileEditorProvider.kt b/src/main/kotlin/dev/twango/jetplay/editor/MediaFileEditorProvider.kt index 84b8899..385ae49 100644 --- a/src/main/kotlin/dev/twango/jetplay/editor/MediaFileEditorProvider.kt +++ b/src/main/kotlin/dev/twango/jetplay/editor/MediaFileEditorProvider.kt @@ -10,11 +10,11 @@ import com.intellij.openapi.vfs.VirtualFile import dev.twango.jetplay.media.LocalFileMediaSource import dev.twango.jetplay.media.RemoteFileMediaSource -class MediaFileEditorProvider : FileEditorProvider, DumbAware { +class MediaFileEditorProvider : + FileEditorProvider, + DumbAware { - override fun accept(project: Project, file: VirtualFile): Boolean { - return file.fileType == MediaFileType.INSTANCE - } + override fun accept(project: Project, file: VirtualFile): Boolean = file.fileType == MediaFileType.INSTANCE override fun createEditor(project: Project, file: VirtualFile): FileEditor { val source = if (file.fileSystem is LocalFileSystem) { @@ -28,4 +28,4 @@ class MediaFileEditorProvider : FileEditorProvider, DumbAware { override fun getEditorTypeId(): String = "media-player" override fun getPolicy(): FileEditorPolicy = FileEditorPolicy.HIDE_DEFAULT_EDITOR -} \ No newline at end of file +} diff --git a/src/main/kotlin/dev/twango/jetplay/media/MediaClassification.kt b/src/main/kotlin/dev/twango/jetplay/media/MediaClassification.kt index 04a1981..1d88f38 100644 --- a/src/main/kotlin/dev/twango/jetplay/media/MediaClassification.kt +++ b/src/main/kotlin/dev/twango/jetplay/media/MediaClassification.kt @@ -2,10 +2,18 @@ package dev.twango.jetplay.media object MediaClassification { + // Video subset of extensions registered in plugin.xml — keep in sync private val VIDEO_EXTENSIONS = setOf( - "mp4", "m4v", "mkv", "avi", "mov", "wmv", "flv", "webm", "ogv" + "mp4", + "m4v", + "mkv", + "avi", + "mov", + "wmv", + "flv", + "webm", + "ogv", ) - fun isVideo(extension: String): Boolean = - extension.lowercase() in VIDEO_EXTENSIONS + fun isVideo(extension: String): Boolean = extension.lowercase() in VIDEO_EXTENSIONS } diff --git a/src/main/kotlin/dev/twango/jetplay/media/RemoteFileMediaSource.kt b/src/main/kotlin/dev/twango/jetplay/media/RemoteFileMediaSource.kt index 819ee11..37e573f 100644 --- a/src/main/kotlin/dev/twango/jetplay/media/RemoteFileMediaSource.kt +++ b/src/main/kotlin/dev/twango/jetplay/media/RemoteFileMediaSource.kt @@ -28,9 +28,8 @@ class RemoteFileMediaSource(private val file: VirtualFile) : MediaSource { localFile = file } - override fun resolvePlayableUrl(): String = - localFile?.toURI()?.toString() ?: error("Remote file not yet downloaded") + override fun resolvePlayableUrl(): String = localFile?.toURI()?.toString() + ?: error("Remote file not yet downloaded") - override fun toLocalFile(): File = - localFile ?: error("Remote file not yet downloaded") + override fun toLocalFile(): File = localFile ?: error("Remote file not yet downloaded") } diff --git a/src/main/kotlin/dev/twango/jetplay/transcode/MediaTranscoder.kt b/src/main/kotlin/dev/twango/jetplay/transcode/MediaTranscoder.kt index 6010fc3..424a738 100644 --- a/src/main/kotlin/dev/twango/jetplay/transcode/MediaTranscoder.kt +++ b/src/main/kotlin/dev/twango/jetplay/transcode/MediaTranscoder.kt @@ -1,6 +1,7 @@ package dev.twango.jetplay.transcode import com.intellij.openapi.diagnostic.Logger +import dev.twango.jetplay.JetPlayConstants import org.bytedeco.ffmpeg.global.avcodec import org.bytedeco.javacv.FFmpegFrameGrabber import org.bytedeco.javacv.FFmpegFrameRecorder @@ -11,15 +12,30 @@ object MediaTranscoder { private val log = Logger.getInstance(MediaTranscoder::class.java) + private const val DEFAULT_VIDEO_BITRATE = 2_000_000 + private const val DEFAULT_FRAME_RATE = 30.0 + private const val DEFAULT_GOP_SIZE = 120 + private const val OPUS_BITRATE = 128_000 + private const val OPUS_SAMPLE_RATE = 48_000 + private const val PROGRESS_COMPLETE = 100.0 + private const val PROGRESS_MAX = 99.9 + private const val PROGRESS_PRECISION = 10 + // Formats that JCEF (Chromium) can play natively without transcoding private val JCEF_NATIVE_EXTENSIONS = setOf( - "webm", "ogv", // video - "ogg", "oga", "opus", "wav", "flac", "mp3" // audio + // video + "webm", + "ogv", + // audio + "ogg", + "oga", + "opus", + "wav", + "flac", + "mp3", ) - fun needsTranscoding(extension: String?): Boolean { - return extension?.lowercase() !in JCEF_NATIVE_EXTENSIONS - } + fun needsTranscoding(extension: String?): Boolean = extension?.lowercase() !in JCEF_NATIVE_EXTENSIONS fun transcode(inputFile: File, onProgress: (Double) -> Unit = {}): File { val outputFile = Files.createTempFile("jetplay-", ".webm").toFile().apply { deleteOnExit() } @@ -31,18 +47,23 @@ object MediaTranscoder { val hasAudio = grabber.audioChannels > 0 val totalMicroseconds = grabber.lengthInTime - val recorder = FFmpegFrameRecorder(outputFile, grabber.imageWidth, grabber.imageHeight, grabber.audioChannels) + val recorder = FFmpegFrameRecorder( + outputFile, + grabber.imageWidth, + grabber.imageHeight, + grabber.audioChannels, + ) recorder.format = "webm" if (hasVideo) { recorder.videoCodec = avcodec.AV_CODEC_ID_VP9 - recorder.videoBitrate = grabber.videoBitrate.takeIf { it > 0 } ?: 2_000_000 - recorder.frameRate = grabber.frameRate.takeIf { it > 0 } ?: 30.0 - recorder.gopSize = 120 + recorder.videoBitrate = grabber.videoBitrate.takeIf { it > 0 } ?: DEFAULT_VIDEO_BITRATE + recorder.frameRate = grabber.frameRate.takeIf { it > 0 } ?: DEFAULT_FRAME_RATE + recorder.gopSize = DEFAULT_GOP_SIZE } if (hasAudio) { recorder.audioCodec = avcodec.AV_CODEC_ID_OPUS - recorder.audioBitrate = 128_000 - recorder.sampleRate = 48000 + recorder.audioBitrate = OPUS_BITRATE + recorder.sampleRate = OPUS_SAMPLE_RATE recorder.audioChannels = grabber.audioChannels } recorder.start() @@ -50,12 +71,18 @@ object MediaTranscoder { var lastReportedTenth = -1L try { while (true) { - val frame = grabber.grabFrame(hasAudio, true, true, false, false) ?: break + val frame = grabber.grabFrame( + hasAudio, + true, + true, + false, + false, + ) ?: break recorder.record(frame) if (totalMicroseconds > 0) { - val pct = (grabber.timestamp.toDouble() * 100.0 / totalMicroseconds).coerceIn(0.0, 99.9) - val tenth = (pct * 10).toLong() + val pct = (grabber.timestamp.toDouble() * PROGRESS_COMPLETE / totalMicroseconds).coerceIn(0.0, PROGRESS_MAX) + val tenth = (pct * PROGRESS_PRECISION).toLong() if (tenth != lastReportedTenth) { lastReportedTenth = tenth onProgress(pct) @@ -72,8 +99,8 @@ object MediaTranscoder { grabber.release() } - onProgress(100.0) - log.info("Transcoded ${inputFile.name} -> ${outputFile.name} (${outputFile.length() / 1024}KB)") + onProgress(PROGRESS_COMPLETE) + log.info("Transcoded ${inputFile.name} -> ${outputFile.name} (${outputFile.length() / JetPlayConstants.BYTES_PER_KB}KB)") return outputFile } } diff --git a/src/main/kotlin/dev/twango/jetplay/transcode/TranscodeSession.kt b/src/main/kotlin/dev/twango/jetplay/transcode/TranscodeSession.kt index d48d65e..346033d 100644 --- a/src/main/kotlin/dev/twango/jetplay/transcode/TranscodeSession.kt +++ b/src/main/kotlin/dev/twango/jetplay/transcode/TranscodeSession.kt @@ -6,10 +6,7 @@ import dev.twango.jetplay.browser.PlayerBridge import java.io.File import kotlin.concurrent.thread -class TranscodeSession( - private val inputFile: File, - private val bridge: PlayerBridge -) { +class TranscodeSession(private val inputFile: File, private val bridge: PlayerBridge) { companion object { private val log = Logger.getInstance(TranscodeSession::class.java) diff --git a/src/main/kotlin/dev/twango/jetplay/transfer/DownloadSession.kt b/src/main/kotlin/dev/twango/jetplay/transfer/DownloadSession.kt index faae4cf..9b89d86 100644 --- a/src/main/kotlin/dev/twango/jetplay/transfer/DownloadSession.kt +++ b/src/main/kotlin/dev/twango/jetplay/transfer/DownloadSession.kt @@ -2,6 +2,7 @@ package dev.twango.jetplay.transfer import com.intellij.openapi.diagnostic.Logger import dev.twango.jetplay.JetPlayBundle +import dev.twango.jetplay.JetPlayConstants import dev.twango.jetplay.browser.PlayerBridge import dev.twango.jetplay.media.RemoteFileMediaSource import java.io.File @@ -10,7 +11,7 @@ import kotlin.concurrent.thread class DownloadSession( private val source: RemoteFileMediaSource, private val bridge: PlayerBridge, - private val onComplete: (File) -> Unit + private val onComplete: (File) -> Unit, ) { companion object { @@ -54,7 +55,7 @@ class DownloadSession( if (!cancelled) { source.setLocalFile(tempFile) - log.info("Downloaded ${source.fileName} (${tempFile.length() / 1024} KB)") + log.info("Downloaded ${source.fileName} (${tempFile.length() / JetPlayConstants.BYTES_PER_KB} KB)") onComplete(tempFile) } } catch (_: InterruptedException) { @@ -62,7 +63,8 @@ class DownloadSession( } catch (e: Exception) { log.warn("Download failed for ${source.fileName}", e) if (!cancelled) { - bridge.showError(JetPlayBundle.message("error.download", e.message ?: JetPlayBundle.message("error.unknown"))) + val errorMsg = e.message ?: JetPlayBundle.message("error.unknown") + bridge.showError(JetPlayBundle.message("error.download", errorMsg)) } } } diff --git a/src/test/kotlin/dev/twango/jetplay/editor/MediaFileEditorProviderTest.kt b/src/test/kotlin/dev/twango/jetplay/editor/MediaFileEditorProviderTest.kt index 2563c7d..49817eb 100644 --- a/src/test/kotlin/dev/twango/jetplay/editor/MediaFileEditorProviderTest.kt +++ b/src/test/kotlin/dev/twango/jetplay/editor/MediaFileEditorProviderTest.kt @@ -53,7 +53,7 @@ class MediaFileEditorProviderTest : BasePlatformTestCase() { fun testPolicy() { assertEquals( com.intellij.openapi.fileEditor.FileEditorPolicy.HIDE_DEFAULT_EDITOR, - provider.policy + provider.policy, ) } -} \ No newline at end of file +} diff --git a/src/test/kotlin/dev/twango/jetplay/transcode/MediaTranscoderTest.kt b/src/test/kotlin/dev/twango/jetplay/transcode/MediaTranscoderTest.kt index 89c102e..efac17a 100644 --- a/src/test/kotlin/dev/twango/jetplay/transcode/MediaTranscoderTest.kt +++ b/src/test/kotlin/dev/twango/jetplay/transcode/MediaTranscoderTest.kt @@ -1,6 +1,7 @@ package dev.twango.jetplay.transcode -import org.junit.Assert.* +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue import org.junit.Test class MediaTranscoderTest {