Skip to content

Commit 6ad1f69

Browse files
vassboyurividalgladsonsamshadownetdev1
authored
1.5.6-beta.3 (#2674)
* Fix verse 1 duplication when split by 'Split long verses' feature (#2657) When clicking a book name to auto-focus on verse 1, then shift-clicking to extend the selection, verse 1 would appear twice if it was split into multiple parts (1_1, 1_2, etc). The issue occurred because: - Initial selection defaulted to plain [1] - Split verses feature created [1_1, 1_2] instead - Range selection added both plain '1' and split '1_1', '1_2' Fix: After range selection, filter out plain verse IDs when their split versions exist in the selection. * Fix typo (#2658) * Auto bundle media files on save (#2667) * POC * POC 2 * Bundle project media * Cleanup * cleanup * Fix whitespace formatting --------- Co-authored-by: = <=> * Auto bundle tweaks * New items smartly auto positioned - New items auto highlighted - Old scripture templates auto converted * Fixed emitter having no ID #2669 * Fixes * Sync fixes * Sync fixes * Update modified time * Fixed cloud shows * Fixed cloud shows * Projects sync modified * Fixed cloud show modified * Media sync folder * Locate media files * Updated Korean language * Media path updates * Sync indicator - Sync fixes * Media fixes * Sync updates * Detect existing unused Bible files - Fixed freeze when local Bible file did not exist * Version update --------- Co-authored-by: Yuri Vidal <yurividal@users.noreply.github.com> Co-authored-by: Gladson Sam <115465353+gladsonsam@users.noreply.github.com> Co-authored-by: shadownetdev1 <26750646+shadownetdev1@users.noreply.github.com>
1 parent 035bfdd commit 6ad1f69

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+1287
-543
lines changed

.vscode/settings.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"prettier.printWidth": 500,
1010
"prettier.singleQuote": false,
1111
"prettier.semi": false,
12+
"prettier.tabWidth": 4,
1213
"typescript.preferences.quoteStyle": "double",
1314
"typescript.preferences.importModuleSpecifier": "non-relative"
1415
}

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "freeshow",
3-
"version": "1.5.6-beta.2",
3+
"version": "1.5.6-beta.3",
44
"private": true,
55
"main": "build/electron/index.js",
66
"description": "Show song lyrics and more for free!",

public/lang/en.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,10 @@
214214
"online": "Online",
215215
"downloading": "Downloading",
216216
"recommended": "Recommended",
217+
"media_sync_folder": "Media sync folder",
218+
"media_sync_folder_tip": "Copy all used media files continuously into one shared folder. Any custom sync provider can be pointed to that folder.",
217219
"bundle_media_files": "Bundle all media files",
218-
"bundle_media_files_tip": "Copy the media files from all shows into one folder"
220+
"bundle_media_files_tip": "Copy the media files from all shows and projects into one folder"
219221
},
220222
"audio": {
221223
"settings": "Audio settings",
@@ -860,9 +862,14 @@
860862
"media_folder": "Cloud media folder",
861863
"reconnect": "Reconnect",
862864
"sync": "Sync now",
865+
"change_team": "Change team",
863866
"choose_method_tip": "There is existing data in the cloud. What would you like to do?",
864867
"merge_tip": "Keep the latest changes from both local and cloud data.",
865868
"readonly_tip": "Merge cloud data with local data, but never upload local changes.",
869+
"upload": "Upload",
870+
"upload_tip": "Replace cloud data with local data initially, merge normally afterwards.",
871+
"replace": "Download",
872+
"replace_tip": "Replace local data with cloud data initially, merge normally afterwards.",
866873
"local": "Local",
867874
"syncing": "Syncing to cloud",
868875
"sync_complete": "Sync completed"

public/lang/ko.json

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@
137137
"_hide_preview": "미리보기 숨기기",
138138
"show_preview": "미리보기 표시",
139139
"restore_output": "출력 복원",
140-
"enable_controls": "미디어 미리보기 조작부 표시",
141140
"background": "배경",
142141
"foreground": "전경",
143142
"slide": "슬라이드",
@@ -147,7 +146,8 @@
147146
"nextTimer": "다음 슬라이드 전환 타이머",
148147
"lock": "잠금",
149148
"unlock": "잠금 해제",
150-
"test_pattern": "테스트 패턴"
149+
"test_pattern": "테스트 패턴",
150+
"live_prepare": "출력 내용 숨기기 (검정으로 덮음)"
151151
},
152152
"clear": {
153153
"general": "지우기",
@@ -217,8 +217,10 @@
217217
"mute_when_video_plays": "비디오 작동시 소리 안나옴",
218218
"allow_gaining": "증폭 허용",
219219
"allow_gaining_tip": "100%보다 큰 볼륨 허용(소리가 왜곡될 수 있음)",
220-
"pre_fader_volume_meter": "페이더 앞 볼륨 미터",
221220
"mixer": "믹서",
221+
"equalizer": "이퀄라이저",
222+
"preset": "사전설정",
223+
"main": "메인",
222224
"metronome": "메트로놈",
223225
"toggle_metronome": "메트로놈 토글",
224226
"use_metadata_bpm": "메타데이터에서 BPM 사용",
@@ -353,6 +355,7 @@
353355
"inputs": {
354356
"name": "이름",
355357
"url": "URL",
358+
"group": "그룹",
356359
"method": "방식",
357360
"contentType": "내용 유형",
358361
"payload": "Payload",
@@ -397,7 +400,8 @@
397400
"offers": "예배",
398401
"notice": "공지",
399402
"visuals": "시각적인",
400-
"action_tip": "이 분류의 쇼가 나올 때마다 실행할 동작입니다."
403+
"action_tip": "이 분류의 쇼가 나올 때마다 실행할 동작입니다.",
404+
"create_nonexistent": "존재하지 않는 분류 생성"
401405
},
402406
"groups": {
403407
"current": "현재",
@@ -431,6 +435,7 @@
431435
"variable": "변수",
432436
"trigger": "트리거",
433437
"audio_stream": "오디오 스트림",
438+
"now_playing": "현재 재생중인 파일",
434439
"aspect_ratio": "비율 변경",
435440
"max_lines": "최대 줄 수 설정",
436441
"transition": "전환 효과",
@@ -444,6 +449,7 @@
444449
"choose_output": "출력 유형 선택",
445450
"choose_style": "스타일 사전 설정 선택",
446451
"change_output_values": "출력 값 변경",
452+
"output_selector": "출력 선택기",
447453
"choose_chord": "화음 선택",
448454
"set_time": "시간 설정",
449455
"assign_shortcut": "단축키 할당",
@@ -482,14 +488,16 @@
482488
"manage_colors": "색상 관리",
483489
"manage_metadata": "메타데이터 관리",
484490
"manage_dynamic_values": "동적 값 관리",
491+
"template_style_overrides": "스타일 덮어씌우기",
485492
"choose_camera": "카메라 선택",
486493
"manage_tags": "꼬리표 관리",
487-
"sync_categories": "동기화 할 분류 선택",
494+
"sync_categories": "분류 동기화",
488495
"effect_items": "효과 항목",
489496
"initialize": "FreeShow에 오신 것을 환영합니다",
490497
"unsaved": "정말 종료하시겠습니까?",
491498
"cancel": "취소",
492499
"continue": "계속",
500+
"restore": "백업 복원",
493501
"reset_all": "모든 것을 재설정",
494502
"reset_all_confirm": "정말 모든 것을 재설정하시겠습니까?",
495503
"reset_all_action": "전체 프로그램을 재설정하지만 \"Shows\" 폴더의 .show 파일은 삭제하지 않습니다.",
@@ -762,6 +770,7 @@
762770
"start_playlist": "재생목록 시작",
763771
"playlist_next": "재생목록에서 다음 트랙",
764772
"start_metronome": "메트로놈 시작",
773+
"start_audio_effect": "오디오 효과 시작",
765774
"id_start_timer": "타이머 시작",
766775
"start_slide_timers": "활성 슬라이드에서 타이머 시작",
767776
"id_select_output_style": "출력 스타일 선택",
@@ -794,7 +803,9 @@
794803
"activate_background_cleared": "배경을 지울 때 활성화",
795804
"activate_show_created": "쇼를 생성했을 때 활성화",
796805
"activate_show_opened": "쇼를 열었을 때 활성화",
797-
"activate_audio_playlist_ended": "오디오 재생목록이 끝났을 때 활성화"
806+
"activate_audio_playlist_ended": "오디오 재생목록이 끝났을 때 활성화",
807+
"mark_played": "재생한 것으로 표시",
808+
"mark_not_played": "재생하지 않은 것으로 표시"
798809
},
799810
"conditions": {
800811
"show_item": "항목 표시 조건",
@@ -946,6 +957,8 @@
946957
"max_lines_per_slide": "슬라이드 당 최대 줄 수",
947958
"break_long_lines": "긴 줄을 나눔",
948959
"break_long_lines_tip": "설정한 단어보다 긴 경우 줄 나눔",
960+
"style_overrides_tip": "일치하는 단어의 스타일을 자동으로 바꿉니다.",
961+
"style_override_pattern": "단어 또는 /regex/",
949962
"skip_virtual_breaks": "가상 중단 무시",
950963
"media_fit": "미디어 맞춤",
951964
"cropping": "잘라내기",
@@ -986,8 +999,8 @@
986999
"_title_top": "위로 정렬",
9871000
"_title_bottom": "아래로 정렬",
9881001
"align_center": "중앙",
989-
"align_start": "시작",
990-
"align_end": "",
1002+
"align_start": "",
1003+
"align_end": "아래",
9911004
"outline": "윤곽선",
9921005
"shadow": "그림자",
9931006
"shadow_inset": "내부 그림자",
@@ -1046,7 +1059,9 @@
10461059
"longitude": "경도",
10471060
"altitude": "고도",
10481061
"fahrenheit": "화씨",
1049-
"longRange": "장기간"
1062+
"longRange": "장기간",
1063+
"media_item_tip": "해당 매체를 배경으로 사용하시겠습니까?",
1064+
"convert_to_background": "배경으로 변환"
10501065
},
10511066
"items": {
10521067
"text": "글상자",
@@ -1065,13 +1080,14 @@
10651080
"variable": "변수",
10661081
"web": "웹사이트",
10671082
"slide_tracker": "진행률",
1068-
"visualizer": "비주얼라이저",
1083+
"visualizer": "시각화",
10691084
"captions": "자막",
1085+
"metronome": "메트로놈",
10701086
"icon": "아이콘",
10711087
"effect": "효과",
10721088
"slide_text": "슬라이드 본문",
10731089
"slide_notes": "슬라이드 메모",
1074-
"current_output": "현재 출력"
1090+
"current_output": "출력 창"
10751091
},
10761092
"borders": {
10771093
"solid": "실선",
@@ -1202,7 +1218,8 @@
12021218
"source_output": "원본 출력",
12031219
"auto_stretch": "내용을 자동으로 늘려서 채움",
12041220
"labels": "이름표 보기",
1205-
"label_color": "이름표 색상"
1221+
"label_color": "이름표 색상",
1222+
"create_stage_output": "무대 출력 생성"
12061223
},
12071224
"settings": {
12081225
"general": "일반",
@@ -1253,12 +1270,15 @@
12531270
"window": "",
12541271
"active_style": "스타일 사용",
12551272
"alert_updates": "새 업데이트가 있을 때 알림",
1273+
"alert_updates_beta": "새로운 베타 버전이 나오면 알림",
12561274
"auto_updates": "자동 업데이트",
12571275
"disable_labels": "이름표 비활성화",
12581276
"group_numbers": "그룹 번호",
12591277
"auto_group_numbers": "그룹 번호 자동 할당",
1278+
"shortcuts_on_slides": "슬라이드에 단축키 표시",
12601279
"transparent_slides": "투명 슬라이드 미리보기",
12611280
"full_colors": "그룹 색상 고대비",
1281+
"next_item_on_last_slide": "처음/마지막 슬라이드에서 왼쪽/오른쪽 화살표로 프로젝트 아이템 변경",
12621282
"slide_number_keys": "숫자 키로 슬라이드 재생",
12631283
"auto_shortcut_first_letter": "본문의 첫 글자를 단축키로 자동 지정",
12641284
"startup_projects_list": "시작할 때 프로젝트 목록을 보여줌",
@@ -1288,14 +1308,11 @@
12881308
"add": "추가",
12891309
"remove": "제거",
12901310
"change_name": "이름 변경",
1291-
"show_location": "위치 표시",
12921311
"data_location": "데이터 위치",
1293-
"user_data_location": "'데이터 위치'에 사용자 설정 저장",
1294-
"user_data_exists": "사용자 정의 위치에 데이터가 있습니다. 덮어씌우시겠습니까?",
1295-
"user_data_yes": "예, 현재 데이터를 유지합니다.",
1296-
"user_data_no": "아니오, 기존 데이터를 가져옵니다.",
12971312
"auto_locate_missing_media_files": "잃어버린 미디어 파일을 자동으로 연결",
12981313
"popup_before_close": "확인 팝업 닫기 활성화",
1314+
"log_song_usage": "곡 사용 내역을 파일로 기록",
1315+
"auto_error_reporting": "자동으로 오류 보고",
12991316
"disable_hardware_acceleration": "하드웨어 가속 비활성화",
13001317
"restart_for_change": "변경사항을 적용하려면 프로그램을 다시 시작해야 합니다!",
13011318
"font": "글자",
@@ -1319,6 +1336,7 @@
13191336
"restart": "서버 재시작",
13201337
"connect_to": "$1(으)로 연결",
13211338
"disconnect_from": "$1에서 연결 끊음",
1339+
"sync_categories_tip": "곡으로 업로드할 분류 선택",
13221340
"reset_all": "모든 것을 재설정",
13231341
"reset_theme": "테마 재설정",
13241342
"reset_themes": "테마 재설정",
@@ -1342,7 +1360,8 @@
13421360
},
13431361
"output": {
13441362
"state_inactive": "비활성화",
1345-
"state_locked": "잠김"
1363+
"state_locked": "잠김",
1364+
"disabled_layers": "비활성 레이어"
13461365
},
13471366
"profile": {
13481367
"profiles_hint": "사용자가 프로그램의 특정 부분만 제어하거나 편집할 수 있도록 접근을 제한하는 여러 개의 프로필/역할을 만듭니다.",
@@ -1404,13 +1423,15 @@
14041423
"verse_numbers": "구절 번호",
14051424
"verses_on_individual_lines": "각 구절 줄 나눔",
14061425
"divide_long_verses": "긴 구절은 나눔",
1426+
"split_long_verses_suffix": "분절 접미사 보기",
14071427
"version": "판본 표시",
14081428
"reference": "참조 표시",
14091429
"split_reference": "참조 분리",
14101430
"combine_with_text": "텍스트와 결합",
14111431
"first_slide_reference": "첫 번째 슬라이드에 참조 표시",
14121432
"reference_at_bottom": "하단으로 이동",
14131433
"red_jesus": "예수님의 말씀을 빨간색으로",
1434+
"show_all": "모두 보기",
14141435
"search": "성경에서 검색"
14151436
},
14161437
"filter": {

src/electron/IPC/responsesMain.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { getPresentationApplications, presentationControl, startSlideshow } from
2323
import { closeServers, startServers, updateServerData } from "../servers"
2424
import { apiReturnData, emitOSC, startWebSocketAndRest, stopApiListener } from "../utils/api"
2525
import { closeMain } from "../utils/close"
26-
import { bundleMediaFiles, getDataFolderPath, getDataFolderRoot, getFileInfo, getMediaCodec, getMediaTracks, getPaths, getSimularPaths, loadFile, loadShows, locateMediaFile, openInSystem, readExifData, readFile, readFolderContent, selectFiles, selectFilesDialog, selectFolder, writeFile } from "../utils/files"
26+
import { addToMediaFolder, bundleMediaFiles, getDataFolderPath, getDataFolderRoot, getFileInfo, getMediaCodec, getMediaSyncFolderPath, getMediaTracks, getPaths, getSimularPaths, loadFile, loadShows, locateMediaFile, openInSystem, readExifData, readFile, readFolder, readFolderContent, selectFiles, selectFilesDialog, selectFolder, setMediaSyncFolderPath, writeFile } from "../utils/files"
2727
import { getMachineId } from "../utils/helpers"
2828
import { LyricSearch } from "../utils/LyricSearch"
2929
import { closeMidiInPorts, getMidiInputs, getMidiOutputs, receiveMidi, sendMidi } from "../utils/midi"
@@ -149,8 +149,12 @@ export const mainResponses: MainResponses = {
149149
[Main.RECORDER]: (data) => saveRecording(data),
150150
[Main.SYSTEM_OPEN]: (data) => openInSystem(data),
151151
[Main.LOCATE_MEDIA_FILE]: (data) => locateMediaFile(data),
152+
[Main.GET_MEDIA_FOLDER_PATH]: () => getMediaSyncFolderPath(),
153+
[Main.SET_MEDIA_FOLDER_PATH]: (data) => setMediaSyncFolderPath(data),
152154
[Main.GET_SIMILAR]: (data) => getSimularPaths(data),
153-
[Main.BUNDLE_MEDIA_FILES]: () => bundleMediaFiles(),
155+
[Main.BUNDLE_MEDIA_FILES]: (data) => bundleMediaFiles(data),
156+
[Main.MEDIA_FOLDER_COPY]: (data) => addToMediaFolder(data.paths),
157+
[Main.READ_BIBLES_FOLDER]: () => readBiblesFolder(),
154158
[Main.FILE_INFO]: (data) => getFileInfo(data),
155159
[Main.READ_FOLDER]: (data) => readFolderContent(data),
156160
[Main.READ_FILE]: (data) => ({ content: readFile(data.path) }),
@@ -223,8 +227,8 @@ export function startImport(data: { channel: string; format: { name: string; ext
223227
importShow(data.channel, files || null, data.settings || {})
224228
}
225229

226-
function importFiles(paths: string[]) {
227-
importShow("IMPORT", paths, {})
230+
function importFiles(data: { id: string; paths: string[] }) {
231+
importShow(data.id, data.paths, {})
228232
}
229233

230234
// BIBLE
@@ -255,6 +259,15 @@ export function loadScripture(msg: { id: string; name: string }) {
255259
return bible
256260
}
257261

262+
function readBiblesFolder() {
263+
const bibleFolder: string = getDataFolderPath("scriptures")
264+
const names = readFolder(bibleFolder)
265+
return names.map((name) => {
266+
const filePath = path.join(bibleFolder, name)
267+
return { path: filePath, name: name.replace(/\.fsb$/i, "") }
268+
})
269+
}
270+
258271
// SHOW
259272
export function loadShow(msg: { id: string; name: string }) {
260273
const showsFolder = getDataFolderPath("shows")

0 commit comments

Comments
 (0)