Skip to content

Releases: Arturo254/OpenTune

1.9.4

19 Jan 21:31
aca546c
Compare
Choose a tag to compare

OpenTune

Logo de OpenTune

Notas de la Versión 1.9.4

🚀 Mejoras Principales:

  • Solucion de descarga de canciones
  • Solucion de reproduccion
  • Solucion de craheos al reproducir canciones
  • #168

🔗 Colaboración de Código Abierto

OpenTune es un proyecto de código abierto. ¡Invitamos a colaborar!

  • Haz un fork del repositorio
  • Envía pull requests
  • Explora y mejora el código fuente

Mejorando continuamente, juntos.

What's Changed

Full Changelog: 1.9.3...1.9.4

1.9.3

30 Dec 02:23
Compare
Choose a tag to compare

OpenTune

Logo de OpenTune

Notas de la Versión 1.9.3 (fix)

🚀 Mejoras Principales:

  • Solucion de descarga de canciones (necesario eliminar todas las cache)
  • Solucion de reproduccion

Refinamientos de Interfaz

  • Rediseño ligero del Reproductor
  • Rediseño del menu del reproductor
  • Rediseño de la caracteristica de letras (ahora es mas visible)

🔗 Colaboración de Código Abierto

OpenTune es un proyecto de código abierto. ¡Invitamos a colaborar!

  • Haz un fork del repositorio
  • Envía pull requests
  • Explora y mejora el código fuente

Mejorando continuamente, juntos.

What's Changed

Full Changelog: 1.9.1...1.9.3

1.9.2.Beta2

22 Dec 21:56
Compare
Choose a tag to compare

OpenTune

Logo de OpenTune

Notas de la Versión V 1.9.2.Beta2

🚀 Mejoras Principales

Autenticación y Estabilidad

Nueva Opcion: Ahora puedes cerrar sesion facilmente con la nueva opcion

Refinamientos de Interfaz

  • Sistema de Descargas: Solucionamos problemas de descarga de contenido para una experiencia más fluida
  • Selección de Idioma: Se elimino el selector de idioma
  • Apariencia: Ahora puedes personalizar el redondeo de la imagen del reproductor

🔗 Colaboración de Código Abierto

OpenTune es un proyecto de código abierto. ¡Invitamos a colaborar!

  • Haz un fork del repositorio
  • Envía pull requests
  • Explora y mejora el código fuente

Mejorando continuamente, juntos.

1.9.1

08 Dec 02:28
Compare
Choose a tag to compare

OpenTune

Logo de OpenTune

Notas de la Versión v1.9.1

🚀 Mejoras Principales

Autenticación y Estabilidad

  • Ahora ya no es necesario iniciar sesion en la app
  • Barra de volumen mejorada.
    Nueva funcion : Ahora dando click en el icono de volumen se mutea y se unmutea

Refinamientos de Interfaz

  • Sistema de Descargas: Solucionamos problemas de descarga de contenido para una experiencia más fluida
  • Selección de Idioma: Interfaz renovada con diseño más intuitivo usando banderas

🔗 Colaboración de Código Abierto

OpenTune es un proyecto de código abierto. ¡Invitamos a colaborar!

  • Haz un fork del repositorio
  • Envía pull requests
  • Explora y mejora el código fuente

Mejorando continuamente, juntos.

1.9.0

19 Nov 00:16
Compare
Choose a tag to compare

🎧 OpenTune 1.9.0

icon-512


🚀 Mejoras y Novedades en OpenTune 1.9.0 :

  • Inicio de sesión: sigue siendo necesario inicar sesion para evitar los errores de descargas:

  • Corrección en el sistema de descargas: Hemos resuelto el problema que afectaba la descarga de contenido, garantizando una experiencia de usuario más fluida y confiable.

  • Rediseño de la opcion de "Cambios". : ahora es un ModalBottomSheet y tiene un mejor diseño

  • Optimización de dependencias: Se corrigió un error en una de las librerías principales, mejorando la estabilidad y rendimiento general de la aplicación.

  • Rediseño de cambio de idioma: Ahora es mas intuitivo. agregando banderas y haciendolo mas bonito:

Screen_recording_20241118_181010.mp4

🔗 Contribuye al Proyecto

OpenTune es un proyecto de código abierto. Si deseas colaborar en su desarrollo o explorar el código fuente, no dudes en realizar un fork o enviar tus pull requests.


Registro Completo de Cambios: Comparar versiones


1.8.0

03 Nov 00:23
Compare
Choose a tag to compare

🎧 OpenTune 1.8.0

icon-512


🚀 Mejoras y Novedades en OpenTune 1.8.0

  • Inicio de sesión: sigue siendo necesario inicar sesion para evitar los errores de descargas:
  • Mejora del diseño de Integracion con discord: Ahora funciona la integracion con discord (Rich) y se rediseño (Beta)
 SELECT song.*
             SELECT song.id, song.title, song.thumbnailUrl,
               (SELECT COUNT(1)
                FROM event
                WHERE songId = song.id
                  AND timestamp > :fromTimeStamp AND timestamp <= :toTimeStamp) AS songCountListened,
               (SELECT SUM(event.playTime)
                FROM event
                WHERE songId = song.id
                  AND timestamp > :fromTimeStamp AND timestamp <= :toTimeStamp) AS timeListened
        FROM song
        JOIN (SELECT songId
                     FROM event
                     WHERE timestamp > :fromTimeStamp
                     AND timestamp <= :toTimeStamp
                     GROUP BY songId
                     ORDER BY SUM(playTime) DESC
                     LIMIT :limit)
        ON song.id = songId
        LIMIT :limit
        OFFSET :offset
    """,
    )
    fun mostPlayedSongsStats(
        limit: Int = 6,
        offset: Int = 0,
        fromTimeStamp: Long,
        toTimeStamp: Long? = LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli(),
    ): Flow<List<SongWithStats>>
    @Transaction
    @Query(
        """
        SELECT song.*,
               (SELECT COUNT(1)
                FROM event
                WHERE songId = song.id
                  AND timestamp > :fromTimeStamp AND timestamp <= :toTimeStamp) AS songCountListened,
               (SELECT SUM(event.playTime)
                FROM event
                WHERE songId = song.id
                  AND timestamp > :fromTimeStamp AND timestamp <= :toTimeStamp) AS timeListened
        FROM song
        JOIN (SELECT songId
                     FROM event
                     WHERE timestamp > :fromTimeStamp
                     AND timestamp <= :toTimeStamp
                     GROUP BY songId
                     ORDER BY SUM(playTime) DESC
                     LIMIT :limit)
@@ -328,6 +372,7 @@ interface DatabaseDao {
        fromTimeStamp: Long,
        limit: Int = 6,
        offset: Int = 0,
        toTimeStamp: Long? = LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli(),
    ): Flow<List<Song>>

    @Transaction
@@ -338,13 +383,19 @@ interface DatabaseDao {
                FROM song_artist_map
                         JOIN event ON song_artist_map.songId = event.songId
                WHERE artistId = artist.id
                  AND timestamp > :fromTimeStamp) AS songCount
                  AND timestamp > :fromTimeStamp AND timestamp <= :toTimeStamp) AS songCount,
               (SELECT SUM(event.playTime)
                FROM song_artist_map
                         JOIN event ON song_artist_map.songId = event.songId
                WHERE artistId = artist.id
                  AND timestamp > :fromTimeStamp AND timestamp <= :toTimeStamp) AS timeListened
        FROM artist
                 JOIN(SELECT artistId, SUM(songTotalPlayTime) AS totalPlayTime
                      FROM song_artist_map
                               JOIN (SELECT songId, SUM(playTime) AS songTotalPlayTime
                                     FROM event
                                     WHERE timestamp > :fromTimeStamp
                                     AND timestamp <= :toTimeStamp
                                     GROUP BY songId) AS e
                                    ON song_artist_map.songId = e.songId
                      GROUP BY artistId
@@ -358,30 +409,42 @@ interface DatabaseDao {
        fromTimeStamp: Long,
        limit: Int = 6,
        offset: Int = 0,
        toTimeStamp: Long? = LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli(),
    ): Flow<List<Artist>>

    @Transaction
    @Query(
        """
        SELECT album.*
        SELECT album.*,
               (SELECT COUNT(1)
                FROM song_album_map
                         JOIN event ON song_album_map.songId = event.songId
                WHERE albumId = album.id
                  AND timestamp > :fromTimeStamp AND timestamp <= :toTimeStamp) AS songCountListened,
               (SELECT SUM(event.playTime)
                FROM song_album_map
                         JOIN event ON song_album_map.songId = event.songId
                WHERE albumId = album.id
                  AND timestamp > :fromTimeStamp AND timestamp <= :toTimeStamp) AS timeListened
        FROM album
                 JOIN(SELECT albumId
                      FROM song
                               JOIN (SELECT songId, SUM(playTime) AS songTotalPlayTime
                                     FROM event
                                     WHERE timestamp > :fromTimeStamp
                                     GROUP BY songId) AS e
                                    ON song.id = e.songId
                      WHERE albumId IS NOT NULL
                      GROUP BY albumId
                      ORDER BY SUM(songTotalPlayTime) DESC
                      LIMIT :limit)
                     ON album.id = albumId
                WHERE id IN (SELECT song.albumId
                     FROM event
                              JOIN
                          song
                          ON event.songId = song.id
                     WHERE event.timestamp > :fromTimeStamp
                     AND event.timestamp <= :toTimeStamp
                     GROUP BY song.albumId
                     HAVING song.albumId IS NOT NULL)
                ORDER BY timeListened DESC
                LIMIT :limit OFFSET :offset
    """,
    )
    fun mostPlayedAlbums(
        fromTimeStamp: Long,
        limit: Int = 6,
        offset: Int = 0,
        toTimeStamp: Long? = LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli(),
    ): Flow<List<Album>>

    @Transaction
@@ -773,6 +836,10 @@ interface DatabaseDao {
    @Query("SELECT * FROM event ORDER BY rowId DESC")
    fun events(): Flow<List<EventWithSong>>

    @Transaction
    @Query("SELECT * FROM event ORDER BY rowId ASC LIMIT 1")
    fun firstEvent(): Flow<EventWithSong>
    @Query("DELETE FROM event")
    fun clearListenHistory()

@@ -900,7 +967,17 @@ interface DatabaseDao {
        albumPage.songs
            .map(SongItem::toMediaMetadata)
            .onEach(::insert)
            .mapIndexed { index, song ->
            .onEach {
                update(
                    it.toSongEntity().copy(
                        title = it.title,
                        duration = it.duration,
                        thumbnailUrl = it.thumbnailUrl,
                        albumId = it.album?.id,
                        albumName = it.album?.title,
                    ),
                )
            }.mapIndexed { index, song ->
                SongAlbumMap(
                    songId = song.id,
                    albumId = albumPage.album.browseId,
@@ -1006,7 +1083,17 @@ interface DatabaseDao {
        albumPage.songs
            .map(SongItem::toMediaMetadata)
            .onEach(::insert)
            .mapIndexed { index, song ->
            .onEach {
                update(
                    it.toSongEntity().copy(
                        title = it.title,
                        duration = it.duration,
                        thumbnailUrl = it.thumbnailUrl,
                        albumId = it.album?.id,
                        albumName = it.album?.title,
                    ),
                )
            }.mapIndexed { index, song ->
                SongAlbumMap(
                    songId = song.id,
                    albumId = albumPage.album.browseId,
@@ -1089,3 +1176,4 @@ interface DatabaseDao {
        raw("PRAGMA wal_checkpoint(FULL)".toSQLiteQuery())
    }
}
  • Corrección en el sistema de descargas: Hemos resuelto el problema que afectaba la descarga de contenido, garantizando una experiencia de usuario más fluida y confiable.

  • Control sobre contenido impulsado por IA: Los usuarios ahora pueden activar o desactivar el contenido generado por inteligencia artificial según sus preferencias personales.

  • Optimización de dependencias: Se corrigió un error en una de las librerías principales, mejorando la estabilidad y rendimiento general de la aplicación.

  • Integración con Discord: La integración con Discord ha sido mejorada, permitiendo compartir en tiempo real la música que estás escuchando. A continuación, un ejemplo de código para configurar la integración:

import com.discord.integration.DiscordRichPresence
import com.discord.integration.DiscordAPI

fun setupDiscordIntegration(trackName: String, artistName: String) {
    val presence = DiscordRichPresence().apply {
        details = "Escuchando: $trackName"
        state = "Artista: $artistName"
        largeImageKey = "opentune_icon"
        largeImageText = "OpenTune 1.8.0"
        startTimestamp = System.currentTimeMillis() / 1000
    }
    
    DiscordAPI.updatePresence(presence)
}

// Llama esta función al iniciar una canción
setupDiscordIntegration("Nombre de la canción", "Nombre del artista")

🔗 Contribuye al Proyecto

OpenTune es un proyecto de código abierto. Si deseas colaborar en su desarrollo o explorar el código fuente, no dudes en realizar un fork o enviar tus pull requests.


Registro Completo de Cambios: Comparar versiones


Fix Version : se corrigio el error de des...

Read more

1.7.0

25 Oct 04:21
Compare
Choose a tag to compare

🎧 OpenTune 1.7.0

icon-512


🚀 Novedades en OpenTune 1.7.0

Nuevo sistema de notificacion cuando hay una nueva version disponible

Mejoras de codigo General

Important

Ahora es necesario iniciar sesion para reproducir algunas canciones (cambios en la API)


Se agego un pequeño punto en el icono de ajutes cuando hay una nueva version

🧪 Optimizacion general de la aplicacion:

Ahora la aplicacion tiene un mejor rendimento en dispositivos antiguos


Cambio de icono:

Ahora el icono tiene una identidad mas profunda y acorde a Opentune

🧪 Pruebas Beta:

Estamos probando nuevas características para futuras versiones. ¡Cualquier comentario es bienvenido para ayudarnos a mejorar OpenTune! Si encuentras algún problema, no dudes en abrir un issue en GitHub.


🔗 Contribuye al Proyecto:

Este proyecto es de código abierto. Si deseas contribuir o explorar el código fuente, ¡no dudes en hacer un fork o enviar tus pull requests!


Full Changelog: 1.6.0...1.7.0

1.6.0

18 Oct 00:26
Compare
Choose a tag to compare

🎧 OpenTune 1.6.0

OpenTune Icon

🚀 Novedades en OpenTune 1.6.0

Nuevo sistema de notificacion cuando hay una nueva version disponible

Mejoras de codigo General

Important

Ahora es necesario iniciar sesion para reproducir algunas canciones (cambios en la API)


Se agego un pequeño punto en el icono de ajutes cuando hay una nueva version

🧪 Pruebas Beta:

Estamos probando nuevas características para futuras versiones. ¡Cualquier comentario es bienvenido para ayudarnos a mejorar OpenTune! Si encuentras algún problema, no dudes en abrir un issue en GitHub.


🔗 Contribuye al Proyecto:

Este proyecto es de código abierto. Si deseas contribuir o explorar el código fuente, ¡no dudes en hacer un fork o enviar tus pull requests!


Full Changelog: 1.4.0...1.6.0

1.4.0

27 Sep 03:02
Compare
Choose a tag to compare

🎧 OpenTune 1.4.0

OpenTune Icon

🚀 Novedades en OpenTune 1.4.0

Nuevo estilo de reproductor:

  • Nueva animacion de movimiento estilo blur (BETA) compatible con android 12+

** Se elimino el "Sin conexion"**


**Se agrego : **

image

que solicita el permiso de acceso a norttificaciones para no hacerlo desde los ajustes


Se agego un pequeño punto en el icono de ajutes cuando hay una nueva version

🧪 Pruebas Beta:

Estamos probando nuevas características para futuras versiones. ¡Cualquier comentario es bienvenido para ayudarnos a mejorar OpenTune! Si encuentras algún problema, no dudes en abrir un issue en GitHub.


🔗 Contribuye al Proyecto:

Este proyecto es de código abierto. Si deseas contribuir o explorar el código fuente, ¡no dudes en hacer un fork o enviar tus pull requests!


Full Changelog: 1.5.0...1.4.0

1.5.0

30 Sep 01:31
Compare
Choose a tag to compare

🎧 OpenTune 1.5.0

OpenTune Icon

🚀 Novedades en OpenTune 1.5.0

Nuevo estilo de reproductor:

  • Nueva animacion de movimiento estilo blur (Movimiento) (BETA) compatible con android 12+

** Se agregaron traducciones al ruso (98%) "**


**Se agrego : **

( Configurar OpenTune para abrir links )

image

( Saltar a la siguiente cancion en caso de error)

image

que solicita el permiso de acceso a norttificaciones para no hacerlo desde los ajustes


Se agego un pequeño punto en el icono de ajutes cuando hay una nueva version

🧪 Pruebas Beta:

Estamos probando nuevas características para futuras versiones. ¡Cualquier comentario es bienvenido para ayudarnos a mejorar OpenTune! Si encuentras algún problema, no dudes en abrir un issue en GitHub.


🔗 Contribuye al Proyecto:

Este proyecto es de código abierto. Si deseas contribuir o explorar el código fuente, ¡no dudes en hacer un fork o enviar tus pull requests!


Full Changelog: 1.5.0...1.4.0