Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 891bfc7382 | |||
| 424e591064 | |||
| 810d5c40de | |||
| 81c30245c4 | |||
| e8403a2caf | |||
| 7947422027 | |||
| f14a8170d6 | |||
| 35810868fb | |||
| c418b417ec | |||
| 99d4b8dfcc | |||
| e77c7da068 | |||
| ed376a728b | |||
| 5da51b2999 | |||
| 3a8ec2e6de | |||
| d87a69fc9f | |||
| 3747eb6f8c | |||
| a602821d7b | |||
| b4b1dcdc4a | |||
| 03663d8698 | |||
| 4b05dd21e3 | |||
| 9999f23629 | |||
| 1503329864 | |||
| dedebf013c |
@@ -0,0 +1,31 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. iOS]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=67 format=3 uid="uid://b2sygl55s6fng"]
|
||||
[gd_scene load_steps=69 format=3 uid="uid://b2sygl55s6fng"]
|
||||
|
||||
[ext_resource type="Script" path="res://main.gd" id="1_ubs1p"]
|
||||
[ext_resource type="Texture2D" uid="uid://b8on1case224h" path="res://LoopPressed.png" id="2_iolk5"]
|
||||
@@ -30,6 +30,8 @@
|
||||
[ext_resource type="Script" path="res://Spinning.gd" id="14_rhw4k"]
|
||||
[ext_resource type="Script" path="res://yt_tab_button.gd" id="16_2t15p"]
|
||||
[ext_resource type="Script" path="res://help_button.gd" id="17_4b8oh"]
|
||||
[ext_resource type="Script" path="res://songs_menu.gd" id="27_f8wx0"]
|
||||
[ext_resource type="PackedScene" uid="uid://bel6i6wdbexw4" path="res://search_results.tscn" id="27_g8wmp"]
|
||||
[ext_resource type="Texture2D" uid="uid://bmbxyma4ra46p" path="res://Download.png" id="29_v44vi"]
|
||||
[ext_resource type="Script" path="res://update_checker.gd" id="30_byc5i"]
|
||||
[ext_resource type="Script" path="res://patch_notes_button.gd" id="31_hjsj1"]
|
||||
@@ -92,14 +94,6 @@ keycode = 82
|
||||
[sub_resource type="Shortcut" id="Shortcut_axi6u"]
|
||||
events = [SubResource("InputEventKey_0jlka")]
|
||||
|
||||
[sub_resource type="InputEventKey" id="InputEventKey_117g0"]
|
||||
device = -1
|
||||
ctrl_pressed = true
|
||||
keycode = 83
|
||||
|
||||
[sub_resource type="Shortcut" id="Shortcut_8p5o4"]
|
||||
events = [SubResource("InputEventKey_117g0")]
|
||||
|
||||
[sub_resource type="InputEventKey" id="InputEventKey_5af16"]
|
||||
device = -1
|
||||
keycode = 32
|
||||
@@ -153,6 +147,14 @@ keycode = 81
|
||||
[sub_resource type="Shortcut" id="Shortcut_g3fcr"]
|
||||
events = [SubResource("InputEventKey_puhgg")]
|
||||
|
||||
[sub_resource type="InputEventKey" id="InputEventKey_117g0"]
|
||||
device = -1
|
||||
ctrl_pressed = true
|
||||
keycode = 83
|
||||
|
||||
[sub_resource type="Shortcut" id="Shortcut_8p5o4"]
|
||||
events = [SubResource("InputEventKey_117g0")]
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_b1152"]
|
||||
font_size = 31
|
||||
|
||||
@@ -285,20 +287,30 @@ shortcut = SubResource("Shortcut_vp2fh")
|
||||
text = "Playlists"
|
||||
script = ExtResource("12_of5fe")
|
||||
|
||||
[node name="PlaylistsPanel" type="Control" parent="."]
|
||||
visible = false
|
||||
[node name="PlaylistPanelHolder" type="Control" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 9
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -30.0
|
||||
offset_right = -30.0
|
||||
offset_bottom = -190.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
metadata/_edit_use_anchors_ = true
|
||||
|
||||
[node name="PlaylistsPanel" type="Control" parent="PlaylistPanelHolder"]
|
||||
layout_mode = 2
|
||||
anchors_preset = 0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 19.0
|
||||
offset_top = 88.0
|
||||
offset_right = 393.0
|
||||
offset_bottom = -132.0
|
||||
offset_bottom = 48.0
|
||||
grow_vertical = 2
|
||||
script = ExtResource("12_8ie8y")
|
||||
metadata/_edit_use_anchors_ = true
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="PlaylistsPanel"]
|
||||
[node name="ColorRect" type="ColorRect" parent="PlaylistPanelHolder/PlaylistsPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@@ -307,7 +319,7 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0.14902, 0.14902, 0.14902, 1)
|
||||
|
||||
[node name="PlaylistsContainer" type="ScrollContainer" parent="PlaylistsPanel"]
|
||||
[node name="PlaylistsContainer" type="ScrollContainer" parent="PlaylistPanelHolder/PlaylistsPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_left = 0.0174419
|
||||
@@ -319,44 +331,44 @@ grow_vertical = 2
|
||||
follow_focus = true
|
||||
horizontal_scroll_mode = 0
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="PlaylistsPanel/PlaylistsContainer"]
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer"]
|
||||
custom_minimum_size = Vector2(365.295, 0)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 0
|
||||
|
||||
[node name="Label" type="Label" parent="PlaylistsPanel/PlaylistsContainer/VBoxContainer"]
|
||||
[node name="Label" type="Label" parent="PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 0
|
||||
text = "PLAYLISTS"
|
||||
label_settings = SubResource("LabelSettings_0fjy0")
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PlaylistsPanel/PlaylistsContainer/VBoxContainer"]
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
size_flags_stretch_ratio = 0.0
|
||||
alignment = 1
|
||||
|
||||
[node name="CreatePlaylist" type="Button" parent="PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer"]
|
||||
[node name="CreatePlaylist" type="Button" parent="PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer"]
|
||||
custom_minimum_size = Vector2(155, 42.335)
|
||||
layout_mode = 2
|
||||
focus_mode = 0
|
||||
text = "Create
|
||||
Playlist"
|
||||
|
||||
[node name="Control" type="Control" parent="PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer"]
|
||||
[node name="Control" type="Control" parent="PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer"]
|
||||
custom_minimum_size = Vector2(7.55, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="PlayAll" type="Button" parent="PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer"]
|
||||
[node name="PlayAll" type="Button" parent="PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer"]
|
||||
custom_minimum_size = Vector2(155, 42.335)
|
||||
layout_mode = 2
|
||||
focus_mode = 0
|
||||
toggle_mode = true
|
||||
text = "Play all"
|
||||
|
||||
[node name="PlaylistsHolder" type="VBoxContainer" parent="PlaylistsPanel/PlaylistsContainer/VBoxContainer"]
|
||||
[node name="PlaylistsHolder" type="VBoxContainer" parent="PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
alignment = 1
|
||||
@@ -571,22 +583,6 @@ focus_mode = 0
|
||||
shortcut = SubResource("Shortcut_axi6u")
|
||||
text = "Randomize"
|
||||
|
||||
[node name="SettingsButton" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -77.0
|
||||
offset_top = 23.0
|
||||
offset_right = -5.0
|
||||
offset_bottom = 95.0
|
||||
grow_horizontal = 0
|
||||
scale = Vector2(0.79, 0.79)
|
||||
focus_mode = 0
|
||||
shortcut = SubResource("Shortcut_8p5o4")
|
||||
icon = ExtResource("11_esjel")
|
||||
script = ExtResource("12_073mb")
|
||||
|
||||
[node name="FileDialog" type="FileDialog" parent="."]
|
||||
title = "Open a Directory"
|
||||
position = Vector2i(28, 115)
|
||||
@@ -770,7 +766,7 @@ alignment = 1
|
||||
caret_blink = true
|
||||
script = ExtResource("12_mr42x")
|
||||
|
||||
[node name="SongsMenu" type="MenuButton" parent="."]
|
||||
[node name="SongsMenu" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_right = 1.0
|
||||
@@ -779,16 +775,21 @@ offset_top = 24.0
|
||||
offset_right = -328.0
|
||||
offset_bottom = 80.0
|
||||
grow_horizontal = 2
|
||||
focus_mode = 0
|
||||
text = "Select Songs"
|
||||
flat = false
|
||||
script = ExtResource("27_f8wx0")
|
||||
|
||||
[node name="SearchResults" type="PopupMenu" parent="."]
|
||||
handle_input_locally = false
|
||||
position = Vector2i(265, 80)
|
||||
size = Vector2i(623, 300)
|
||||
wrap_controls = false
|
||||
max_size = Vector2i(625, 300)
|
||||
allow_search = false
|
||||
[node name="SearchResults" parent="." instance=ExtResource("27_g8wmp")]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_left = 0.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 264.5
|
||||
offset_top = 84.225
|
||||
offset_right = -264.5
|
||||
offset_bottom = -263.775
|
||||
|
||||
[node name="VolumeButton" type="Button" parent="."]
|
||||
texture_filter = 1
|
||||
@@ -838,14 +839,6 @@ offset_right = 179.0
|
||||
offset_bottom = -11.0
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="DiscordMenuHolder" type="Control" parent="."]
|
||||
layout_mode = 3
|
||||
anchors_preset = 0
|
||||
offset_left = 1042.0
|
||||
offset_top = 174.0
|
||||
offset_right = 1082.0
|
||||
offset_bottom = 214.0
|
||||
|
||||
[node name="Version" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
@@ -857,24 +850,50 @@ offset_left = -64.0
|
||||
offset_top = -23.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
text = "v1.4.3"
|
||||
text = "v1.5.0.2"
|
||||
horizontal_alignment = 2
|
||||
|
||||
[node name="SettingsPopup" type="Control" parent="."]
|
||||
[node name="SettingsButton" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -77.0
|
||||
offset_top = 23.0
|
||||
offset_right = -5.0
|
||||
offset_bottom = 95.0
|
||||
grow_horizontal = 0
|
||||
scale = Vector2(0.79, 0.79)
|
||||
focus_mode = 0
|
||||
toggle_mode = true
|
||||
shortcut = SubResource("Shortcut_8p5o4")
|
||||
icon = ExtResource("11_esjel")
|
||||
script = ExtResource("12_073mb")
|
||||
|
||||
[node name="SettingsHolder" type="Control" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -295.5
|
||||
offset_top = -250.5
|
||||
offset_right = 295.5
|
||||
offset_bottom = 250.5
|
||||
offset_top = -294.0
|
||||
offset_bottom = -294.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="SettingsPopup"]
|
||||
[node name="SettingsPopup" type="Control" parent="SettingsHolder"]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -295.5
|
||||
offset_right = 295.5
|
||||
offset_bottom = 501.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="SettingsHolder/SettingsPopup"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@@ -884,7 +903,7 @@ grow_vertical = 2
|
||||
color = Color(0.14902, 0.14902, 0.14902, 1)
|
||||
metadata/_edit_use_anchors_ = true
|
||||
|
||||
[node name="SettingsMenuChild" parent="SettingsPopup" instance=ExtResource("13_7atry")]
|
||||
[node name="SettingsMenuChild" parent="SettingsHolder/SettingsPopup" instance=ExtResource("13_7atry")]
|
||||
layout_mode = 1
|
||||
offset_left = -280.0
|
||||
offset_top = 8.0
|
||||
@@ -910,7 +929,6 @@ dialog_autowrap = true
|
||||
cancel_button_text = "Download Song"
|
||||
|
||||
[node name="UpdateChecker" type="Control" parent="."]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
@@ -1101,20 +1119,23 @@ grow_vertical = 2
|
||||
label_settings = SubResource("LabelSettings_ivhc6")
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="deleteConfirm" type="ConfirmationDialog" parent="."]
|
||||
initial_position = 2
|
||||
dialog_text = "Are you sure you want to delete"
|
||||
|
||||
[connection signal="toggled" from="SelectPlaylist" to="SelectPlaylist" method="_on_toggled"]
|
||||
[connection signal="pressed" from="PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer/CreatePlaylist" to="PlaylistsPanel" method="_on_create_playlist_pressed"]
|
||||
[connection signal="toggled" from="PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer/PlayAll" to="PlaylistsPanel" method="_on_play_all_toggled"]
|
||||
[connection signal="pressed" from="PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer/CreatePlaylist" to="PlaylistPanelHolder/PlaylistsPanel" method="_on_create_playlist_pressed"]
|
||||
[connection signal="toggled" from="PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer/PlayAll" to="PlaylistPanelHolder/PlaylistsPanel" method="_on_play_all_toggled"]
|
||||
[connection signal="toggled" from="YtTabButton" to="YtTabButton" method="_on_toggled"]
|
||||
[connection signal="dir_selected" from="CreatePlaylistsMenu/FileDialog" to="CreatePlaylistsMenu" method="_on_file_dialog_dir_selected"]
|
||||
[connection signal="text_changed" from="CreatePlaylistsMenu/ScrollContainer/VBoxContainer/PlaylistName" to="CreatePlaylistsMenu" method="_on_playlist_name_text_changed"]
|
||||
[connection signal="pressed" from="CreatePlaylistsMenu/ScrollContainer/VBoxContainer/SelectDirButton" to="CreatePlaylistsMenu" method="_on_select_dir_button_pressed"]
|
||||
[connection signal="pressed" from="CreatePlaylistsMenu/ScrollContainer/VBoxContainer/CreatePlaylistButton" to="CreatePlaylistsMenu" method="_on_create_playlist_button_pressed"]
|
||||
[connection signal="pressed" from="CreatePlaylistsMenu/CloseButton" to="CreatePlaylistsMenu" method="_on_close_button_pressed"]
|
||||
[connection signal="pressed" from="SettingsButton" to="SettingsButton" method="_on_pressed"]
|
||||
[connection signal="toggled" from="SearchToggle" to="SearchToggle" method="_on_toggled"]
|
||||
[connection signal="text_submitted" from="SearchBar" to="SearchBar" method="_on_text_submitted"]
|
||||
[connection signal="index_pressed" from="SearchResults" to="SearchBar" method="_on_search_results_index_pressed"]
|
||||
[connection signal="toggled" from="VolumeButton" to="VolumeButton" method="_on_toggled"]
|
||||
[connection signal="toggled" from="SettingsButton" to="SettingsButton" method="_on_toggled"]
|
||||
[connection signal="request_completed" from="UpdateChecker/HTTPRequest" to="UpdateChecker" method="_on_http_request_completed"]
|
||||
[connection signal="request_completed" from="UpdateChecker/DownloadRequest" to="UpdateChecker" method="_on_download_request_completed"]
|
||||
[connection signal="pressed" from="UpdateChecker/ColorRect/LinkButton" to="UpdateChecker" method="_on_link_button_pressed"]
|
||||
|
||||
+1
-1
@@ -148,7 +148,7 @@ transient = false
|
||||
ok_button_text = "Open"
|
||||
file_mode = 0
|
||||
access = 2
|
||||
filters = PackedStringArray("*.png", "*.jpg", "*.jpeg", "*")
|
||||
filters = PackedStringArray("*.png", "*.jpg ", "*.jpeg", "*.gif", "*")
|
||||
show_hidden_files = true
|
||||
use_native_dialog = true
|
||||
|
||||
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cm5ps3a716wr0"
|
||||
path="res://.godot/imported/XSmall.png-2fa29ed3d6c0476862944f7e0885c6ed.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://XSmall.png"
|
||||
dest_files=["res://.godot/imported/XSmall.png-2fa29ed3d6c0476862944f7e0885c6ed.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
@@ -9,7 +9,7 @@ Button/styles/focus = SubResource("StyleBoxEmpty_1t7mm")
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5vqdt"]
|
||||
|
||||
[sub_resource type="Image" id="Image_6qp7c"]
|
||||
[sub_resource type="Image" id="Image_qsij4"]
|
||||
data = {
|
||||
"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 227, 227, 227, 36, 224, 224, 224, 168, 224, 224, 224, 233, 224, 224, 224, 236, 224, 224, 224, 170, 231, 231, 231, 31, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 227, 227, 227, 36, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 239, 230, 230, 230, 30, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 168, 224, 224, 224, 255, 224, 224, 224, 186, 224, 224, 224, 32, 224, 224, 224, 33, 224, 224, 224, 187, 224, 224, 224, 255, 225, 225, 225, 167, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 237, 224, 224, 224, 255, 224, 224, 224, 33, 255, 255, 255, 0, 255, 255, 255, 0, 227, 227, 227, 36, 224, 224, 224, 255, 224, 224, 224, 234, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 237, 224, 224, 224, 255, 224, 224, 224, 33, 255, 255, 255, 0, 255, 255, 255, 0, 229, 229, 229, 38, 224, 224, 224, 255, 224, 224, 224, 229, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 164, 224, 224, 224, 255, 224, 224, 224, 187, 225, 225, 225, 34, 227, 227, 227, 36, 224, 224, 224, 192, 224, 224, 224, 255, 224, 224, 224, 162, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 24, 225, 225, 225, 215, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 229, 224, 224, 224, 32, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 24, 224, 224, 224, 216, 224, 224, 224, 255, 224, 224, 224, 210, 224, 224, 224, 161, 224, 224, 224, 232, 224, 224, 224, 231, 225, 225, 225, 159, 230, 230, 230, 30, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 107, 224, 224, 224, 255, 224, 224, 224, 210, 230, 230, 230, 20, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 105, 230, 230, 230, 20, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 221, 224, 224, 224, 130, 255, 255, 255, 1, 255, 255, 255, 1, 225, 225, 225, 134, 224, 224, 224, 224, 225, 225, 225, 223, 224, 224, 224, 132, 255, 255, 255, 1, 255, 255, 255, 6, 224, 224, 224, 137, 224, 224, 224, 231, 224, 224, 224, 255, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 130, 225, 225, 225, 133, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 129, 224, 224, 224, 137, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 65, 224, 224, 224, 255, 224, 224, 224, 220, 225, 225, 225, 223, 224, 224, 224, 255, 226, 226, 226, 61, 224, 224, 224, 65, 224, 224, 224, 255, 224, 224, 224, 222, 224, 224, 224, 231, 224, 224, 224, 255, 227, 227, 227, 62, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 67, 224, 224, 224, 255, 224, 224, 224, 219, 224, 224, 224, 222, 224, 224, 224, 255, 227, 227, 227, 63, 225, 225, 225, 67, 224, 224, 224, 255, 224, 224, 224, 219, 224, 224, 224, 230, 224, 224, 224, 255, 227, 227, 227, 63, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 127, 224, 224, 224, 129, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 126, 225, 225, 225, 135, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 221, 225, 225, 225, 127, 255, 255, 255, 0, 255, 255, 255, 1, 224, 224, 224, 128, 224, 224, 224, 220, 224, 224, 224, 219, 225, 225, 225, 127, 255, 255, 255, 0, 255, 255, 255, 5, 225, 225, 225, 134, 224, 224, 224, 229, 224, 224, 224, 255, 255, 255, 255, 0),
|
||||
"format": "RGBA8",
|
||||
@@ -19,7 +19,7 @@ data = {
|
||||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="ImageTexture_gdtpn"]
|
||||
image = SubResource("Image_6qp7c")
|
||||
image = SubResource("Image_qsij4")
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_7v0rg"]
|
||||
|
||||
|
||||
@@ -36,13 +36,22 @@ func download(url: String) -> Download:
|
||||
func FilesMissing() -> bool:
|
||||
var executable_name: String = "yt-dlp.exe" if OS.get_name() == "Windows" else "yt-dlp"
|
||||
|
||||
if not FileAccess.file_exists("user://%s" % executable_name):
|
||||
return true
|
||||
if not FileAccess.file_exists("user://ffmpeg.exe"):
|
||||
return true
|
||||
if not FileAccess.file_exists("user://ffprobe.exe"):
|
||||
return true
|
||||
|
||||
if OS.get_name() == "Windows":
|
||||
if not FileAccess.file_exists("user://%s" % executable_name):
|
||||
return true
|
||||
if not FileAccess.file_exists("user://ffmpeg.exe"):
|
||||
return true
|
||||
if not FileAccess.file_exists("user://ffprobe.exe"):
|
||||
return true
|
||||
elif OS.get_name() == "Linux":
|
||||
var stuff = OS.execute("bash",PackedStringArray(["-c","ffprobe"]))
|
||||
print(stuff)
|
||||
if stuff != 1:
|
||||
return true
|
||||
var stuff2 = OS.execute("bash",PackedStringArray(["-c","ffmpeg"]))
|
||||
print(stuff2)
|
||||
if stuff2 != 1:
|
||||
return true
|
||||
return false
|
||||
|
||||
func setup() -> void:
|
||||
@@ -59,9 +68,8 @@ func setup() -> void:
|
||||
await (Engine.get_main_loop() as SceneTree).process_frame
|
||||
_thread.wait_to_finish()
|
||||
|
||||
if OS.get_name() == "Windows":
|
||||
await _setup_ffmpeg()
|
||||
else:
|
||||
await _setup_ffmpeg()
|
||||
if OS.get_name() == "Linux":
|
||||
OS.execute("chmod", PackedStringArray(["+x", OS.get_user_data_dir() + "/yt-dlp"]))
|
||||
|
||||
_is_setup = true
|
||||
@@ -70,12 +78,33 @@ func setup() -> void:
|
||||
|
||||
func _setup_ffmpeg() -> void:
|
||||
if not FileAccess.file_exists("user://ffmpeg.exe"):
|
||||
_downloader.download(ffmpeg_sources["ffmpeg"], "user://ffmpeg.exe")
|
||||
await _downloader.download_completed
|
||||
if OS.get_name() == "Windows":
|
||||
_downloader.download(ffmpeg_sources["ffmpeg"], "user://ffmpeg.exe")
|
||||
await _downloader.download_completed
|
||||
print(OS.get_distribution_name())
|
||||
elif OS.get_distribution_name() in ["Ubuntu","Linux Mint","Debian"]:
|
||||
var stuff = OS.execute("bash",PackedStringArray(["-c","ffmpeg"]))
|
||||
print(stuff)
|
||||
if stuff !=1:
|
||||
push_error("FFMPEG NOT INSTALLED")
|
||||
print(OS.get_distribution_name())
|
||||
else:
|
||||
print(OS.get_distribution_name())
|
||||
|
||||
if not FileAccess.file_exists("user://ffprobe.exe"):
|
||||
_downloader.download(ffmpeg_sources["ffprobe"], "user://ffprobe.exe")
|
||||
await _downloader.download_completed
|
||||
if OS.get_name() == "Windows":
|
||||
_downloader.download(ffmpeg_sources["ffprobe"], "user://ffprobe.exe")
|
||||
print(OS.get_distribution_name())
|
||||
await _downloader.download_completed
|
||||
elif OS.get_name() == "Linux":
|
||||
var stuff = OS.execute("bash",PackedStringArray(["-c","ffprobe"]))
|
||||
print(stuff)
|
||||
if stuff != 1:
|
||||
push_error("FFPROBE NOT INSTALLED")
|
||||
print(OS.get_distribution_name())
|
||||
else:
|
||||
print(OS.get_distribution_name())
|
||||
|
||||
|
||||
|
||||
func _update_yt_dlp(filename: String) -> void:
|
||||
@@ -109,7 +138,7 @@ class Download extends RefCounted:
|
||||
var _renameAudioToDiffName:bool = false
|
||||
var _video_format: Video = Video.WEBM
|
||||
var _audio_format: Audio = Audio.MP3
|
||||
|
||||
var _download_playlist:bool
|
||||
|
||||
func _init(url: String):
|
||||
_url = url
|
||||
@@ -183,9 +212,14 @@ class Download extends RefCounted:
|
||||
"destination": _destination
|
||||
})
|
||||
|
||||
options_and_arguments.append_array(["--yes-playlist","--embed-metadata","--embed-thumbnail",str("-o" + "%(title)s.%(ext)s")])
|
||||
options_and_arguments.append_array(["--embed-metadata","--embed-thumbnail",str("-o" + "%(title)s.%(ext)s")])
|
||||
options_and_arguments.append_array(["--no-continue", "-P", file_path, _url])
|
||||
|
||||
if _download_playlist:
|
||||
options_and_arguments.append("--yes-playlist")
|
||||
else:
|
||||
options_and_arguments.append("--no-playlist")
|
||||
|
||||
print(options_and_arguments)
|
||||
var output: Array = []
|
||||
OS.execute(executable, PackedStringArray(options_and_arguments), output)
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 B0TLANNER Games
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,139 @@
|
||||
# Godot GIF
|
||||
<br>
|
||||
|
||||
<p align="center">
|
||||
<img src="./docs-images/logo.gif" alt="Logo" width="128" height="128" />
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/BOTLANNER/godot-gif/actions/workflows/build_releases.yml"><img alt="GitHub Build" src="https://github.com/BOTLANNER/godot-gif/actions/workflows/build_releases.yml/badge.svg" height="20"/></a>
|
||||
<a href="https://github.com/BOTLANNER/godot-gif/blob/develop/LICENSE.txt"><img alt="MIT License" src="https://img.shields.io/github/license/BOTLANNER/godot-gif" height="20"/></a>
|
||||
</p>
|
||||
|
||||
|
||||
## Description
|
||||
GDExtension for Godot 4+ to load GIF files as [AnimatedTexture](https://docs.godotengine.org/en/stable/classes/class_animatedtexture.html) and/or [SpriteFrames](https://docs.godotengine.org/en/stable/classes/class_spriteframes.html).
|
||||
|
||||
NOTE: ~~**AnimatedTexture**~~ has been marked as deprecated according to development docs and could be removed in a future version of Godot.
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
### Editor
|
||||
|
||||
Gif files can be imported at edit time as one of the supported types via Import options.
|
||||
|
||||
<details open>
|
||||
<summary>Editor Imports Options</summary>
|
||||
|
||||

|
||||
</details>
|
||||
|
||||
See the [Editor Imports](./demo/editor_imports_example.tscn) example scene.
|
||||
<details open>
|
||||
<summary>Editor Imports Example</summary>
|
||||
|
||||

|
||||
</details>
|
||||
|
||||
<hr/>
|
||||
|
||||
### Runtime
|
||||
|
||||
Gif files can be loaded at runtime as one of the supported types via the `GifManager` singleton.
|
||||
|
||||
`GifManager` exposes the following methods for loading gifs either from file or from bytes directly:
|
||||

|
||||
|
||||
e.g. to load from file
|
||||
```py
|
||||
get_node("AnimFromRuntimeFile").texture = GifManager.animated_texture_from_file("res://examples/file/optic.gif")
|
||||
|
||||
get_node("AnimatedSprite2RuntimeFile").sprite_frames = GifManager.sprite_frames_from_file("res://examples/file/optic.gif")
|
||||
```
|
||||
|
||||
See the [Runtime Imports](./demo/main.tscn) example scene.
|
||||
<details open>
|
||||
<summary>Runtime Imports Example</summary>
|
||||
|
||||

|
||||
</details>
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
Download the `gdextension` artifact from the [latest successful build](https://github.com/BOTLANNER/godot-gif/actions/workflows/build_releases.yml). (It should be right at the bottom of the **Summary**)
|
||||

|
||||
|
||||
Extract the contents to your Godot project directory.
|
||||
|
||||
You should have an `addons` directory at the root with the following structure:
|
||||
```bash
|
||||
└───addons
|
||||
└───godotgif
|
||||
│ godotgif.gdextension
|
||||
│ LICENSE.txt
|
||||
│ README.md
|
||||
│
|
||||
└───bin
|
||||
│ godotgif.windows.template_debug.x86_32.dll
|
||||
│ godotgif.windows.template_debug.x86_64.dll
|
||||
│ godotgif.windows.template_release.x86_32.dll
|
||||
│ godotgif.windows.template_release.x86_64.dll
|
||||
│ libgodotgif.android.template_debug.arm64.so
|
||||
│ libgodotgif.android.template_release.arm64.so
|
||||
│ libgodotgif.linux.template_debug.x86_32.so
|
||||
│ libgodotgif.linux.template_debug.x86_64.so
|
||||
│ libgodotgif.linux.template_release.x86_32.so
|
||||
│ libgodotgif.linux.template_release.x86_64.so
|
||||
│
|
||||
├───godotgif.macos.template_debug.framework
|
||||
│ libgodotgif.macos.template_debug
|
||||
│
|
||||
└───godotgif.macos.template_release.framework
|
||||
libgodotgif.macos.template_release
|
||||
```
|
||||
|
||||
Open your project. Any exisitng gifs should auto-import. New gifs in the project directory will automatically import as `SpriteFrames`. To convert them into `AnimatedTexture`, update the [import settings](#editor).
|
||||
|
||||
The `GifManager` class should also now be available for access within GDScript.
|
||||
|
||||
## Contributing
|
||||
|
||||
### Setup
|
||||
|
||||
Ensure **SCons** is setup. Refer to [Introduction to the buildsystem](https://docs.godotengine.org/en/stable/contributing/development/compiling/introduction_to_the_buildsystem.html)
|
||||
|
||||
* If using a different version of Godot, be sure to dump the bindings e.g.
|
||||
```sh
|
||||
godot --dump-extension-api extension_api.json
|
||||
```
|
||||
* Compile with
|
||||
```sh
|
||||
scons platform=<platform> custom_api_file=extension_api.json
|
||||
```
|
||||
|
||||
### Debugging
|
||||
|
||||
This repository is configured for use with [VSCode](https://code.visualstudio.com/)
|
||||
|
||||
[Launch configurations](./.vscode/launch.json) have been setup for both debugging in editor and in runtime provided certain **VSCode** extensions are present and environment variables are defined.
|
||||
|
||||
The following environment variables are required:
|
||||
|
||||
1. `GODOT_PATH` - The directory in which Godot is installed
|
||||
1. `GODOT_EXECUTABLE` - The executable name of the Godot installation
|
||||
|
||||
### More Details
|
||||
Refer to [GDExtension C++ example](https://docs.godotengine.org/en/stable/tutorials/scripting/gdextension/gdextension_cpp_example.html)
|
||||
|
||||
|
||||
## License
|
||||
|
||||
Unless otherwise specified, the extension is released under the
|
||||
[MIT license](LICENSE.txt).
|
||||
|
||||
See the full list of third-party libraries with their licenses used by this
|
||||
extension at [src/thirdparty/README.md](src/thirdparty/README.md).
|
||||
|
||||
This implementation heavily borrowed inspiration from the [gif module](https://github.com/goostengine/goost/tree/gd3/modules/gif) for [Goost](https://github.com/goostengine/goost) that is currently only based on Godot 3
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,23 @@
|
||||
[configuration]
|
||||
|
||||
entry_symbol = "godot_gif_library_init"
|
||||
compatibility_minimum = "4.1"
|
||||
|
||||
[libraries]
|
||||
|
||||
macos.debug = "bin/godotgif.macos.template_debug.framework/libgodotgif.macos.template_debug"
|
||||
macos.release = "bin/godotgif.macos.template_release.framework/libgodotgif.macos.template_release"
|
||||
windows.debug.x86_32 = "bin/godotgif.windows.template_debug.x86_32.dll"
|
||||
windows.release.x86_32 = "bin/godotgif.windows.template_release.x86_32.dll"
|
||||
windows.debug.x86_64 = "bin/godotgif.windows.template_debug.x86_64.dll"
|
||||
windows.release.x86_64 = "bin/godotgif.windows.template_release.x86_64.dll"
|
||||
linux.debug.x86_64 = "bin/libgodotgif.linux.template_debug.x86_64.so"
|
||||
linux.release.x86_64 = "bin/libgodotgif.linux.template_release.x86_64.so"
|
||||
linux.debug.arm64 = "bin/libgodotgif.linux.template_debug.arm64.so"
|
||||
linux.release.arm64 = "bin/libgodotgif.linux.template_release.arm64.so"
|
||||
linux.debug.rv64 = "bin/libgodotgif.linux.template_debug.rv64.so"
|
||||
linux.release.rv64 = "bin/libgodotgif.linux.template_release.rv64.so"
|
||||
android.debug.x86_64 = "bin/libgodotgif.android.template_debug.x86_64.so"
|
||||
android.release.x86_64 = "bin/libgodotgif.android.template_release.x86_64.so"
|
||||
android.debug.arm64 = "bin/libgodotgif.android.template_debug.arm64.so"
|
||||
android.release.arm64 = "bin/libgodotgif.android.template_release.arm64.so"
|
||||
@@ -4,7 +4,7 @@ extends Control
|
||||
@onready var file_dialog: FileDialog = $FileDialog
|
||||
@onready var current_directory: Label = $ScrollContainer/VBoxContainer/CurrentDirectory
|
||||
@onready var playlist_name: LineEdit = $ScrollContainer/VBoxContainer/PlaylistName
|
||||
@onready var playlists_holder: VBoxContainer = $"../PlaylistsPanel/PlaylistsContainer/VBoxContainer/PlaylistsHolder"
|
||||
@onready var playlists_holder: VBoxContainer = $"../PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer/PlaylistsHolder"
|
||||
|
||||
const PLAYLIST_DISPLAY = preload("res://PlaylistDisplay.tscn")
|
||||
|
||||
|
||||
+1
-2
@@ -5,8 +5,7 @@ var HzDec = {0:"32 Hz",
|
||||
2:"320 Hz",
|
||||
3:"1000 Hz",
|
||||
4:"3200 Hz",
|
||||
5:"3200 Hz",
|
||||
6:"10000 Hz"}
|
||||
5:"10000 Hz"}
|
||||
|
||||
var gainValueLabels:Array = []
|
||||
var gainValueSlider:Array = []
|
||||
|
||||
+13
-223
@@ -9,7 +9,7 @@ custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="../MusicPlayerExports/MusicPlayer.exe"
|
||||
export_path="../Exports/Windows/Simplaudio.exe"
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
@@ -68,8 +68,8 @@ dotnet/embed_build_outputs=false
|
||||
|
||||
[preset.1]
|
||||
|
||||
name="macOS"
|
||||
platform="macOS"
|
||||
name="Linux"
|
||||
platform="Linux"
|
||||
runnable=true
|
||||
advanced_options=false
|
||||
dedicated_server=false
|
||||
@@ -77,7 +77,7 @@ custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="../MusicPlayerMACExports/MusicPlayer.zip"
|
||||
export_path="../Exports/Linux/Simplaudio.x86_64"
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
@@ -86,235 +86,25 @@ script_export_mode=2
|
||||
|
||||
[preset.1.options]
|
||||
|
||||
export/distribution_type=1
|
||||
binary_format/architecture="universal"
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_wrapper=2
|
||||
application/icon=""
|
||||
application/icon_interpolation=4
|
||||
application/bundle_identifier="com.bucket.simplaudio"
|
||||
application/signature=""
|
||||
application/app_category="Music"
|
||||
application/short_version=""
|
||||
application/version=""
|
||||
application/copyright=""
|
||||
application/copyright_localized={}
|
||||
application/min_macos_version="10.12"
|
||||
application/export_angle=0
|
||||
display/high_res=true
|
||||
application/additional_plist_content=""
|
||||
xcode/platform_build="14C18"
|
||||
xcode/sdk_version="13.1"
|
||||
xcode/sdk_build="22C55"
|
||||
xcode/sdk_name="macosx13.1"
|
||||
xcode/xcode_version="1420"
|
||||
xcode/xcode_build="14C18"
|
||||
codesign/codesign=1
|
||||
codesign/installer_identity=""
|
||||
codesign/apple_team_id=""
|
||||
codesign/identity=""
|
||||
codesign/entitlements/custom_file=""
|
||||
codesign/entitlements/allow_jit_code_execution=false
|
||||
codesign/entitlements/allow_unsigned_executable_memory=false
|
||||
codesign/entitlements/allow_dyld_environment_variables=false
|
||||
codesign/entitlements/disable_library_validation=false
|
||||
codesign/entitlements/audio_input=false
|
||||
codesign/entitlements/camera=false
|
||||
codesign/entitlements/location=false
|
||||
codesign/entitlements/address_book=false
|
||||
codesign/entitlements/calendars=false
|
||||
codesign/entitlements/photos_library=false
|
||||
codesign/entitlements/apple_events=false
|
||||
codesign/entitlements/debugging=false
|
||||
codesign/entitlements/app_sandbox/enabled=false
|
||||
codesign/entitlements/app_sandbox/network_server=false
|
||||
codesign/entitlements/app_sandbox/network_client=false
|
||||
codesign/entitlements/app_sandbox/device_usb=false
|
||||
codesign/entitlements/app_sandbox/device_bluetooth=false
|
||||
codesign/entitlements/app_sandbox/files_downloads=0
|
||||
codesign/entitlements/app_sandbox/files_pictures=0
|
||||
codesign/entitlements/app_sandbox/files_music=0
|
||||
codesign/entitlements/app_sandbox/files_movies=0
|
||||
codesign/entitlements/app_sandbox/files_user_selected=0
|
||||
codesign/entitlements/app_sandbox/helper_executables=[]
|
||||
codesign/custom_options=PackedStringArray()
|
||||
notarization/notarization=0
|
||||
privacy/microphone_usage_description=""
|
||||
privacy/microphone_usage_description_localized={}
|
||||
privacy/camera_usage_description=""
|
||||
privacy/camera_usage_description_localized={}
|
||||
privacy/location_usage_description=""
|
||||
privacy/location_usage_description_localized={}
|
||||
privacy/address_book_usage_description=""
|
||||
privacy/address_book_usage_description_localized={}
|
||||
privacy/calendar_usage_description=""
|
||||
privacy/calendar_usage_description_localized={}
|
||||
privacy/photos_library_usage_description=""
|
||||
privacy/photos_library_usage_description_localized={}
|
||||
privacy/desktop_folder_usage_description=""
|
||||
privacy/desktop_folder_usage_description_localized={}
|
||||
privacy/documents_folder_usage_description=""
|
||||
privacy/documents_folder_usage_description_localized={}
|
||||
privacy/downloads_folder_usage_description=""
|
||||
privacy/downloads_folder_usage_description_localized={}
|
||||
privacy/network_volumes_usage_description=""
|
||||
privacy/network_volumes_usage_description_localized={}
|
||||
privacy/removable_volumes_usage_description=""
|
||||
privacy/removable_volumes_usage_description_localized={}
|
||||
privacy/tracking_enabled=false
|
||||
privacy/tracking_domains=PackedStringArray()
|
||||
privacy/collected_data/name/collected=false
|
||||
privacy/collected_data/name/linked_to_user=false
|
||||
privacy/collected_data/name/used_for_tracking=false
|
||||
privacy/collected_data/name/collection_purposes=0
|
||||
privacy/collected_data/email_address/collected=false
|
||||
privacy/collected_data/email_address/linked_to_user=false
|
||||
privacy/collected_data/email_address/used_for_tracking=false
|
||||
privacy/collected_data/email_address/collection_purposes=0
|
||||
privacy/collected_data/phone_number/collected=false
|
||||
privacy/collected_data/phone_number/linked_to_user=false
|
||||
privacy/collected_data/phone_number/used_for_tracking=false
|
||||
privacy/collected_data/phone_number/collection_purposes=0
|
||||
privacy/collected_data/physical_address/collected=false
|
||||
privacy/collected_data/physical_address/linked_to_user=false
|
||||
privacy/collected_data/physical_address/used_for_tracking=false
|
||||
privacy/collected_data/physical_address/collection_purposes=0
|
||||
privacy/collected_data/other_contact_info/collected=false
|
||||
privacy/collected_data/other_contact_info/linked_to_user=false
|
||||
privacy/collected_data/other_contact_info/used_for_tracking=false
|
||||
privacy/collected_data/other_contact_info/collection_purposes=0
|
||||
privacy/collected_data/health/collected=false
|
||||
privacy/collected_data/health/linked_to_user=false
|
||||
privacy/collected_data/health/used_for_tracking=false
|
||||
privacy/collected_data/health/collection_purposes=0
|
||||
privacy/collected_data/fitness/collected=false
|
||||
privacy/collected_data/fitness/linked_to_user=false
|
||||
privacy/collected_data/fitness/used_for_tracking=false
|
||||
privacy/collected_data/fitness/collection_purposes=0
|
||||
privacy/collected_data/payment_info/collected=false
|
||||
privacy/collected_data/payment_info/linked_to_user=false
|
||||
privacy/collected_data/payment_info/used_for_tracking=false
|
||||
privacy/collected_data/payment_info/collection_purposes=0
|
||||
privacy/collected_data/credit_info/collected=false
|
||||
privacy/collected_data/credit_info/linked_to_user=false
|
||||
privacy/collected_data/credit_info/used_for_tracking=false
|
||||
privacy/collected_data/credit_info/collection_purposes=0
|
||||
privacy/collected_data/other_financial_info/collected=false
|
||||
privacy/collected_data/other_financial_info/linked_to_user=false
|
||||
privacy/collected_data/other_financial_info/used_for_tracking=false
|
||||
privacy/collected_data/other_financial_info/collection_purposes=0
|
||||
privacy/collected_data/precise_location/collected=false
|
||||
privacy/collected_data/precise_location/linked_to_user=false
|
||||
privacy/collected_data/precise_location/used_for_tracking=false
|
||||
privacy/collected_data/precise_location/collection_purposes=0
|
||||
privacy/collected_data/coarse_location/collected=false
|
||||
privacy/collected_data/coarse_location/linked_to_user=false
|
||||
privacy/collected_data/coarse_location/used_for_tracking=false
|
||||
privacy/collected_data/coarse_location/collection_purposes=0
|
||||
privacy/collected_data/sensitive_info/collected=false
|
||||
privacy/collected_data/sensitive_info/linked_to_user=false
|
||||
privacy/collected_data/sensitive_info/used_for_tracking=false
|
||||
privacy/collected_data/sensitive_info/collection_purposes=0
|
||||
privacy/collected_data/contacts/collected=false
|
||||
privacy/collected_data/contacts/linked_to_user=false
|
||||
privacy/collected_data/contacts/used_for_tracking=false
|
||||
privacy/collected_data/contacts/collection_purposes=0
|
||||
privacy/collected_data/emails_or_text_messages/collected=false
|
||||
privacy/collected_data/emails_or_text_messages/linked_to_user=false
|
||||
privacy/collected_data/emails_or_text_messages/used_for_tracking=false
|
||||
privacy/collected_data/emails_or_text_messages/collection_purposes=0
|
||||
privacy/collected_data/photos_or_videos/collected=false
|
||||
privacy/collected_data/photos_or_videos/linked_to_user=false
|
||||
privacy/collected_data/photos_or_videos/used_for_tracking=false
|
||||
privacy/collected_data/photos_or_videos/collection_purposes=0
|
||||
privacy/collected_data/audio_data/collected=false
|
||||
privacy/collected_data/audio_data/linked_to_user=false
|
||||
privacy/collected_data/audio_data/used_for_tracking=false
|
||||
privacy/collected_data/audio_data/collection_purposes=0
|
||||
privacy/collected_data/gameplay_content/collected=false
|
||||
privacy/collected_data/gameplay_content/linked_to_user=false
|
||||
privacy/collected_data/gameplay_content/used_for_tracking=false
|
||||
privacy/collected_data/gameplay_content/collection_purposes=0
|
||||
privacy/collected_data/customer_support/collected=false
|
||||
privacy/collected_data/customer_support/linked_to_user=false
|
||||
privacy/collected_data/customer_support/used_for_tracking=false
|
||||
privacy/collected_data/customer_support/collection_purposes=0
|
||||
privacy/collected_data/other_user_content/collected=false
|
||||
privacy/collected_data/other_user_content/linked_to_user=false
|
||||
privacy/collected_data/other_user_content/used_for_tracking=false
|
||||
privacy/collected_data/other_user_content/collection_purposes=0
|
||||
privacy/collected_data/browsing_history/collected=false
|
||||
privacy/collected_data/browsing_history/linked_to_user=false
|
||||
privacy/collected_data/browsing_history/used_for_tracking=false
|
||||
privacy/collected_data/browsing_history/collection_purposes=0
|
||||
privacy/collected_data/search_hhistory/collected=false
|
||||
privacy/collected_data/search_hhistory/linked_to_user=false
|
||||
privacy/collected_data/search_hhistory/used_for_tracking=false
|
||||
privacy/collected_data/search_hhistory/collection_purposes=0
|
||||
privacy/collected_data/user_id/collected=false
|
||||
privacy/collected_data/user_id/linked_to_user=false
|
||||
privacy/collected_data/user_id/used_for_tracking=false
|
||||
privacy/collected_data/user_id/collection_purposes=0
|
||||
privacy/collected_data/device_id/collected=false
|
||||
privacy/collected_data/device_id/linked_to_user=false
|
||||
privacy/collected_data/device_id/used_for_tracking=false
|
||||
privacy/collected_data/device_id/collection_purposes=0
|
||||
privacy/collected_data/purchase_history/collected=false
|
||||
privacy/collected_data/purchase_history/linked_to_user=false
|
||||
privacy/collected_data/purchase_history/used_for_tracking=false
|
||||
privacy/collected_data/purchase_history/collection_purposes=0
|
||||
privacy/collected_data/product_interaction/collected=false
|
||||
privacy/collected_data/product_interaction/linked_to_user=false
|
||||
privacy/collected_data/product_interaction/used_for_tracking=false
|
||||
privacy/collected_data/product_interaction/collection_purposes=0
|
||||
privacy/collected_data/advertising_data/collected=false
|
||||
privacy/collected_data/advertising_data/linked_to_user=false
|
||||
privacy/collected_data/advertising_data/used_for_tracking=false
|
||||
privacy/collected_data/advertising_data/collection_purposes=0
|
||||
privacy/collected_data/other_usage_data/collected=false
|
||||
privacy/collected_data/other_usage_data/linked_to_user=false
|
||||
privacy/collected_data/other_usage_data/used_for_tracking=false
|
||||
privacy/collected_data/other_usage_data/collection_purposes=0
|
||||
privacy/collected_data/crash_data/collected=false
|
||||
privacy/collected_data/crash_data/linked_to_user=false
|
||||
privacy/collected_data/crash_data/used_for_tracking=false
|
||||
privacy/collected_data/crash_data/collection_purposes=0
|
||||
privacy/collected_data/performance_data/collected=false
|
||||
privacy/collected_data/performance_data/linked_to_user=false
|
||||
privacy/collected_data/performance_data/used_for_tracking=false
|
||||
privacy/collected_data/performance_data/collection_purposes=0
|
||||
privacy/collected_data/other_diagnostic_data/collected=false
|
||||
privacy/collected_data/other_diagnostic_data/linked_to_user=false
|
||||
privacy/collected_data/other_diagnostic_data/used_for_tracking=false
|
||||
privacy/collected_data/other_diagnostic_data/collection_purposes=0
|
||||
privacy/collected_data/environment_scanning/collected=false
|
||||
privacy/collected_data/environment_scanning/linked_to_user=false
|
||||
privacy/collected_data/environment_scanning/used_for_tracking=false
|
||||
privacy/collected_data/environment_scanning/collection_purposes=0
|
||||
privacy/collected_data/hands/collected=false
|
||||
privacy/collected_data/hands/linked_to_user=false
|
||||
privacy/collected_data/hands/used_for_tracking=false
|
||||
privacy/collected_data/hands/collection_purposes=0
|
||||
privacy/collected_data/head/collected=false
|
||||
privacy/collected_data/head/linked_to_user=false
|
||||
privacy/collected_data/head/used_for_tracking=false
|
||||
privacy/collected_data/head/collection_purposes=0
|
||||
privacy/collected_data/other_data_types/collected=false
|
||||
privacy/collected_data/other_data_types/linked_to_user=false
|
||||
privacy/collected_data/other_data_types/used_for_tracking=false
|
||||
privacy/collected_data/other_data_types/collection_purposes=0
|
||||
debug/export_console_wrapper=1
|
||||
binary_format/embed_pck=false
|
||||
texture_format/s3tc_bptc=true
|
||||
texture_format/etc2_astc=false
|
||||
binary_format/architecture="x86_64"
|
||||
ssh_remote_deploy/enabled=false
|
||||
ssh_remote_deploy/host="user@host_ip"
|
||||
ssh_remote_deploy/port="22"
|
||||
ssh_remote_deploy/extra_args_ssh=""
|
||||
ssh_remote_deploy/extra_args_scp=""
|
||||
ssh_remote_deploy/run_script="#!/usr/bin/env bash
|
||||
export DISPLAY=:0
|
||||
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
|
||||
open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}"
|
||||
\"{temp_dir}/{exe_name}\" {cmd_args}"
|
||||
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
|
||||
kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\")
|
||||
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
|
||||
rm -rf \"{temp_dir}\""
|
||||
dotnet/include_scripts_content=false
|
||||
dotnet/include_debug_symbols=false
|
||||
dotnet/include_debug_symbols=true
|
||||
dotnet/embed_build_outputs=false
|
||||
|
||||
@@ -18,20 +18,21 @@ extends Control
|
||||
@onready var yt_link: LineEdit = $"YoutubeMenuHolder/Youtube menu/YTLink"
|
||||
@onready var yt_download: Button = $"YoutubeMenuHolder/Youtube menu/YTDownload"
|
||||
@onready var loading_img: Sprite2D = $"YoutubeMenuHolder/Youtube menu/LoadingIMG"
|
||||
@onready var songs_menu: MenuButton = $SongsMenu
|
||||
@onready var songs_menu: Button = $SongsMenu
|
||||
@onready var version: Label = $Version
|
||||
@onready var paused_indicator: TextureRect = $PausedIndicator
|
||||
@onready var settings_popup: Control = $SettingsPopup
|
||||
@onready var settings_menu_child: Settings = $SettingsPopup/SettingsMenuChild
|
||||
@onready var settings_menu_child: Settings = $SettingsHolder/SettingsPopup/SettingsMenuChild
|
||||
@onready var artist_name: Label = $ArtistName
|
||||
@onready var user_bg: TextureRect = $UserBG
|
||||
@onready var playlists_panel: Control = $PlaylistsPanel
|
||||
@onready var playlists_holder: VBoxContainer = $PlaylistsPanel/PlaylistsContainer/VBoxContainer/PlaylistsHolder
|
||||
@onready var play_all: Button = $PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer/PlayAll
|
||||
@onready var playlists_holder: VBoxContainer = $PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer/PlaylistsHolder
|
||||
@onready var play_all: Button = $PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer/PlayAll
|
||||
@onready var album_name: Label = $Album
|
||||
@onready var playlist_or_song: ConfirmationDialog = $PlaylistOrSong
|
||||
@onready var search_results: SearchResults = $SearchResults
|
||||
@onready var delete_confirm: ConfirmationDialog = $deleteConfirm
|
||||
@onready var search_bar: LineEdit = $SearchBar
|
||||
|
||||
|
||||
var DiscordUsername:String
|
||||
|
||||
const PLAYLIST_DISPLAY = preload("res://PlaylistDisplay.tscn")
|
||||
const PAUSE = preload("res://Pause.png")
|
||||
@@ -65,9 +66,12 @@ var PlayAllLists:bool
|
||||
@export var LoopPressed:Texture2D
|
||||
@export var LoopNotPressed:Texture2D
|
||||
|
||||
signal ContinueDelete
|
||||
var deleteSong:bool
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
get_tree().root.min_size = Vector2(850,459)
|
||||
get_tree().root.min_size = Vector2(850,492)
|
||||
current_progress.drag_ended.connect(SongDragStopped)
|
||||
current_progress.drag_started.connect(SongDragStarted)
|
||||
loop.pressed.connect(LoopSong)
|
||||
@@ -77,7 +81,8 @@ func _ready() -> void:
|
||||
volume_slider.value_changed.connect(SetVolume)
|
||||
skip.pressed.connect(Skip)
|
||||
go_back.pressed.connect(GoBack)
|
||||
songs_menu.get_popup().index_pressed.connect(SetSong)
|
||||
search_results.index_pressed.connect(SetSong)
|
||||
search_results.song_deleted.connect(deletesong)
|
||||
var Strin:String
|
||||
for Arg in OS.get_cmdline_args():
|
||||
if Arg.to_lower().ends_with(".mp3") or Arg.to_lower().ends_with(".wav"):
|
||||
@@ -104,6 +109,9 @@ func _ready() -> void:
|
||||
child.PlaylistSongs = Playlists[Playlist]
|
||||
playlists_holder.add_child(child)
|
||||
if data != null:
|
||||
if data.has("DiscordUsername"):
|
||||
DiscordUsername = data["DiscordUsername"]
|
||||
print("stiff ",data)
|
||||
if data.has("Volume"):
|
||||
print(data["Volume"])
|
||||
SetVolume(data["Volume"])
|
||||
@@ -166,9 +174,19 @@ func _ready() -> void:
|
||||
DirectorySelected(Strin)
|
||||
PlaySongs()
|
||||
#PlaySongs()
|
||||
DiscordRPC.app_id = 1276916292170809426
|
||||
|
||||
setUpDiscord()
|
||||
for child in get_children(true):
|
||||
if child is Control:
|
||||
child.focus_mode = child is LineEdit
|
||||
|
||||
func setUpDiscord():
|
||||
DiscordRPC.app_id = 1276916292170809426
|
||||
DiscordRPC.refresh()
|
||||
print("stiff chicks ",DiscordRPC.get_current_user())
|
||||
DiscordUsername = DiscordRPC.get_current_user().get("username")
|
||||
DiscordRPC.refresh()
|
||||
DiscordRPC.large_image = "logo"
|
||||
# this is boolean if everything worked
|
||||
print("Discord working: " + str(DiscordRPC.get_is_discord_working()))
|
||||
# Set the first custom text row of the activity here
|
||||
@@ -178,7 +196,6 @@ func _ready() -> void:
|
||||
# Set the second custom text row of the activity here
|
||||
DiscordRPC.state = ""
|
||||
# Image key for small image from "Art Assets" from the Discord Developer website
|
||||
DiscordRPC.large_image = "logo"
|
||||
# Tooltip text for the large image
|
||||
SplashStrings = ["the party just started!"]
|
||||
var LText = SplashStrings.pick_random()
|
||||
@@ -192,12 +209,43 @@ func _ready() -> void:
|
||||
# Always refresh after changing the values!
|
||||
DiscordRPC.refresh()
|
||||
|
||||
func deletesong(idx:int):
|
||||
var currentDir:String= CurrentDir
|
||||
currentDir += "/" + textSongs[idx]
|
||||
delete_confirm.show()
|
||||
delete_confirm.dialog_text = "are you sure you want to delete \n" + textSongs[idx] +"?"
|
||||
delete_confirm.confirmed.connect(deleteConfirmed)
|
||||
delete_confirm.canceled.connect(deleteCancelled)
|
||||
await ContinueDelete
|
||||
delete_confirm.canceled.disconnect(deleteCancelled)
|
||||
delete_confirm.confirmed.disconnect(deleteConfirmed)
|
||||
if deleteSong:
|
||||
print("deleted + " + currentDir)
|
||||
deleteSong = false
|
||||
var dir = DirAccess.remove_absolute(currentDir)
|
||||
print("error code " +str(dir) + " (zero is good)")
|
||||
if dir == 0:
|
||||
textSongs.remove_at(idx)
|
||||
if search_bar.visible:
|
||||
search_bar.updateResults()
|
||||
else:
|
||||
songs_menu._pressed()
|
||||
Playlists[CurrentPlaylist].erase(textSongs[idx])
|
||||
|
||||
func deleteCancelled():
|
||||
deleteSong = false
|
||||
ContinueDelete.emit()
|
||||
|
||||
func deleteConfirmed():
|
||||
deleteSong = true
|
||||
ContinueDelete.emit()
|
||||
|
||||
func SongDragStopped(Changed:bool):
|
||||
if Changed:
|
||||
music_player.play(current_progress.value * CurrentSongLenth / current_progress.max_value)
|
||||
if Paused:
|
||||
pausePlay()
|
||||
|
||||
UpdateProgressSlider = true
|
||||
DiscordRPC.start_timestamp = int(Time.get_unix_time_from_system() - (current_progress.value * CurrentSongLenth / current_progress.max_value))
|
||||
DiscordRPC.refresh()
|
||||
@@ -272,17 +320,15 @@ func PlaySongs():
|
||||
|
||||
if music_player.playing:
|
||||
Paused = true
|
||||
DiscordRPC.state = "Paused"
|
||||
music_player.stream_paused = true
|
||||
play_list.icon = PLAY
|
||||
DiscordRPC.state = "Paused"
|
||||
print(DiscordRPC.get_current_user())
|
||||
else:
|
||||
DiscordRPC.start_timestamp = int(Time.get_unix_time_from_system() - (current_progress.value * CurrentSongLenth / current_progress.max_value))
|
||||
print(DiscordRPC.get_current_user())
|
||||
if DiscordRPC.get_current_user().get("username") == "_bucketofchicken":
|
||||
DiscordRPC.state = "i made the music player btw"
|
||||
else:
|
||||
DiscordRPC.state = "Listening To Music"
|
||||
|
||||
DiscordRPC.state = "Listening To Music"
|
||||
Paused = false
|
||||
music_player.stream_paused = false
|
||||
play_list.icon = PAUSE
|
||||
@@ -359,11 +405,11 @@ func GetSongs(dir:String):
|
||||
wav_disclaimer.show()
|
||||
SeenWAVDisclaimer = true
|
||||
#print(songs)
|
||||
songs_menu.get_popup().clear(true)
|
||||
search_results.clear()
|
||||
textSongs = songs
|
||||
for song in textSongs:
|
||||
var nam = song.replace(".mp3", "")
|
||||
songs_menu.get_popup().add_item(nam)
|
||||
var nam = song
|
||||
search_results.add_item(nam)
|
||||
|
||||
func Randomize():
|
||||
if textSongs.size() != 0:
|
||||
@@ -382,10 +428,10 @@ func Randomize():
|
||||
|
||||
|
||||
Randomized = true
|
||||
songs_menu.get_popup().clear(true)
|
||||
search_results.clear()
|
||||
for song in textSongs:
|
||||
var nam = song.replace(".mp3", "")
|
||||
songs_menu.get_popup().add_item(nam)
|
||||
var nam = song
|
||||
search_results.add_item(nam)
|
||||
#print(textSongs)
|
||||
|
||||
func PlaylistSelected(Playlist:String,PlaylistLocation:String):
|
||||
@@ -412,27 +458,30 @@ func _process(_delta: float) -> void:
|
||||
BackroundSetup = true
|
||||
if currentSaveTime < 0:
|
||||
currentSaveTime = SaveInterval
|
||||
|
||||
DiscordUsername = DiscordRPC.get_current_user().get("username")
|
||||
print(DiscordRPC.get_current_user())
|
||||
SaveEverything()
|
||||
print("yoo")
|
||||
@warning_ignore("integer_division")
|
||||
UpdateSplashes()
|
||||
print(DiscordRPC.get_current_user()["username"])
|
||||
if DiscordRPC.get_is_discord_working():
|
||||
print(DiscordRPC.get_current_user()["username"])
|
||||
print(TimeSpentListening)
|
||||
var LText = SplashStrings.pick_random()
|
||||
DiscordRPC.large_image_text = LText
|
||||
DiscordRPC.refresh()
|
||||
if DiscordRPC.get_is_discord_working():
|
||||
DiscordRPC.refresh()
|
||||
# "59:59 remaining" timestamp for the activity
|
||||
if music_player.playing:
|
||||
TimeSpentListening += _delta
|
||||
if DiscordRPC.get_current_user().get("username") == "_bucketofchicken":
|
||||
DiscordRPC.state = "i made the music player btw"
|
||||
else:
|
||||
DiscordRPC.state = "Listening To Music"
|
||||
CurrentPausedIndicatorShaderIntensity = lerp(CurrentPausedIndicatorShaderIntensity,0.0,0.1)
|
||||
DiscordRPC.state = "Listening To Music"
|
||||
else:
|
||||
DiscordRPC.start_timestamp = int(0)
|
||||
DiscordRPC.state = "Paused"
|
||||
DiscordRPC.refresh()
|
||||
if DiscordRPC.get_is_discord_working():
|
||||
DiscordRPC.refresh()
|
||||
CurrentPausedIndicatorShaderIntensity = lerp(CurrentPausedIndicatorShaderIntensity,1.0,0.1)
|
||||
if DiscordRichPresenceEnabled:
|
||||
DiscordRPC.run_callbacks()
|
||||
@@ -472,29 +521,30 @@ func _process(_delta: float) -> void:
|
||||
|
||||
|
||||
func UpdateSplashes():
|
||||
SplashStrings = ["Total listening time: %s!" % str(str(int(TimeSpentListening/60)/60 )
|
||||
+ "h : " + str((int(TimeSpentListening) / 60) % 60) + "m : " +
|
||||
str(int(TimeSpentListening) % 60) + "s"),
|
||||
"Version: %s" % version.text,"🤷♂️","This Changes every ~11 seconds",
|
||||
"hello everybody my name is %s" % DiscordRPC.get_current_user()["username"],
|
||||
"wash your dishes, i know you got some","Running on %s" % OS.get_distribution_name(),
|
||||
"%s is cooking" % DiscordRPC.get_current_user()["username"], "debugging" if OS.has_feature("editor") else "Release build",
|
||||
"this user chose to show you all this info","Playing a Banger",
|
||||
":steamhappy:","This is a sign that crocodiles live in water",
|
||||
"Space? SPACE?! SPAAAAAAAAAAAAACE!!!",
|
||||
"i love gd colonge",
|
||||
"listening with reverb" if settings_menu_child.reverb_check.button_pressed else
|
||||
"not listening with reverb","the cake is edible",
|
||||
"what a great song!","this message is useless",
|
||||
"stop reading these","why are you reading these",
|
||||
"hello from mars", "hello to mars","there is a fly in my room",
|
||||
"yippee!","What, are they allergic to bathtubs or something",
|
||||
"Did you know, a 737 can land with up to 33knots of wind!",
|
||||
"Welcome to todays JahresSchau",
|
||||
"ram is very useful","your cpu is tasty","main course: Nvidia GPU",
|
||||
"SCHOTTLAND FUER IMMER","i eat airborne vehicles","linus trovalds",
|
||||
"™","\(〇_o)/","Nuh Uh!","Yuh Huh","Breaching.",
|
||||
"I get a narcissistic injury when the wall ignores me","totally not using %s" % version.text]
|
||||
if DiscordRPC.get_is_discord_working():
|
||||
SplashStrings = ["Total listening time: %s!" % str(str(int(TimeSpentListening/60)/60 )
|
||||
+ "h : " + str((int(TimeSpentListening) / 60) % 60) + "m : " +
|
||||
str(int(TimeSpentListening) % 60) + "s"),
|
||||
"Version: %s" % version.text,"🤷♂️","This Changes every ~11 seconds",
|
||||
"hello everybody my name is %s" % DiscordRPC.get_current_user()["username"],
|
||||
"wash your dishes, i know you got some","Running on %s" % OS.get_distribution_name(),
|
||||
"%s is cooking" % DiscordRPC.get_current_user()["username"], "debugging" if OS.has_feature("editor") else "Release build",
|
||||
"this user chose to show you all this info","Playing a Banger",
|
||||
":steamhappy:","This is a sign that crocodiles live in water",
|
||||
"Space? SPACE?! SPAAAAAAAAAAAAACE!!!",
|
||||
"i love gd colonge",
|
||||
"listening with reverb" if settings_menu_child.reverb_check.button_pressed else
|
||||
"not listening with reverb","the cake is edible",
|
||||
"what a great song!","this message is useless",
|
||||
"stop reading these","why are you reading these",
|
||||
"hello from mars", "hello to mars","there is a fly in my room",
|
||||
"yippee!","What, are they allergic to bathtubs or something",
|
||||
"Did you know, a 737 can land with up to 33knots of wind!",
|
||||
"Welcome to todays JahresSchau",
|
||||
"ram is very useful","your cpu is tasty","main course: Nvidia GPU",
|
||||
"SCHOTTLAND FUER IMMER","i eat airborne vehicles","linus trovalds",
|
||||
"™","\(〇_o)/","Nuh Uh!","Yuh Huh","Breaching.",
|
||||
"I get a narcissistic injury when the wall ignores me","totally not using %s" % version.text]
|
||||
|
||||
|
||||
func SaveEverything():
|
||||
@@ -517,7 +567,8 @@ func SaveEverything():
|
||||
"CompressionRatio" : settings_menu_child.ratio_slider.value ,
|
||||
"CompressionGain" : settings_menu_child.gain_slider.value,
|
||||
"CurrentCustomBackroundImageDirectory" : CurrentCustomBackroundImageDirectory,
|
||||
"PlayAllLists" : PlayAllLists
|
||||
"PlayAllLists" : PlayAllLists,
|
||||
"DiscordUsername" : DiscordRPC.get_current_user().get("username")
|
||||
}
|
||||
saveUserdata(Data)
|
||||
savePlaylists()
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ extends Control
|
||||
@onready var options_dropdown: MenuButton = $HSplitContainer/HBoxContainer/OptionsDropdown
|
||||
@onready var confirmation: ConfirmationDialog = $ConfirmationDialog
|
||||
|
||||
@onready var Parent:MainScene = get_tree().root.get_child(2)
|
||||
@onready var Parent:MainScene = get_tree().root.get_child(3)
|
||||
|
||||
@export var Current:bool
|
||||
var PlaylistLocation:String = ""
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
extends Control
|
||||
@onready var create_playlist: Button = $PlaylistsContainer/VBoxContainer/HBoxContainer/CreatePlaylist
|
||||
@onready var create_playlists_menu: Control = $"../CreatePlaylistsMenu"
|
||||
@onready var create_playlists_menu: Control = $"../../CreatePlaylistsMenu"
|
||||
@onready var play_all: Button = $PlaylistsContainer/VBoxContainer/HBoxContainer/PlayAll
|
||||
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ config/windows_native_icon="res://addons/godot-yt-dlp/src/favicon2.ico"
|
||||
|
||||
YtDlp="*res://addons/godot-yt-dlp/src/yt_dlp.gd"
|
||||
MusicMetadataAutoload="*res://MusicMeta-f98d7384de3e2e658dcba3f5b06fb5b57ac2c73c/MusicMeta.gd"
|
||||
DiscordRPCLoader="*res://addons/discord-rpc-gd/nodes/discord_autoload.gd"
|
||||
|
||||
[display]
|
||||
|
||||
|
||||
+31
-35
@@ -1,5 +1,5 @@
|
||||
extends LineEdit
|
||||
@onready var search_results: PopupMenu = $"../SearchResults"
|
||||
@onready var search_results: SearchResults = $"../SearchResults"
|
||||
|
||||
var values:Dictionary = {}
|
||||
var ErrorMargin:float = 0.9
|
||||
@@ -8,8 +8,7 @@ var currentTime:float
|
||||
var TextChanged:bool
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
search_results.popup_window = false
|
||||
search_results.unfocusable = true
|
||||
pass
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
@@ -17,46 +16,43 @@ func _process(delta: float) -> void:
|
||||
currentTime -= delta
|
||||
if TextChanged:
|
||||
if currentTime < 0:
|
||||
release_focus()
|
||||
TextChanged = false
|
||||
search_results.clear(true)
|
||||
values.clear()
|
||||
currentTime = updatetime
|
||||
var _i:int = 0
|
||||
var _s:int = 0
|
||||
for song:String in owner.textSongs:
|
||||
var margin:float
|
||||
var fragments:Array
|
||||
#print(int((text.length() / 2.0) + 0.5))
|
||||
for num in range(int((text.length() / 2.0) + 0.5)):
|
||||
if text.to_lower().substr(int(num*2),2):
|
||||
fragments.append(text.to_lower().substr(int(num*2),2))
|
||||
elif text.to_lower().substr(int(num*2),1):
|
||||
fragments.append(text.to_lower().substr(int(num*2),1))
|
||||
var amountOfFrags:int
|
||||
for fragment:String in fragments:
|
||||
updateResults()
|
||||
|
||||
if song.to_lower().containsn(fragment):
|
||||
amountOfFrags +=1
|
||||
func updateResults():
|
||||
release_focus()
|
||||
TextChanged = false
|
||||
search_results.clear()
|
||||
values.clear()
|
||||
currentTime = updatetime
|
||||
var _i:int = 0
|
||||
var _s:int = 0
|
||||
for song:String in owner.textSongs:
|
||||
var margin:float
|
||||
var fragments:Array
|
||||
#print(int((text.length() / 2.0) + 0.5))
|
||||
for num in range(int((text.length() / 2.0) + 0.5)):
|
||||
if text.to_lower().substr(int(num*2),2):
|
||||
fragments.append(text.to_lower().substr(int(num*2),2))
|
||||
elif text.to_lower().substr(int(num*2),1):
|
||||
fragments.append(text.to_lower().substr(int(num*2),1))
|
||||
var amountOfFrags:int
|
||||
for fragment:String in fragments:
|
||||
|
||||
margin = float(amountOfFrags) / fragments.size()
|
||||
if margin > ErrorMargin:
|
||||
search_results.add_item(song.replace(".mp3","") )
|
||||
values[_i] = _s
|
||||
_i += 1
|
||||
_s += 1
|
||||
if song.to_lower().containsn(fragment):
|
||||
amountOfFrags +=1
|
||||
|
||||
margin = float(amountOfFrags) / fragments.size()
|
||||
if margin > ErrorMargin:
|
||||
search_results.add_item(song)
|
||||
values[_i] = _s
|
||||
_i += 1
|
||||
_s += 1
|
||||
|
||||
func _on_search_results_index_pressed(index: int) -> void:
|
||||
print("index " + str(index))
|
||||
owner.SetSong(values[index])
|
||||
|
||||
|
||||
func _input(event):
|
||||
if (event is InputEventMouseButton) and event.pressed:
|
||||
var evLocal = make_input_local(event)
|
||||
if !Rect2(Vector2(0,0),Vector2(search_results.size.y+ size.y,size.x)).has_point(evLocal.position):
|
||||
search_results.hide()
|
||||
|
||||
func _on_text_submitted(new_text: String) -> void:
|
||||
TextChanged = true
|
||||
if !search_results.visible:
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
extends Control
|
||||
|
||||
var SongName:String
|
||||
var CurrentlyPlaying:bool
|
||||
var idx:int
|
||||
@onready var songname: Button = $HBoxContainer/Songname
|
||||
|
||||
signal PlayPressed
|
||||
signal DeletePressed
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
songname.text = SongName
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
|
||||
|
||||
func _on_songname_pressed() -> void:
|
||||
PlayPressed.emit(idx)
|
||||
|
||||
|
||||
func _on_delete_pressed() -> void:
|
||||
DeletePressed.emit(idx)
|
||||
@@ -0,0 +1,46 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://ctqcbjrmxaqsk"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cm5ps3a716wr0" path="res://XSmall.png" id="1_6wgd5"]
|
||||
[ext_resource type="Script" path="res://search_item.gd" id="1_j4126"]
|
||||
|
||||
[node name="SearchItem" type="Control"]
|
||||
custom_minimum_size = Vector2(0, 30)
|
||||
layout_mode = 3
|
||||
anchors_preset = 14
|
||||
anchor_top = 0.5
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 4
|
||||
script = ExtResource("1_j4126")
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||
custom_minimum_size = Vector2(700, 0)
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -19.0
|
||||
offset_right = 50.0
|
||||
offset_bottom = 19.0
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="delete" type="Button" parent="HBoxContainer"]
|
||||
modulate = Color(0.553478, 0.101429, 4.81308e-08, 1)
|
||||
layout_mode = 2
|
||||
tooltip_text = "delete song from hard-drive"
|
||||
focus_mode = 0
|
||||
icon = ExtResource("1_6wgd5")
|
||||
flat = true
|
||||
|
||||
[node name="Songname" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
focus_mode = 0
|
||||
flat = true
|
||||
alignment = 0
|
||||
|
||||
[connection signal="pressed" from="HBoxContainer/delete" to="." method="_on_delete_pressed"]
|
||||
[connection signal="pressed" from="HBoxContainer/Songname" to="." method="_on_songname_pressed"]
|
||||
@@ -0,0 +1,48 @@
|
||||
class_name SearchResults
|
||||
extends Control
|
||||
|
||||
signal index_pressed
|
||||
signal song_deleted
|
||||
|
||||
const SEARCH_ITEM = preload("res://search_item.tscn")
|
||||
|
||||
@onready var item_container: VBoxContainer = $Control/ItemContainer
|
||||
|
||||
var SongsAmount:int
|
||||
|
||||
@onready var parent:MainScene = owner
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
|
||||
func add_item(text:String):
|
||||
var child = SEARCH_ITEM.instantiate()
|
||||
child.SongName = text.replace(".mp3", "")
|
||||
child.idx = parent.textSongs.find(text)
|
||||
SongsAmount+=1
|
||||
child.PlayPressed.connect(songSelected)
|
||||
child.DeletePressed.connect(deletePressed)
|
||||
item_container.add_child(child)
|
||||
|
||||
func clear():
|
||||
SongsAmount = 0
|
||||
for child in item_container.get_children():
|
||||
child.queue_free()
|
||||
|
||||
func songSelected(idx:int):
|
||||
index_pressed.emit(idx)
|
||||
|
||||
func _input(event):
|
||||
if (event is InputEventMouseButton) and event.pressed:
|
||||
var evLocal = make_input_local(event)
|
||||
if !Rect2(Vector2(0,0),Vector2(size.x,size.y)).has_point(evLocal.position):
|
||||
hide()
|
||||
|
||||
func deletePressed(idx:int):
|
||||
song_deleted.emit(idx)
|
||||
@@ -0,0 +1,42 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://bel6i6wdbexw4"]
|
||||
|
||||
[ext_resource type="Script" path="res://search_results.gd" id="1_mcn1o"]
|
||||
|
||||
[node name="SearchResults" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -311.5
|
||||
offset_right = 311.5
|
||||
offset_bottom = 300.0
|
||||
grow_horizontal = 2
|
||||
script = ExtResource("1_mcn1o")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
color = Color(0.14902, 0.14902, 0.14902, 1)
|
||||
|
||||
[node name="Control" type="ScrollContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
follow_focus = true
|
||||
horizontal_scroll_mode = 0
|
||||
|
||||
[node name="ItemContainer" type="VBoxContainer" parent="Control"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
extends Button
|
||||
|
||||
@onready var search_bar: LineEdit = $"../SearchBar"
|
||||
@onready var songs_menu: MenuButton = $"../SongsMenu"
|
||||
@onready var songs_menu: Button = $"../SongsMenu"
|
||||
|
||||
@export var PressedIcon:Texture2D
|
||||
@export var NotPressedIcon:Texture2D
|
||||
|
||||
+18
-5
@@ -1,10 +1,23 @@
|
||||
extends Button
|
||||
@onready var playlists_panel: Control = $"../PlaylistsPanel"
|
||||
@onready var playlists_panel: Control = $"../PlaylistPanelHolder/PlaylistsPanel"
|
||||
var currentlyExtending:bool
|
||||
var Target:float = 50
|
||||
|
||||
|
||||
|
||||
func _on_toggled(toggled_on: bool) -> void:
|
||||
if toggled_on:
|
||||
func _process(delta: float) -> void:
|
||||
if currentlyExtending:
|
||||
playlists_panel.position.x = clamp(lerp(playlists_panel.position.x,Target,0.25),0,100)
|
||||
else:
|
||||
playlists_panel.position.x -=1
|
||||
playlists_panel.position.x = clamp(lerp(Target,playlists_panel.position.x,1.25),0,100)
|
||||
playlists_panel.modulate.a = playlists_panel.position.x / Target
|
||||
if playlists_panel.position.x > 1:
|
||||
playlists_panel.show()
|
||||
else:
|
||||
playlists_panel.hide()
|
||||
|
||||
func _on_toggled(toggled_on: bool) -> void:
|
||||
if toggled_on:
|
||||
currentlyExtending = true
|
||||
playlists_panel.position.x = 1
|
||||
else:
|
||||
currentlyExtending = false
|
||||
|
||||
+5
-2
@@ -74,7 +74,7 @@ func _on_h_slider_drag_ended(value_changed: bool) -> void:
|
||||
Parent.SaveEverything()
|
||||
|
||||
func _on_exit_pressed() -> void:
|
||||
get_parent().hide()
|
||||
Parent.find_child("SettingsButton").button_pressed = false
|
||||
Parent.SaveEverything()
|
||||
|
||||
#region Reverb
|
||||
@@ -170,7 +170,10 @@ func _on_select_bg_dialog_file_selected(path: String) -> void:
|
||||
Parent.CurrentCustomBackroundImageDirectory = path
|
||||
backround_dir_label.text = path
|
||||
#print(path)
|
||||
Parent.user_bg.texture = ImageTexture.create_from_image(Image.load_from_file(CurrentBGImagePath))
|
||||
if !path.ends_with(".gif"):
|
||||
Parent.user_bg.texture = ImageTexture.create_from_image(Image.load_from_file(CurrentBGImagePath))
|
||||
else:
|
||||
Parent.user_bg.texture = GifManager.animated_texture_from_file(path)
|
||||
Parent.SaveEverything()
|
||||
|
||||
func _on_reset_bg_pressed() -> void:
|
||||
|
||||
+19
-13
@@ -1,19 +1,25 @@
|
||||
extends Button
|
||||
|
||||
@onready var settings_popup: Control = $"../SettingsPopup"
|
||||
@onready var settings_popup: Control = $"../SettingsHolder/SettingsPopup"
|
||||
var currentlyExtending:bool
|
||||
var Target:float = 50
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
|
||||
|
||||
func _on_pressed() -> void:
|
||||
if settings_popup.visible:
|
||||
settings_popup.hide()
|
||||
if currentlyExtending:
|
||||
settings_popup.position.y = clamp(lerp(settings_popup.position.y,Target,0.25),0,100)
|
||||
else:
|
||||
settings_popup.position.y -=1
|
||||
settings_popup.position.y = clamp(lerp(Target,settings_popup.position.y,1.25),0,100)
|
||||
settings_popup.modulate.a = settings_popup.position.y / Target
|
||||
if settings_popup.position.y > 1:
|
||||
settings_popup.show()
|
||||
else:
|
||||
settings_popup.hide()
|
||||
|
||||
func _on_toggled(toggled_on: bool) -> void:
|
||||
print("@@")
|
||||
if toggled_on:
|
||||
currentlyExtending = true
|
||||
settings_popup.position.y = 1
|
||||
else:
|
||||
currentlyExtending = false
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
extends Button
|
||||
|
||||
@onready var search_results: SearchResults = $"../SearchResults"
|
||||
@onready var parent:MainScene = owner
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
|
||||
func _pressed() -> void:
|
||||
if search_results.SongsAmount != parent.textSongs.size():
|
||||
search_results.clear()
|
||||
for song in parent.textSongs:
|
||||
var nam = song
|
||||
search_results.add_item(nam)
|
||||
search_results.show()
|
||||
+16
-11
@@ -1,5 +1,5 @@
|
||||
extends Control
|
||||
@onready var Parent:MainScene = get_tree().root.get_child(2)
|
||||
@onready var Parent:MainScene = get_tree().root.get_child(3)
|
||||
@onready var version: Label = $"../Version"
|
||||
|
||||
@onready var http_request := $HTTPRequest as HTTPRequest
|
||||
@@ -21,7 +21,7 @@ var updateLink:String
|
||||
const UPDATE_THROTTLE = 600
|
||||
|
||||
func _ready() -> void:
|
||||
|
||||
hide()
|
||||
if CheckForUpdates:
|
||||
check_for_updates()
|
||||
|
||||
@@ -46,10 +46,11 @@ func _on_http_request_completed(result: int, _response_code: int, _headers: Pack
|
||||
var json = JSON.new()
|
||||
var result2 = json.parse_string(str(body.get_string_from_utf8()))
|
||||
print("! AHHH " + str(result2))
|
||||
if result2["tag_name"] != version.text:
|
||||
update_available_text.text = result2["tag_name"] + " Is Out!"
|
||||
show()
|
||||
updateLink = result2["html_url"]
|
||||
if result2.has("tag_name"):
|
||||
if result2["tag_name"] != version.text:
|
||||
update_available_text.text = result2["tag_name"] + " Is Out!"
|
||||
show()
|
||||
updateLink = result2["html_url"]
|
||||
|
||||
func _on_close_buen_pressed() -> void:
|
||||
hide()
|
||||
@@ -65,10 +66,14 @@ func _on_link_button_pressed() -> void:
|
||||
var path:String = GetLocalPath()
|
||||
print(OS.get_executable_path())
|
||||
if !OS.has_feature("editor"):
|
||||
download_request.download_file = path + "download.zip"
|
||||
var DownloadLink:String
|
||||
if OS.get_name() == "Windows":
|
||||
download_request.download_file = path + "download.zip"
|
||||
var error = download_request.request(
|
||||
"https://github.com/notdraimdev/Simplaudio/releases/latest/download/Windows.zip"
|
||||
DownloadLink = "https://github.com/notdraimdev/Simplaudio/releases/latest/download/Windows.zip"
|
||||
elif OS.get_name() == "Linux":
|
||||
DownloadLink = "https://github.com/notdraimdev/Simplaudio/releases/latest/download/Linux.zip"
|
||||
if DownloadLink.is_empty() != true:
|
||||
var error = download_request.request(DownloadLink
|
||||
)
|
||||
if error != OK:
|
||||
print("! DOWNLOAD ERROR: " + str(error))
|
||||
@@ -77,6 +82,7 @@ func _on_link_button_pressed() -> void:
|
||||
else:
|
||||
errorLabel.text = "downloading..."
|
||||
else:
|
||||
push_error("OS NOT SUPPORTED, you should not get this error but you did, congrat!")
|
||||
OS.shell_open(updateLink)
|
||||
|
||||
func _on_download_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray) -> void:
|
||||
@@ -89,11 +95,10 @@ func _on_download_request_completed(result: int, response_code: int, headers: Pa
|
||||
errorLabel.text = "unzipping..."
|
||||
print("works as expected brotha")
|
||||
var unzipper:ZIPReader = ZIPReader.new() # sus
|
||||
|
||||
unzipper.open(GetLocalPath()+"download.zip")
|
||||
var files:PackedStringArray = unzipper.get_files()
|
||||
for file in files:
|
||||
var actualfile = file.replace("MusicPlayerExports/","")
|
||||
var actualfile = file.replace("Linux/","").replace("Windows/","").replace("Android/","")
|
||||
print("FILE: " + actualfile)
|
||||
var FileAcess:FileAccess = FileAccess.open(GetLocalPath() + actualfile,FileAccess.WRITE_READ)
|
||||
|
||||
|
||||
+4
-3
@@ -8,9 +8,10 @@ extends Button
|
||||
|
||||
var currentlyExtending:bool
|
||||
var Target:float = 50
|
||||
var downloadList:bool = false
|
||||
signal ContinueProcess
|
||||
|
||||
@onready var Parent:MainScene = get_tree().root.get_child(2)
|
||||
@onready var Parent:MainScene = get_tree().root.get_child(3)
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
@@ -37,11 +38,10 @@ func YTSetupCompleted():
|
||||
yt_download.disabled = false
|
||||
|
||||
func DownloadPlaylistConf():
|
||||
downloadList = true
|
||||
ContinueProcess.emit()
|
||||
|
||||
func DownloadSingleSongConf():
|
||||
var idx:int = yt_link.text.find("list=")
|
||||
yt_link.text = yt_link.text.erase(idx,500)
|
||||
ContinueProcess.emit()
|
||||
|
||||
func DownloadYTVidFromLink():
|
||||
@@ -63,6 +63,7 @@ func DownloadYTVidFromLink():
|
||||
download.set_destination(owner.PlaylistsLocation[owner.CurrentPlaylist])
|
||||
print(owner.PlaylistsLocation[owner.CurrentPlaylist])
|
||||
download.convert_to_audio(YtDlp.Audio.MP3)
|
||||
download._download_playlist = downloadList
|
||||
download.start()
|
||||
yt_download.disabled = true
|
||||
download.completely_finished.connect(DownloadCompleted)
|
||||
|
||||
Reference in New Issue
Block a user