Skip to content

Commit

Permalink
v1.2.6 (#789)
Browse files Browse the repository at this point in the history
* ✔ Fixed èê removed from file names
- Camera item fit
- Fixed slide split removing chords

* ✔ Ctrl+N to create different elements
- Updated media selection
- Add media to show context button

* ✔ Fixed some issues with auto size
- Delete shows from project
- Fixed visualizer flashing
- Fixed default section closing on reset
- Reset special items style

* ✨ Better Transitions (#786)

* 🖼 Transition icons
- Transition per item

* ✨ Small changes

* ✨ Text transitions working

* ✨ More specific transitions
- Custom in/out/between
- Set transition per output style
- Custom slide transition direction
- Scripture template item transitions

* Native PDF Support (#788)

* ✔ More optimized screen capture
- Toast error when folder can't be created
- Fixed uppercase letters being capitalized
- Fixed loop caused by media thumbnail
- Fixed stage not showing text if first line was empty
- Changed default slide color so it don't become invisible

* ✨ Optimizations
- Rearrange items in context menu
- "Key" in metadata
- Fixed shows count missing in drawer
- Updates to create show popup
- Optimized output capture
- Button title tweaks

* 📄 PDF support
- Fixed mouse scroll zoom

* 📄 PDF black outline
- Many PDF rendering improvements

* 🖼 Native PDF to image converter

* ✔ Small fixes
- Website will apply http by default
- Autofocus on output website when started
- Version update
  • Loading branch information
vassbo authored Aug 29, 2024
1 parent b3951af commit 48650ae
Show file tree
Hide file tree
Showing 70 changed files with 1,605 additions and 762 deletions.
3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "freeshow",
"version": "1.2.6-beta.1",
"version": "1.2.6",
"private": true,
"main": "build/electron/index.js",
"description": "Show song lyrics and more for free!",
Expand Down Expand Up @@ -170,7 +170,6 @@
"jzz": "^1.5.9",
"node-machine-id": "^1.1.12",
"npm-run-all": "^4.1.5",
"pdf-poppler": "^0.2.1",
"pptx2json": "^0.0.10",
"protobufjs": "^7.2.3",
"qrcode-generator": "^1.4.4",
Expand Down
9 changes: 9 additions & 0 deletions public/lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,7 @@
"midi_no_velocity": "Received MIDI signal, but no velocity, defaults to first index."
},
"new": {
"create": "Create new",
"show": "New show",
"empty_show": "New empty show",
"project": "New project",
Expand Down Expand Up @@ -515,6 +516,8 @@
"zoomIn": "Zoom In",
"zoomOut": "Zoom Out",
"reset": "Reset",
"convert_to_images": "Convert to images",
"converting": "Converting...",
"remove_template_from_show": "Remove template from show",
"reset_defaults": "Reset defaults",
"to_all": "Apply to all",
Expand Down Expand Up @@ -695,6 +698,7 @@
"enabledTabs": "Toggle tabs",
"filterByTags": "Filter by tags",
"addToProject": "Add to project",
"add_to_show": "Add to show",
"lockForChanges": "Lock for editing",
"newCategory": "New category",
"changeIcon": "Change icon",
Expand Down Expand Up @@ -1140,8 +1144,13 @@
"media": "Media transition",
"slide_transition": "Slide transition",
"background_transition": "Background transition",
"specific": "Enable more specific transitions",
"between": "Between",
"in": "In",
"out": "Out",
"duration": "Duration",
"easing": "Easing",
"direction": "Direction",
"type": "Type",
"none": "None",
"fade": "Fade",
Expand Down
62 changes: 43 additions & 19 deletions public/lang/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"main": {
"welcome": "Bienvenido",
"quit": "Salir",
"docs": "Documentos",
"docs": "Documentación",
"about": "Acerca",
"unnamed": "Sin nombre",
"drop": "Soltar aquí",
Expand Down Expand Up @@ -88,14 +88,16 @@
"search_web": "Buscar canción en la web",
"more_options": "Más opciones",
"format_new_show": "Dar formato al texto",
"format_new_show_tip": "Mejore el formato del texto con capitalización automática, división de texto, asignación de grupos y más.",
"split_lines": "Número de líneas",
"split_lines_tip": "Número de lineas permitidas por diapositiva antes de la división automática",
"quick_lyrics_example_text": "Línea"
},
"preview": {
"_previous_show": "Programa anterior",
"_previous_slide": "Diapositiva anterior",
"_lock": "Bloquear salida",
"_unlock": "Resultado desbloqueado",
"_unlock": "Desbloquear salida",
"_start": "Iniciar programa",
"_update": "Actualizar resultado",
"_next_slide": "Siguiente diapositiva",
Expand All @@ -120,7 +122,7 @@
"slide": "Borrar diapositiva",
"overlays": "Borrar capas",
"audio": "Borrar audio",
"nextTimer": "Borrar temporizador de siguiente diapositiva",
"nextTimer": "Borrar temporizador de la siguiente diapositiva",
"drawing": "Borrar dibujo"
},
"remove": {
Expand All @@ -135,7 +137,7 @@
"media": {
"_loop": "Ciclo",
"play": "Reproducir",
"play_multiple": "Reproducir varios",
"play_multiple": "Reproducción múltiple",
"toggle_shuffle": "Activar reproducción aleatoria",
"next": "Siguiente",
"previous": "Anterior",
Expand All @@ -161,11 +163,14 @@
"fill": "Llenar",
"cover": "Cubrir",
"online": "En línea",
"recommended": "Recomendado"
"recommended": "Recomendado",
"bundle_media_files": "Agrupar todos los archivos de medios",
"bundle_media_files_tip": "Copiar los archivos de medios de todos los programas en una carpeta"
},
"audio": {
"settings": "Configuración de Audio",
"playlist_settings": "Ajuste de Lista de Reproducción",
"custom_output": "Salida de audio personalizada",
"mute_when_video_plays": "Silenciar cuando un vídeo se reproduce",
"metronome": "Metrónomo",
"toggle_metronome": "Activar metrónomo",
Expand Down Expand Up @@ -198,7 +203,7 @@
"slide": "Ningún tema seleccionado",
"items": "No se encontró",
"search": "No hay coincidencia",
"media": "Ningún programa en escena",
"media": "No hay medios en el programa",
"stage_show": "Sin programas en escena",
"stage_shows": "Sin videos",
"player": "Sin grupos",
Expand All @@ -222,7 +227,8 @@
"loading": "Cargando...",
"submit": "Enviar",
"password": "Contraseña",
"wrong_password": "Contraseña incorrecta"
"wrong_password": "Contraseña incorrecta",
"quick_play": "Reproducción rápida"
},
"error": {
"no_show": "No se encuentra el programa",
Expand All @@ -243,9 +249,10 @@
"author": "Autor",
"composer": "Compositor",
"publisher": "Editor",
"copyright": "Derecho de autor",
"copyright": "Derechos de autor",
"CCLI": "Licencia (CCLI)",
"year": "Año",
"key": "Clave",
"message": "Mensaje",
"message_tip": "Mostrar algo en todas las diapositivas",
"auto_media": "Obtener metadatos del contenido multimedia",
Expand Down Expand Up @@ -273,10 +280,10 @@
"black": "Negro"
},
"theme": {
"primary": "Básico",
"primary-lighter": "Claro",
"primary-darker": "Oscuro",
"primary-darkest": "Muy oscuro",
"primary": "Primario",
"primary-lighter": "Primario claro",
"primary-darker": "Primario oscuro",
"primary-darkest": "Primario más oscuro",
"text": "Texto",
"textInvert": "Texto invertido",
"secondary-text": "Texto secundario",
Expand Down Expand Up @@ -344,11 +351,11 @@
"break": "Pausa",
"tag": "Etiqueta",
"bridge": "Puente",
"outro": "Salida"
"outro": "Cierre"
},
"popup": {
"show": "Nuevo programa",
"select_show": "Select show",
"select_show": "Seleccionar programa",
"rename": "Renombrar",
"color": "Color",
"find_replace": "Buscar y reemplazar",
Expand All @@ -362,6 +369,7 @@
"delete_show_confirmation": "¿Estás seguro de querer eliminar este programa?",
"change_name": "Cambiar de nombre",
"choose_screen": "Elegir pantalla",
"choose_output": "Elegir el tipo de salida",
"change_output_values": "Cambiar valores de salida",
"choose_chord": "Elige acorde",
"set_time": "Establecer tiempo",
Expand Down Expand Up @@ -415,7 +423,6 @@
"media_replaced": "El archivo multimedia faltante fue reemplazado por uno coincidente.",
"lyrics_undefined": "¡No se pudo encontrar ninguna letra!",
"lyrics_copied": "Letra copiada de",
"no_pdf_linux": "No se puede exportar como PDF en Linux.",
"one_output": "¡Debes tener al menos una salida activa!",
"empty_cache": "La caché está vacía.",
"deleted_cache": "Se eliminó el caché de miniaturas de medios.",
Expand Down Expand Up @@ -458,6 +465,8 @@
"lyrics": "Vista de letras",
"text": "Edición de texto",
"update": "Actualizar programa",
"locked": "¡Éste programa ha sido bloqueado!",
"locked_info": "Éste programa ha sido bloqueado para edición. Desbloquéalo nuevamente en el cajón de programas",
"slide_template": "Plantilla de diapositiva",
"search_results": "Resultados de búsqueda",
"source": "Fuente",
Expand Down Expand Up @@ -499,12 +508,14 @@
"speech": "Discurso",
"startSpeaking": "Comenzar a hablar",
"stopSpeaking": "Dejar de Hablar",
"focus_mode": "Alternar modo de enfoque",
"fullscreen": "Cambiar a Pantalla Completa",
"resetZoom": "Restablecer Zoom",
"zoom": "Zoom",
"zoomIn": "Acercarse",
"zoomOut": "Alejarse",
"reset": "Reiniciar",
"remove_template_from_show": "Quitar plantilla del programa",
"reset_defaults": "Restablecer valores predeterminados",
"to_all": "Aplicar a todo",
"to_following": "Aplicar al siguiente",
Expand All @@ -519,6 +530,11 @@
"bind_to": "Salidas específicas",
"remove_binding": "Eliminar salidas específicas",
"dynamic_values": "Valores dinámicos",
"rearrange": "Reorganizar",
"to_front": "Mover al frente",
"forward": "Mover hacia adelante",
"backward": "Mover hacia atrás",
"to_back": "Mover al fondo",
"show_timer": "Tiempo hasta el espectáculo",
"hide_timer": "Tiempo hasta esconderse",
"choose_custom": "Elegir personalizado",
Expand Down Expand Up @@ -555,7 +571,7 @@
"chord_tension": "Tensión",
"chord_bass": "Bajo",
"roman_keys": "Claves romanas",
"set_key": "Set key",
"set_key": "Establecer clave",
"custom_key": "Establecer valor personalizado",
"select_chord": "Seleccionar este acorde",
"play_on_midi": "Activar en la señal MIDI",
Expand Down Expand Up @@ -598,6 +614,7 @@
"start_slide_timers": "Iniciar temporizadores en la diapositiva activa",
"id_select_output_style": "Seleccionar estilo de salida por ID",
"change_output_style": "Cambiar el estilo de salida",
"change_stage_output_layout": "Cambiar el diseño de salida del escenario",
"change_transition": "Cambiar transición",
"change_variable": "Cambiar variable",
"start_trigger": "Iniciar disparador",
Expand Down Expand Up @@ -677,6 +694,7 @@
"enabledTabs": "Mostrar/ocultar pestañas",
"filterByTags": "Filtrar por etiquetas",
"addToProject": "Agregar al proyecto",
"lockForChanges": "Bloquear para edición",
"newCategory": "Nueva categoría",
"changeIcon": "Cambiar ícono",
"changeGroup": "Cambiar grupo",
Expand All @@ -686,6 +704,7 @@
"align_with_screen": "Alinear con la pantalla",
"toggle_output": "Alternar salida",
"move_to_front": "Mover al frente",
"hide_from_preview": "Ocultar de la vista previa",
"lock_to_output": "Bloquear a la salida",
"place_under_slide": "Colocar debajo de la diapositiva",
"toggle_clock": "Alternar reloj",
Expand Down Expand Up @@ -757,7 +776,7 @@
"width": "Anchura",
"height": "Altura",
"rotation": "Rotación",
"tilt": "Tilt",
"tilt": "Inclinar",
"perspective": "Perspectiva",
"opacity": "Opacidad",
"corner_radius": "Radio de esquina",
Expand Down Expand Up @@ -907,6 +926,7 @@
},
"stage": {
"slide": "Diapositiva",
"stage_layout": "Diseño del escenario",
"current_slide_text": "Texto de diapositiva actual",
"current_slide": "Diapositiva actual",
"current_slide_notes": "Notas de diapositiva actual",
Expand Down Expand Up @@ -945,7 +965,7 @@
"media_import": "Medios",
"other": "Otro",
"language": "Idioma",
"autosave": "Autosave",
"autosave": "Autoguardado",
"never": "Nunca",
"minutes": "minutos",
"use24hClock": "Usar reloj de 24 horas",
Expand All @@ -960,6 +980,7 @@
"allow_main_screen": "Permitir salida en la pantalla principal",
"identify_screens": "Identificar pantallas",
"new_output": "Nueva salida",
"normal": "Normal",
"enable_key_output": "Habilitar salida de clave alfa",
"always_on_top": "Siempre arriba",
"kiosk_mode": "Modo quiosco",
Expand All @@ -978,7 +999,8 @@
"auto_updates": "Actualizaciones automáticas",
"disable_labels": "Etiquetas desactivadas",
"group_numbers": "Números de grupo",
"full_colors": "Despliega todos los grupos de colores",
"full_colors": "Grupo de colores de alto contraste",
"slide_number_keys": "Reproducir diapositivas con las teclas numéricas",
"auto_output": "Muestra la ventana de salida en la pantalla de inicio",
"hide_cursor_in_output": "Ocultar el cursor en la salida",
"clear_media_when_finished": "Borrar los medios cuando termine",
Expand Down Expand Up @@ -1006,6 +1028,8 @@
"data_location": "Ubicación de los datos",
"user_data_location": "Guardar la configuración del usuario en 'Ubicación de datos'",
"popup_before_close": "Mostrar siempre la ventana emergente antes de cerrar",
"disable_hardware_acceleration": "Deshabilitar aceleración por hardware",
"restart_for_change": "¡Tienes que reiniciar el programa para que el cambio surta efecto!",
"font": "Fuente",
"font_family": "Familia de fuentes",
"font_size": "Tamaño de fuente",
Expand Down
46 changes: 1 addition & 45 deletions src/electron/data/import.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import sqlite3 from "sqlite3"
import WordExtractor from "word-extractor"
import { toApp } from ".."
import { IMPORT } from "../../types/Channels"
import { dataFolderNames, getDataFolder, makeDir, readFolder } from "../utils/files"

const specialImports: any = {
powerpoint: async (files: string[]) => {
Expand All @@ -35,50 +34,7 @@ const specialImports: any = {

return data
},
pdf: async (files: string[], settings: { path: string }) => {
let data: any[] = []

// TODO: linux don't support pdf-poppler!
const pdf = require("pdf-poppler")

let opts: any = { format: "png", scale: 1920, out_prefix: "img", page: null }
let importPath = getDataFolder(settings.path, dataFolderNames.imports)

await Promise.all(files.map(pdfToImages))

async function pdfToImages(filePath: string) {
let name = getFileName(filePath)
let outputPath = path.join(importPath, name)
makeDir(outputPath)
opts.out_dir = outputPath

// WIP use pdf-to-img? (recuires canvas)
// canvas needs some binarise for compiling: https://www.npmjs.com/package/canvas?activeTab=readme#compiling
// const doc = await pdf(filePath)

// let index = 0
// for await (const page of doc) {
// index++
// console.log(index, `img-${index}.png`)
// fs.writeFile(path.join(outputPath, `img-${index}.png`), page, (err) => {
// console.error(err)
// })
// }

// data.push({ name, path: outputPath, pages: doc.length })

try {
await pdf.convert(filePath, opts)

let files = readFolder(outputPath)
if (files.length) data.push({ name, path: outputPath, pages: files.length })
} catch (err) {
console.error(err)
}
}

return data
},
pdf: (files: string[]) => files,
sqlite: async (files: string[]) => {
let data: any[] = []

Expand Down
Loading

0 comments on commit 48650ae

Please sign in to comment.