Compare commits
54 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4a83c33452 | |||
| accd1fe26f | |||
| 45b758627e | |||
| 833bfc3650 | |||
| 8557adbed5 | |||
| 891bfc7382 | |||
| 424e591064 | |||
| 810d5c40de | |||
| 81c30245c4 | |||
| e8403a2caf | |||
| 7947422027 | |||
| f14a8170d6 | |||
| 35810868fb | |||
| c418b417ec | |||
| 99d4b8dfcc | |||
| e77c7da068 | |||
| ed376a728b | |||
| 5da51b2999 | |||
| 3a8ec2e6de | |||
| d87a69fc9f | |||
| 3747eb6f8c | |||
| a602821d7b | |||
| b4b1dcdc4a | |||
| 03663d8698 | |||
| 4b05dd21e3 | |||
| 9999f23629 | |||
| 1503329864 | |||
| dedebf013c | |||
| 9745cceb12 | |||
| 1de3ced558 | |||
| aea4b42da6 | |||
| b06f15a2cd | |||
| 8e3c158911 | |||
| 3151974621 | |||
| a0d2e7827e | |||
| 7d0882856b | |||
| 340a29f8e8 | |||
| 02e8c3545a | |||
| 3a698b1181 | |||
| faa1d62c2a | |||
| ba54b7b195 | |||
| 82c4ff4cf3 | |||
| 73d0bf7c5a | |||
| 4fd83f4891 | |||
| 796920a8dc | |||
| f56c40ce7f | |||
| be75e251a2 | |||
| a29a9778b7 | |||
| a9f5aeda81 | |||
| 51be2e3cd3 | |||
| c42d604d08 | |||
| 2b553203d7 | |||
| 9fa030ee1e | |||
| ed25e8d3b6 |
@@ -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.
|
||||
@@ -0,0 +1,20 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
void vertex() {
|
||||
// Called for every vertex the material is visible on.
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 animatedUV;
|
||||
animatedUV.x = (sin(UV.x + (TIME))/2.0)+0.5;
|
||||
animatedUV.y = (sin(UV.y + (TIME+(PI/2.0)))/2.0)+0.5;
|
||||
float color1 = 1.0 *animatedUV.x;
|
||||
float color2 = 1.0 *animatedUV.y;
|
||||
|
||||
COLOR = vec4((color1*0.7)+(color2*0.3),(color1*0.5)+(color2*0.5),(color1*0.3)+(color2*0.7),1);
|
||||
}
|
||||
|
||||
//void light() {
|
||||
// Called for every pixel for every light affecting the CanvasItem.
|
||||
// Uncomment to replace the default light processing function with this one.
|
||||
//}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 136 KiB |
@@ -0,0 +1,14 @@
|
||||
extends ColorRect
|
||||
@onready var StandardColor = color
|
||||
|
||||
# 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:
|
||||
if get_parent().is_hovered():
|
||||
color = StandardColor.lightened(0.3)
|
||||
else:
|
||||
color = StandardColor
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 769 B |
@@ -2,16 +2,16 @@
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bdpat2sfflaxq"
|
||||
path="res://.godot/imported/Youtube_logo.png-22e44a6c4c4bd7a2da4492032ea62686.ctex"
|
||||
uid="uid://bmbxyma4ra46p"
|
||||
path="res://.godot/imported/Download.png-3a4ebaeb081d510c32ff24ab28484d7b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Youtube_logo.png"
|
||||
dest_files=["res://.godot/imported/Youtube_logo.png-22e44a6c4c4bd7a2da4492032ea62686.ctex"]
|
||||
source_file="res://Download.png"
|
||||
dest_files=["res://.godot/imported/Download.png-3a4ebaeb081d510c32ff24ab28484d7b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://n8g3v41u2u48"
|
||||
path="res://.godot/imported/Error.wav-f6422fca2f257bd634183d1c1c7a43ba.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Error.wav"
|
||||
dest_files=["res://.godot/imported/Error.wav-f6422fca2f257bd634183d1c1c7a43ba.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=0
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 271 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cmr1ij4s7xa27"
|
||||
path="res://.godot/imported/IMG_20241015_162213_033(1).jpg-9929b05aea172bc5afc1063f329c9b14.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://IMG_20241015_162213_033(1).jpg"
|
||||
dest_files=["res://.godot/imported/IMG_20241015_162213_033(1).jpg-9929b05aea172bc5afc1063f329c9b14.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
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 782 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://2vacx4h6vn46"
|
||||
path="res://.godot/imported/IMG_20241015_175925_722(1).jpg-b4169e075837dc19cf9c8f3902aa4f18.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://IMG_20241015_175925_722(1).jpg"
|
||||
dest_files=["res://.godot/imported/IMG_20241015_175925_722(1).jpg-b4169e075837dc19cf9c8f3902aa4f18.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
|
||||
@@ -1,23 +1,23 @@
|
||||
[gd_scene load_steps=60 format=3 uid="uid://b2sygl55s6fng"]
|
||||
[gd_scene load_steps=73 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"]
|
||||
[ext_resource type="Texture2D" uid="uid://cq8jj63iyu2cs" path="res://d7hftxdivxxvm.cloudfront.webp" id="2_wf35v"]
|
||||
[ext_resource type="Texture2D" uid="uid://daq8wnhtscpjl" path="res://Skip.png" id="3_4vx67"]
|
||||
[ext_resource type="Script" path="res://wallpaper_manager.gd" id="4_y372l"]
|
||||
[ext_resource type="Texture2D" uid="uid://cmr1ij4s7xa27" path="res://IMG_20241015_162213_033(1).jpg" id="5_8v24s"]
|
||||
[ext_resource type="Texture2D" uid="uid://38c8dfym0svn" path="res://Loop.png" id="5_c2g63"]
|
||||
[ext_resource type="Texture2D" uid="uid://cekkhyppj88xi" path="res://Headphones.png" id="6_3mi6c"]
|
||||
[ext_resource type="Texture2D" uid="uid://snne8iiftksi" path="res://Evening_view_of_Munnar_1633.jpg" id="6_5vm0w"]
|
||||
[ext_resource type="Texture2D" uid="uid://ba5wdmchyy50n" path="res://nighttime-in-the-hills-henry-porter.jpg" id="6_8abnc"]
|
||||
[ext_resource type="Texture2D" uid="uid://2vacx4h6vn46" path="res://IMG_20241015_175925_722(1).jpg" id="6_hvupl"]
|
||||
[ext_resource type="Texture2D" uid="uid://ctb4s2nks73rx" path="res://Play.png" id="8_5v7u3"]
|
||||
[ext_resource type="Shader" path="res://CoverShader.gdshader" id="8_4531v"]
|
||||
[ext_resource type="Shader" path="res://Background1.gdshader" id="8_xtnau"]
|
||||
[ext_resource type="Shader" path="res://Main.gdshader" id="10_20857"]
|
||||
[ext_resource type="Texture2D" uid="uid://b00wlqid2jdvi" path="res://BigLogo.png" id="10_xnj6a"]
|
||||
[ext_resource type="Texture2D" uid="uid://0r1tx6l1lc6x" path="res://settingscog.png" id="11_esjel"]
|
||||
[ext_resource type="Script" path="res://cover.gd" id="12_3v50a"]
|
||||
[ext_resource type="Script" path="res://playlists_panel.gd" id="12_8ie8y"]
|
||||
[ext_resource type="Script" path="res://settings_button.gd" id="12_073mb"]
|
||||
[ext_resource type="Texture2D" uid="uid://bdpat2sfflaxq" path="res://Youtube_logo.png" id="12_bc5ym"]
|
||||
[ext_resource type="Texture2D" uid="uid://myq6n4bshduj" path="res://search.png" id="12_cv2gm"]
|
||||
[ext_resource type="Script" path="res://search_bar.gd" id="12_mr42x"]
|
||||
[ext_resource type="Script" path="res://select_playlist.gd" id="12_of5fe"]
|
||||
@@ -29,7 +29,17 @@
|
||||
[ext_resource type="Texture2D" uid="uid://1rstn6r2wisy" path="res://X.png" id="14_mioc4"]
|
||||
[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://CustomButtonColor.gd" id="32_pwgec"]
|
||||
[ext_resource type="Script" path="res://loading_failed_screen.gd" id="37_mkkhu"]
|
||||
[ext_resource type="AudioStream" uid="uid://n8g3v41u2u48" path="res://Error.wav" id="38_nkjlp"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_kvkfy"]
|
||||
shader = ExtResource("8_xtnau")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ku7tv"]
|
||||
shader = ExtResource("10_20857")
|
||||
@@ -85,14 +95,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
|
||||
@@ -146,6 +148,45 @@ 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
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_ivhc6"]
|
||||
font_size = 20
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_spe36"]
|
||||
font_size = 46
|
||||
outline_size = 5
|
||||
outline_color = Color(0.675524, 0.62112, 0, 1)
|
||||
shadow_size = 2
|
||||
shadow_color = Color(0.282353, 0.282353, 0.282353, 0.384314)
|
||||
shadow_offset = Vector2(3, 5)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_amome"]
|
||||
font_size = 18
|
||||
font_color = Color(0.894922, 0.894922, 0.894922, 1)
|
||||
outline_size = 2
|
||||
outline_color = Color(0.519817, 0.439396, 0, 1)
|
||||
shadow_size = 4
|
||||
shadow_color = Color(0.290196, 0.290196, 0.290196, 0.270588)
|
||||
shadow_offset = Vector2(2, 3)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_drf2g"]
|
||||
font_size = 20
|
||||
outline_size = 2
|
||||
outline_color = Color(0.519817, 0.439396, 0, 1)
|
||||
shadow_size = 4
|
||||
shadow_color = Color(0.290196, 0.290196, 0.290196, 0.270588)
|
||||
shadow_offset = Vector2(2, 3)
|
||||
|
||||
[node name="Node2D" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -157,6 +198,11 @@ script = ExtResource("1_ubs1p")
|
||||
LoopPressed = ExtResource("2_iolk5")
|
||||
LoopNotPressed = ExtResource("5_c2g63")
|
||||
|
||||
[node name="OSMediaIntigration" type="Control" parent="."]
|
||||
anchors_preset = 0
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
|
||||
[node name="WallpaperManager" type="Node2D" parent="." node_paths=PackedStringArray("Daytime", "Evening", "Nighttime")]
|
||||
script = ExtResource("4_y372l")
|
||||
Daytime = NodePath("../Daytime")
|
||||
@@ -170,18 +216,19 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("2_wf35v")
|
||||
texture = ExtResource("5_8v24s")
|
||||
expand_mode = 3
|
||||
stretch_mode = 6
|
||||
|
||||
[node name="Evening" type="TextureRect" parent="."]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("6_5vm0w")
|
||||
texture = ExtResource("6_hvupl")
|
||||
expand_mode = 3
|
||||
stretch_mode = 6
|
||||
|
||||
[node name="Nighttime" type="TextureRect" parent="."]
|
||||
@@ -206,6 +253,17 @@ grow_vertical = 2
|
||||
expand_mode = 5
|
||||
stretch_mode = 6
|
||||
|
||||
[node name="UpdatingBG" type="ColorRect" parent="."]
|
||||
visible = false
|
||||
modulate = Color(1, 1, 1, 0.011)
|
||||
material = SubResource("ShaderMaterial_kvkfy")
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Logo" type="Sprite2D" parent="."]
|
||||
visible = false
|
||||
modulate = Color(1, 1, 1, 0.686275)
|
||||
@@ -248,7 +306,7 @@ script = ExtResource("12_3v50a")
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 24.0
|
||||
offset_right = 257.0
|
||||
offset_right = 256.0
|
||||
offset_bottom = 80.0
|
||||
focus_mode = 0
|
||||
toggle_mode = true
|
||||
@@ -256,7 +314,18 @@ shortcut = SubResource("Shortcut_vp2fh")
|
||||
text = "Playlists"
|
||||
script = ExtResource("12_of5fe")
|
||||
|
||||
[node name="PlaylistsPanel" type="Control" parent="."]
|
||||
[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"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
anchors_preset = 0
|
||||
@@ -264,12 +333,12 @@ 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
|
||||
@@ -278,7 +347,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
|
||||
@@ -290,48 +359,66 @@ 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
|
||||
|
||||
[node name="YtTabButton" type="Button" parent="."]
|
||||
texture_filter = 1
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -77.0
|
||||
offset_top = 131.0
|
||||
offset_right = -5.0
|
||||
offset_bottom = 203.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 2
|
||||
scale = Vector2(0.79, 0.79)
|
||||
focus_mode = 0
|
||||
toggle_mode = true
|
||||
icon = ExtResource("29_v44vi")
|
||||
script = ExtResource("16_2t15p")
|
||||
|
||||
[node name="YoutubeMenuHolder" type="Control" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 1
|
||||
@@ -357,7 +444,7 @@ anchor_bottom = 1.0
|
||||
offset_left = -7.0
|
||||
offset_top = -5.0
|
||||
offset_right = 7.0
|
||||
offset_bottom = 5.0
|
||||
offset_bottom = 4.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0.14902, 0.14902, 0.14902, 1)
|
||||
@@ -366,7 +453,7 @@ color = Color(0.14902, 0.14902, 0.14902, 1)
|
||||
layout_mode = 1
|
||||
offset_right = 229.0
|
||||
offset_bottom = 47.0
|
||||
placeholder_text = "Youtube link(can be playlist)"
|
||||
placeholder_text = "Link to download"
|
||||
|
||||
[node name="YTDownload" type="Button" parent="YoutubeMenuHolder/Youtube menu"]
|
||||
layout_mode = 1
|
||||
@@ -393,6 +480,24 @@ offset_bottom = 72.0
|
||||
text = "NOTE: speeds depend on your internet"
|
||||
label_settings = SubResource("LabelSettings_fiiw4")
|
||||
|
||||
[node name="HelpButton" type="Button" parent="YoutubeMenuHolder/Youtube menu"]
|
||||
custom_minimum_size = Vector2(32, 32)
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -38.83
|
||||
offset_top = -40.0
|
||||
offset_right = 1.17004
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
focus_mode = 0
|
||||
text = "?"
|
||||
script = ExtResource("17_4b8oh")
|
||||
Open = "https://notdraimdev.github.io/SimplSite/GettingStarted.html"
|
||||
|
||||
[node name="CreatePlaylistsMenu" type="Control" parent="."]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
@@ -415,10 +520,13 @@ color = Color(0.14902, 0.14902, 0.14902, 1)
|
||||
|
||||
[node name="FileDialog" type="FileDialog" parent="CreatePlaylistsMenu"]
|
||||
title = "Open a Directory"
|
||||
initial_position = 2
|
||||
size = Vector2i(352, 180)
|
||||
ok_button_text = "Select Current Folder"
|
||||
file_mode = 2
|
||||
access = 2
|
||||
filters = PackedStringArray("*")
|
||||
show_hidden_files = true
|
||||
use_native_dialog = true
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="CreatePlaylistsMenu"]
|
||||
@@ -506,31 +614,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="SettingsPopup" type="Popup" parent="."]
|
||||
position = Vector2i(319, 85)
|
||||
size = Vector2i(591, 501)
|
||||
|
||||
[node name="SettingsMenuChild" parent="SettingsPopup" instance=ExtResource("13_7atry")]
|
||||
offset_left = -272.0
|
||||
offset_top = 8.0
|
||||
offset_bottom = 458.0
|
||||
|
||||
[node name="FileDialog" type="FileDialog" parent="."]
|
||||
title = "Open a Directory"
|
||||
position = Vector2i(28, 115)
|
||||
@@ -635,12 +718,12 @@ anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 67.0
|
||||
offset_top = -120.0
|
||||
offset_top = -132.0
|
||||
offset_right = -200.0
|
||||
offset_bottom = -89.0
|
||||
offset_bottom = -95.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
text = "Please select a directory"
|
||||
text = "Please make a Playlist "
|
||||
label_settings = SubResource("LabelSettings_6prit")
|
||||
clip_text = true
|
||||
text_overrun_behavior = 2
|
||||
@@ -652,7 +735,7 @@ anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 68.0
|
||||
offset_top = -99.0
|
||||
offset_top = -106.0
|
||||
offset_right = -199.0
|
||||
offset_bottom = -68.0
|
||||
grow_horizontal = 2
|
||||
@@ -714,7 +797,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
|
||||
@@ -723,16 +806,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
|
||||
@@ -768,6 +856,7 @@ grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
size_flags_horizontal = 1
|
||||
size_flags_vertical = 8
|
||||
tooltip_text = "use Up/Down arrow keys to adjust"
|
||||
focus_mode = 0
|
||||
value = 100.0
|
||||
|
||||
@@ -782,32 +871,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="YtTabButton" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -97.0
|
||||
offset_top = 109.0
|
||||
offset_right = 551.0
|
||||
offset_bottom = 560.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 2
|
||||
scale = Vector2(0.105, 0.105)
|
||||
focus_mode = 0
|
||||
toggle_mode = true
|
||||
icon = ExtResource("12_bc5ym")
|
||||
flat = true
|
||||
script = ExtResource("16_2t15p")
|
||||
|
||||
[node name="Version" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
@@ -819,9 +882,66 @@ offset_left = -64.0
|
||||
offset_top = -23.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
text = "v1.3.3"
|
||||
text = "v1.5.2"
|
||||
horizontal_alignment = 2
|
||||
|
||||
[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_top = -294.0
|
||||
offset_bottom = -294.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[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
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0.14902, 0.14902, 0.14902, 1)
|
||||
metadata/_edit_use_anchors_ = true
|
||||
|
||||
[node name="SettingsMenuChild" parent="SettingsHolder/SettingsPopup" instance=ExtResource("13_7atry")]
|
||||
layout_mode = 1
|
||||
offset_left = -280.0
|
||||
offset_top = 8.0
|
||||
offset_right = 296.0
|
||||
offset_bottom = 501.0
|
||||
|
||||
[node name="WavDisclaimer" type="AcceptDialog" parent="."]
|
||||
transparent_bg = true
|
||||
title = "WAV disclaimer"
|
||||
@@ -841,7 +961,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
|
||||
@@ -853,19 +972,22 @@ offset_top = -40.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
script = ExtResource("30_byc5i")
|
||||
errorColor = Color(0.981984, 0, 0.065929, 1)
|
||||
|
||||
[node name="HTTPRequest" type="HTTPRequest" parent="UpdateChecker"]
|
||||
timeout = 5.0
|
||||
|
||||
[node name="DownloadRequest" type="HTTPRequest" parent="UpdateChecker"]
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="UpdateChecker"]
|
||||
layout_mode = 0
|
||||
offset_left = -214.0
|
||||
offset_top = -124.0
|
||||
offset_right = -24.0
|
||||
offset_left = -292.0
|
||||
offset_top = -256.0
|
||||
offset_right = -10.0
|
||||
offset_bottom = -44.0
|
||||
color = Color(0.14902, 0.14902, 0.14902, 1)
|
||||
|
||||
[node name="Label" type="Label" parent="UpdateChecker/ColorRect"]
|
||||
[node name="UpdateAvailableText" type="Label" parent="UpdateChecker/ColorRect"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
@@ -875,8 +997,34 @@ offset_right = 68.0
|
||||
offset_bottom = 23.0
|
||||
grow_horizontal = 2
|
||||
text = "Update Available!"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Patchnotes" type="RichTextLabel" parent="UpdateChecker/ColorRect"]
|
||||
z_index = 2
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_top = 0.150943
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.820755
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
text = "PatchNotes"
|
||||
context_menu_enabled = true
|
||||
metadata/_edit_use_anchors_ = true
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="UpdateChecker/ColorRect/Patchnotes"]
|
||||
z_index = -1
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0.257219, 0.338913, 0.352311, 1)
|
||||
|
||||
[node name="LinkButton" type="Button" parent="UpdateChecker/ColorRect"]
|
||||
z_index = 1
|
||||
layout_mode = 1
|
||||
anchors_preset = 12
|
||||
anchor_top = 1.0
|
||||
@@ -886,6 +1034,19 @@ offset_top = -38.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
text = "Update"
|
||||
flat = true
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="UpdateChecker/ColorRect/LinkButton"]
|
||||
z_index = -1
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
color = Color(0.264012, 0.463229, 0.504783, 1)
|
||||
script = ExtResource("32_pwgec")
|
||||
|
||||
[node name="CloseBuen" type="Button" parent="UpdateChecker/ColorRect"]
|
||||
layout_mode = 1
|
||||
@@ -895,25 +1056,198 @@ anchor_right = 1.0
|
||||
offset_left = -72.0
|
||||
offset_bottom = 72.0
|
||||
grow_horizontal = 0
|
||||
scale = Vector2(0.25, 0.25)
|
||||
scale = Vector2(0.4, 0.4)
|
||||
pivot_offset = Vector2(72, 0)
|
||||
icon = ExtResource("14_mioc4")
|
||||
flat = true
|
||||
|
||||
[node name="UpdatingNotification" type="Control" parent="."]
|
||||
visible = false
|
||||
custom_minimum_size = Vector2(400, 200)
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -20.0
|
||||
offset_top = -20.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="UpdatingNotification"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0.262745, 0.462745, 0.505882, 1)
|
||||
|
||||
[node name="ColorRect2" type="ColorRect" parent="UpdatingNotification"]
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.245
|
||||
grow_horizontal = 2
|
||||
color = Color(0.196078, 0.278431, 0.32549, 1)
|
||||
|
||||
[node name="Label" type="Label" parent="UpdatingNotification"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -20.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 23.0
|
||||
grow_horizontal = 2
|
||||
text = "Simplaudio is Updating!"
|
||||
label_settings = SubResource("LabelSettings_b1152")
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Label2" type="Label" parent="UpdatingNotification"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -142.0
|
||||
offset_top = 52.0
|
||||
offset_right = 142.0
|
||||
offset_bottom = 153.0
|
||||
grow_horizontal = 2
|
||||
text = "Please wait.
|
||||
Simplaudio will restart automatically
|
||||
|
||||
this wont take long"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="LoadingIMG" type="Sprite2D" parent="UpdatingNotification"]
|
||||
position = Vector2(199, 115)
|
||||
rotation = 1.5708
|
||||
scale = Vector2(-0.5, 0.5)
|
||||
texture = ExtResource("13_de5ej")
|
||||
script = ExtResource("14_rhw4k")
|
||||
|
||||
[node name="Error" type="Label" parent="UpdatingNotification"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -20.0
|
||||
offset_top = 57.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 80.0
|
||||
grow_horizontal = 2
|
||||
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"
|
||||
|
||||
[node name="LoadingFailedScreen" type="Control" parent="."]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -235.0
|
||||
offset_top = -159.0
|
||||
offset_right = 235.0
|
||||
offset_bottom = 159.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("37_mkkhu")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="LoadingFailedScreen"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0.681657, 0.492205, 3.85046e-07, 1)
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="LoadingFailedScreen"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -187.0
|
||||
offset_right = 187.0
|
||||
offset_bottom = 91.0
|
||||
grow_horizontal = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="LoadingFailedLabel" type="Label" parent="LoadingFailedScreen/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "LOADING FAILED"
|
||||
label_settings = SubResource("LabelSettings_spe36")
|
||||
|
||||
[node name="Label2" type="Label" parent="LoadingFailedScreen/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Saving is currently disabled
|
||||
Simplaudio failed to load your save,
|
||||
Simplaudio may also have failed to save,
|
||||
if you suspect this, please contact me."
|
||||
label_settings = SubResource("LabelSettings_amome")
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="Label3" type="Label" parent="LoadingFailedScreen/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Please restart Simplaudio,
|
||||
if the issue presists you can:"
|
||||
label_settings = SubResource("LabelSettings_drf2g")
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="LoadingFailedScreen/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
alignment = 1
|
||||
|
||||
[node name="ContinueAnyways" type="Button" parent="LoadingFailedScreen/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Continue anyways"
|
||||
|
||||
[node name="Contact" type="Button" parent="LoadingFailedScreen/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Contact me"
|
||||
|
||||
[node name="ConfirmationDialog" type="ConfirmationDialog" parent="LoadingFailedScreen"]
|
||||
title = "Are you sure?"
|
||||
initial_position = 2
|
||||
size = Vector2i(242, 106)
|
||||
force_native = true
|
||||
ok_button_text = "Yes, i will take the risk"
|
||||
dialog_text = "This is *irreversable*"
|
||||
cancel_button_text = "No"
|
||||
|
||||
[node name="FailedAudioCue" type="AudioStreamPlayer" parent="LoadingFailedScreen"]
|
||||
stream = ExtResource("38_nkjlp")
|
||||
|
||||
[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="YtTabButton" to="YtTabButton" 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"]
|
||||
[connection signal="pressed" from="UpdateChecker/ColorRect/CloseBuen" to="UpdateChecker" method="_on_close_buen_pressed"]
|
||||
|
||||
+47
-2
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=9 format=3 uid="uid://dqg674t6kun4e"]
|
||||
[gd_scene load_steps=10 format=3 uid="uid://dqg674t6kun4e"]
|
||||
|
||||
[ext_resource type="Script" path="res://settings.gd" id="1_uaa7d"]
|
||||
[ext_resource type="Script" path="res://eq_settings.gd" id="2_1n4m6"]
|
||||
@@ -17,6 +17,9 @@ font_size = 11
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_cwn10"]
|
||||
font_size = 15
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_i51gs"]
|
||||
font_size = 50
|
||||
|
||||
[node name="SettingsMenuChild" type="Control"]
|
||||
custom_minimum_size = Vector2(576, 493)
|
||||
layout_mode = 3
|
||||
@@ -38,6 +41,7 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
scroll_vertical = 100
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="ScrollContainer"]
|
||||
custom_minimum_size = Vector2(576, 493)
|
||||
@@ -148,7 +152,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
|
||||
|
||||
@@ -503,6 +507,47 @@ autowrap_mode = 2
|
||||
custom_minimum_size = Vector2(0, 16.07)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Credits" type="VBoxContainer" parent="ScrollContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="ScrollContainer/VBoxContainer/Credits"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "CREDITS"
|
||||
label_settings = SubResource("LabelSettings_i51gs")
|
||||
|
||||
[node name="Label5" type="LinkButton" parent="ScrollContainer/VBoxContainer/Credits"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "Godot"
|
||||
underline = 1
|
||||
uri = "https://godotengine.org"
|
||||
|
||||
[node name="Label2" type="LinkButton" parent="ScrollContainer/VBoxContainer/Credits"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "Godot YT-DL by Noé Le Cam"
|
||||
underline = 1
|
||||
uri = "https://github.com/Nolkaloid/godot-yt-dlp"
|
||||
|
||||
[node name="Label3" type="LinkButton" parent="ScrollContainer/VBoxContainer/Credits"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "Discord RPC by vaporee"
|
||||
underline = 1
|
||||
uri = "https://github.com/vaporvee/discord-rpc-godot"
|
||||
|
||||
[node name="Label4" type="LinkButton" parent="ScrollContainer/VBoxContainer/Credits"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "Godot GIF by b0tlanner"
|
||||
underline = 1
|
||||
uri = "https://github.com/vaporvee/discord-rpc-godot"
|
||||
|
||||
[node name="Seperator7" type="Control" parent="ScrollContainer/VBoxContainer"]
|
||||
custom_minimum_size = Vector2(0, 16.07)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="TimeListening" type="Label" parent="ScrollContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -2,16 +2,16 @@
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://drj8iwoxqu7kk"
|
||||
path="res://.godot/imported/Cat_August_2010-4.jpg-ee22e0b2d7c21625ade8bb157ecd9ac0.ctex"
|
||||
uid="uid://cm5ps3a716wr0"
|
||||
path="res://.godot/imported/XSmall.png-2fa29ed3d6c0476862944f7e0885c6ed.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Cat_August_2010-4.jpg"
|
||||
dest_files=["res://.godot/imported/Cat_August_2010-4.jpg-ee22e0b2d7c21625ade8bb157ecd9ac0.ctex"]
|
||||
source_file="res://XSmall.png"
|
||||
dest_files=["res://.godot/imported/XSmall.png-2fa29ed3d6c0476862944f7e0885c6ed.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.4 KiB |
@@ -9,7 +9,7 @@ Button/styles/focus = SubResource("StyleBoxEmpty_1t7mm")
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5vqdt"]
|
||||
|
||||
[sub_resource type="Image" id="Image_xrdhk"]
|
||||
[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_xrdhk")
|
||||
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,13 +212,17 @@ 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])
|
||||
|
||||
var output: Array = []
|
||||
OS.execute(executable, PackedStringArray(options_and_arguments), output)
|
||||
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)
|
||||
self._thread_finished.call_deferred()
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
extends Button
|
||||
|
||||
|
||||
@export var Open:String
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
func _pressed() -> void:
|
||||
OS.shell_open(Open)
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
@@ -0,0 +1,29 @@
|
||||
extends Control
|
||||
|
||||
@onready var continue_anyways: Button = $VBoxContainer/HBoxContainer/ContinueAnyways
|
||||
@onready var contact: Button = $VBoxContainer/HBoxContainer/Contact
|
||||
@onready var failed_audio_cue: AudioStreamPlayer = $FailedAudioCue
|
||||
@onready var confirmation_dialog: ConfirmationDialog = $ConfirmationDialog
|
||||
|
||||
func Show():
|
||||
failed_audio_cue.play()
|
||||
show()
|
||||
continue_anyways.pressed.connect(confirmation_dialog.show)
|
||||
confirmation_dialog.confirmed.connect(Confiremed)
|
||||
contact.pressed.connect(Contact)
|
||||
|
||||
func Confiremed():
|
||||
owner.LoadingSaveFailed = false
|
||||
hide()
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
hide()
|
||||
|
||||
func Contact():
|
||||
print("Contact pressed")
|
||||
OS.shell_open("https://notdraimdev.github.io/SimplSite/Contact.html")
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
@@ -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: Popup = $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,8 +66,15 @@ var PlayAllLists:bool
|
||||
@export var LoopPressed:Texture2D
|
||||
@export var LoopNotPressed:Texture2D
|
||||
|
||||
signal ContinueDelete
|
||||
var deleteSong:bool
|
||||
|
||||
var LoadingSaveFailed:bool
|
||||
@onready var loading_failed_screen: Control = $LoadingFailedScreen
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
get_tree().root.min_size = Vector2(850,492)
|
||||
current_progress.drag_ended.connect(SongDragStopped)
|
||||
current_progress.drag_started.connect(SongDragStarted)
|
||||
loop.pressed.connect(LoopSong)
|
||||
@@ -76,15 +84,17 @@ 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"):
|
||||
OS.alert("opening files like this\nis no longer supported")
|
||||
var data:Dictionary
|
||||
var save = loadUserdata()
|
||||
if save != {}:
|
||||
data = save
|
||||
loadPlaylists()
|
||||
if loadUserdata() != null:
|
||||
data = loadUserdata()
|
||||
if Strin.is_empty():
|
||||
if !Playlists.is_empty():
|
||||
PlaylistSelected(Playlists.keys()[0],PlaylistsLocation[Playlists.keys()[0]])
|
||||
@@ -103,6 +113,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"])
|
||||
@@ -165,9 +178,32 @@ func _ready() -> void:
|
||||
DirectorySelected(Strin)
|
||||
PlaySongs()
|
||||
#PlaySongs()
|
||||
DiscordRPC.app_id = 1276916292170809426
|
||||
|
||||
DiscordRPC.refresh()
|
||||
setUpDiscord()
|
||||
for child in get_children(true):
|
||||
if child is Control:
|
||||
child.focus_mode = child is LineEdit
|
||||
if LoadingSaveFailed:
|
||||
loading_failed_screen.Show()
|
||||
|
||||
func setUpDiscord():
|
||||
DiscordRPC.app_id = 1276916292170809426
|
||||
DiscordRPC.refresh()
|
||||
print("stiff chicks ",DiscordRPC.get_current_user())
|
||||
SplashStrings = ["the party just started!"]
|
||||
var LText = SplashStrings.pick_random()
|
||||
print(LText)
|
||||
DiscordRPC.large_image_text = LText
|
||||
if DiscordUsername == "vrenthusiest":
|
||||
if randi_range(1,4) == 1:
|
||||
DiscordRPC.large_image = "nullbody"
|
||||
DiscordRPC.large_image_text = "I am racist against nullbodys - Vr"
|
||||
else:
|
||||
DiscordRPC.large_image = "logo"
|
||||
else:
|
||||
DiscordRPC.large_image = "logo"
|
||||
DiscordUsername = DiscordRPC.get_current_user().get("username")
|
||||
DiscordRPC.refresh()
|
||||
# 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
|
||||
@@ -177,12 +213,7 @@ 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()
|
||||
print(LText)
|
||||
DiscordRPC.large_image_text = LText
|
||||
# Image key for large image from "Art Assets" from the Discord Developer website
|
||||
DiscordRPC.small_image = ""
|
||||
# Tooltip text for the small image
|
||||
@@ -191,12 +222,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()
|
||||
@@ -221,7 +283,8 @@ func SetSong(IDX:int):
|
||||
CurrentIDX = IDX -1
|
||||
PlaySongs()
|
||||
music_player.stop()
|
||||
SaveEverything()
|
||||
if !LoadingSaveFailed:
|
||||
SaveEverything()
|
||||
print("SetSong")
|
||||
|
||||
func pausePlay():
|
||||
@@ -252,13 +315,12 @@ func SetVolume(Volume:float):
|
||||
AudioServer.set_bus_volume_db(0,volume)
|
||||
else:
|
||||
AudioServer.set_bus_volume_db(0,-1000)
|
||||
print("Chnaged Volume")
|
||||
SaveEverything()
|
||||
volume_slider.value = Volume
|
||||
|
||||
func SelectPlaylistDir():
|
||||
file_dialog.show()
|
||||
SaveEverything()
|
||||
if !LoadingSaveFailed:
|
||||
SaveEverything()
|
||||
print("Select Playtlist dir")
|
||||
|
||||
func DirectorySelected(dir:String):
|
||||
@@ -271,17 +333,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
|
||||
@@ -334,7 +394,8 @@ func PlaySongs():
|
||||
CurrentSongLenth = song.get_length()
|
||||
music_player.stream = song
|
||||
music_player.play()
|
||||
SaveEverything()
|
||||
if !LoadingSaveFailed:
|
||||
SaveEverything()
|
||||
print("set stream")
|
||||
|
||||
|
||||
@@ -358,11 +419,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:
|
||||
@@ -381,10 +442,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):
|
||||
@@ -411,43 +472,31 @@ func _process(_delta: float) -> void:
|
||||
BackroundSetup = true
|
||||
if currentSaveTime < 0:
|
||||
currentSaveTime = SaveInterval
|
||||
SaveEverything()
|
||||
print("yoo")
|
||||
|
||||
DiscordUsername = DiscordRPC.get_current_user().get("username")
|
||||
if !LoadingSaveFailed:
|
||||
SaveEverything()
|
||||
@warning_ignore("integer_division")
|
||||
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"]
|
||||
print(DiscordRPC.get_current_user()["username"])
|
||||
if DiscordRPC.large_image != "nullbody":
|
||||
UpdateSplashes()
|
||||
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.large_image != "nullbody":
|
||||
DiscordRPC.large_image_text = LText
|
||||
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()
|
||||
@@ -486,7 +535,31 @@ func _process(_delta: float) -> void:
|
||||
DiscordRPC.refresh()
|
||||
|
||||
|
||||
|
||||
func UpdateSplashes():
|
||||
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():
|
||||
@@ -509,43 +582,69 @@ 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")
|
||||
}
|
||||
print("saving")
|
||||
saveUserdata(Data)
|
||||
savePlaylists()
|
||||
|
||||
var saveRetrys:int =0
|
||||
|
||||
func savePlaylists():
|
||||
var json = JSON.new()
|
||||
var file = FileAccess.open("user://playlists.dat", FileAccess.WRITE)
|
||||
var file2 = FileAccess.open("user://playlistsLocation.dat", FileAccess.WRITE)
|
||||
@warning_ignore("static_called_on_instance")
|
||||
if !Playlists == null or !Playlists == {}:
|
||||
if !(Playlists == null) or !(Playlists == {}):
|
||||
file.store_string(str(json.stringify(Playlists)))
|
||||
if !PlaylistsLocation == null or !PlaylistsLocation == {}:
|
||||
if !(PlaylistsLocation == null) or !(PlaylistsLocation == {}):
|
||||
file2.store_string(str(json.stringify(PlaylistsLocation)))
|
||||
if loadUserdata() == {}:
|
||||
if saveRetrys < 3:
|
||||
savePlaylists()
|
||||
else:
|
||||
printerr("saving failed")
|
||||
|
||||
|
||||
func saveUserdata(content):
|
||||
var json = JSON.new()
|
||||
var file = FileAccess.open("user://data.dat", FileAccess.WRITE)
|
||||
@warning_ignore("static_called_on_instance")
|
||||
file.store_string(Marshalls.utf8_to_base64(json.stringify(content)))
|
||||
file.store_string(json.stringify(content))
|
||||
file.close()
|
||||
|
||||
func loadUserdata():
|
||||
var saveLoadTries:int
|
||||
|
||||
func loadUserdata() -> Dictionary:
|
||||
var json = JSON.new()
|
||||
var file = FileAccess.open("user://data.dat", FileAccess.READ)
|
||||
var filetext = file.get_as_text() if file != null else null
|
||||
if file != null:
|
||||
var content
|
||||
var content:Dictionary = {}
|
||||
if json.parse_string(file.get_as_text()) != null:
|
||||
content = json.parse_string(filetext)
|
||||
else:
|
||||
@warning_ignore("static_called_on_instance")
|
||||
content = json.parse_string(Marshalls.base64_to_utf8(file.get_as_text()))
|
||||
return content
|
||||
file.close()
|
||||
if content != null:
|
||||
return content
|
||||
else:
|
||||
LoadingSaveFailed = true
|
||||
return {}
|
||||
else:
|
||||
return null
|
||||
file.close()
|
||||
printerr("loading save failed")
|
||||
if saveLoadTries < 3:
|
||||
print("retrying")
|
||||
saveLoadTries +=1
|
||||
return loadUserdata()
|
||||
LoadingSaveFailed = true
|
||||
return {}
|
||||
|
||||
|
||||
var playlistLoadTries:int
|
||||
func loadPlaylists():
|
||||
var json = JSON.new()
|
||||
var file = FileAccess.open("user://playlistsLocation.dat", FileAccess.READ)
|
||||
@@ -555,8 +654,19 @@ func loadPlaylists():
|
||||
print(filetext)
|
||||
#print("shit " + json.parse_string(filetext))
|
||||
if file.get_as_text() != "" and file2.get_as_text() != "":
|
||||
PlaylistsLocation = json.parse_string(file.get_as_text())
|
||||
Playlists = {} if json.parse_string(file2.get_as_text()) == null else json.parse_string(file2.get_as_text())
|
||||
var PlaylistsLocationTemp
|
||||
var PlaylistsTemp
|
||||
LoadingSaveFailed
|
||||
PlaylistsLocationTemp = json.parse_string(file.get_as_text())
|
||||
PlaylistsTemp = json.parse_string(file2.get_as_text())
|
||||
if (PlaylistsTemp == null) or (PlaylistsLocationTemp == null):
|
||||
printerr("Loading playlists failed")
|
||||
LoadingSaveFailed = true
|
||||
else:
|
||||
Playlists = PlaylistsTemp
|
||||
PlaylistsLocation = PlaylistsLocationTemp
|
||||
print(PlaylistsLocation)
|
||||
print(Playlists.keys())
|
||||
print("Playlists")
|
||||
file.close()
|
||||
file2.close()
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
extends Button
|
||||
|
||||
func _pressed() -> void:
|
||||
OS.shell_open("https://notdraimdev.github.io/SimplSite/notes.html")
|
||||
+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
|
||||
|
||||
|
||||
|
||||
+2
-1
@@ -16,6 +16,7 @@ config/features=PackedStringArray("4.3", "Forward Plus")
|
||||
run/low_processor_mode=true
|
||||
boot_splash/bg_color=Color(0, 0, 0, 1)
|
||||
boot_splash/image="res://BigLogo.png"
|
||||
boot_splash/use_filter=false
|
||||
config/icon="res://Logo2.png"
|
||||
config/windows_native_icon="res://addons/godot-yt-dlp/src/favicon2.ico"
|
||||
|
||||
@@ -23,13 +24,13 @@ 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]
|
||||
|
||||
window/size/initial_position_type=3
|
||||
window/size/extend_to_title=true
|
||||
window/energy_saving/keep_screen_on=false
|
||||
window/stretch/mode="viewport"
|
||||
window/stretch/aspect="expand"
|
||||
|
||||
[dotnet]
|
||||
|
||||
+33
-37
@@ -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:
|
||||
|
||||
if song.to_lower().containsn(fragment):
|
||||
amountOfFrags +=1
|
||||
|
||||
margin = float(amountOfFrags) / fragments.size()
|
||||
if margin > ErrorMargin:
|
||||
search_results.add_item(song.replace(".mp3","") )
|
||||
values[_i] = _s
|
||||
_i += 1
|
||||
_s += 1
|
||||
updateResults()
|
||||
|
||||
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:
|
||||
|
||||
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,33 @@
|
||||
extends Control
|
||||
|
||||
var SongName:String
|
||||
var CurrentlyPlaying:bool
|
||||
var songidx:int
|
||||
@onready var songname: Button = $HBoxContainer/Songname
|
||||
@onready var dropdown: Button = $HBoxContainer/Dropdown
|
||||
@onready var popup_menu: PopupMenu = $PopupMenu
|
||||
|
||||
|
||||
signal PlayPressed
|
||||
signal DeletePressed
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
songname.text = SongName
|
||||
popup_menu.index_pressed.connect(popupPressed)
|
||||
|
||||
func popupPressed(idx:int):
|
||||
if idx == 0:
|
||||
DeletePressed.emit(songidx)
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
dropdown.visible = songname.is_hovered() or dropdown.is_hovered()
|
||||
|
||||
|
||||
func _on_songname_pressed() -> void:
|
||||
PlayPressed.emit(songidx)
|
||||
|
||||
|
||||
func _on_dropdown_pressed() -> void:
|
||||
popup_menu.show()
|
||||
popup_menu.position = get_global_mouse_position()
|
||||
@@ -0,0 +1,53 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://ctqcbjrmxaqsk"]
|
||||
|
||||
[ext_resource type="Script" path="res://search_item.gd" id="1_j4126"]
|
||||
[ext_resource type="Texture2D" uid="uid://dwvy6crqhardn" path="res://Dropdown.png" id="2_hicj1"]
|
||||
|
||||
[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, 32)
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -16.0
|
||||
offset_right = 700.0
|
||||
offset_bottom = 16.0
|
||||
grow_vertical = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="Dropdown" type="Button" parent="HBoxContainer"]
|
||||
custom_minimum_size = Vector2(20, 0)
|
||||
layout_mode = 2
|
||||
tooltip_text = "delete song from hard-drive"
|
||||
focus_mode = 0
|
||||
icon = ExtResource("2_hicj1")
|
||||
flat = true
|
||||
icon_alignment = 1
|
||||
expand_icon = true
|
||||
|
||||
[node name="Songname" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
focus_mode = 0
|
||||
flat = true
|
||||
alignment = 0
|
||||
|
||||
[node name="PopupMenu" type="PopupMenu" parent="."]
|
||||
item_count = 1
|
||||
item_0/text = "delete"
|
||||
|
||||
[connection signal="pressed" from="HBoxContainer/Dropdown" to="." method="_on_dropdown_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.songidx = 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:
|
||||
|
||||
+20
-11
@@ -1,16 +1,25 @@
|
||||
extends Button
|
||||
|
||||
@onready var settings_popup: Popup = $"../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
|
||||
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_pressed() -> void:
|
||||
settings_popup.show()
|
||||
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()
|
||||
+80
-11
@@ -1,24 +1,28 @@
|
||||
extends Control
|
||||
@onready var Parent:MainScene = get_tree().root.get_child(2)
|
||||
@onready var animation_player := $AnimationPlayer as AnimationPlayer
|
||||
@onready var Parent:MainScene = get_tree().root.get_child(3)
|
||||
@onready var version: Label = $"../Version"
|
||||
|
||||
@onready var update_button := $Update as Button
|
||||
@onready var http_request := $HTTPRequest as HTTPRequest
|
||||
@onready var download_request: HTTPRequest = $DownloadRequest
|
||||
@onready var link_button: Button = $ColorRect/LinkButton
|
||||
@onready var update_available_text: Label = $ColorRect/UpdateAvailableText
|
||||
@onready var updating_notification: Control = $"../UpdatingNotification"
|
||||
@onready var errorLabel: Label = $"../UpdatingNotification/Error"
|
||||
@onready var updating_bg: ColorRect = $"../UpdatingBG"
|
||||
@onready var paused_indicator: TextureRect = $"../PausedIndicator"
|
||||
@onready var patchnotes: RichTextLabel = $ColorRect/Patchnotes
|
||||
|
||||
@export var errorColor:Color
|
||||
|
||||
var CheckForUpdates:bool = true
|
||||
|
||||
var updateLink:String
|
||||
|
||||
# Only update once every UPDATE_THROTTLE seconds at most
|
||||
# The GitHub releases API only allows 60 unauthenticated requests per hour,
|
||||
# so this value should be kept relatively high
|
||||
const UPDATE_THROTTLE = 600
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
|
||||
hide()
|
||||
if CheckForUpdates:
|
||||
check_for_updates()
|
||||
|
||||
@@ -31,6 +35,7 @@ func check_for_updates() -> void:
|
||||
|
||||
if error != OK:
|
||||
push_error("! a client error occurred")
|
||||
errorLabel.text = "a client error occurred"
|
||||
|
||||
func _on_http_request_completed(result: int, _response_code: int, _headers: PackedStringArray, body: PackedByteArray) -> void:
|
||||
if result != HTTPRequest.RESULT_SUCCESS:
|
||||
@@ -42,13 +47,77 @@ 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:
|
||||
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"]
|
||||
if result2.has("body"):
|
||||
patchnotes.text = str(result2["body"])
|
||||
|
||||
func _on_close_buen_pressed() -> void:
|
||||
hide()
|
||||
|
||||
|
||||
func _on_link_button_pressed() -> void:
|
||||
OS.shell_open(updateLink)
|
||||
link_button.disabled = true
|
||||
link_button.text = "Updating..."
|
||||
updating_notification.show()
|
||||
updating_bg.show()
|
||||
paused_indicator.hide()
|
||||
var exepath:PackedStringArray = OS.get_executable_path().split("/")
|
||||
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":
|
||||
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))
|
||||
errorLabel.text = "DOWNLOAD FAILED ERROR CODE: " + str(error)
|
||||
errorLabel.label_settings.font_color = errorColor
|
||||
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:
|
||||
if result != HTTPRequest.RESULT_SUCCESS:
|
||||
print("! Something went wrong server side: " + str(result))
|
||||
errorLabel.text = "DOWNLOAD FAILED ERROR CODE: " + str(result)
|
||||
errorLabel.label_settings.font_color = errorColor
|
||||
return
|
||||
else:
|
||||
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("Linux/","").replace("Windows/","").replace("Android/","")
|
||||
print("FILE: " + actualfile)
|
||||
var FileAcess:FileAccess = FileAccess.open(GetLocalPath() + actualfile,FileAccess.WRITE_READ)
|
||||
|
||||
if FileAcess != null:
|
||||
var downloadedfile = unzipper.read_file(file)
|
||||
FileAcess.store_buffer(downloadedfile)
|
||||
print("FOUND FILE: " + GetLocalPath()+file)
|
||||
#FileAcess.store_string()
|
||||
unzipper.close()
|
||||
OS.shell_open(OS.get_executable_path())
|
||||
get_tree().root.close_requested.emit()
|
||||
get_tree().root.queue_free()
|
||||
|
||||
func GetLocalPath() -> String:
|
||||
var exepath:PackedStringArray = OS.get_executable_path().split("/")
|
||||
var path:String
|
||||
for sting in (exepath.size()-1):
|
||||
path += exepath[sting] + "/"
|
||||
return path
|
||||
|
||||
+24
-23
@@ -11,26 +11,27 @@ func _ready() -> void:
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
var timeInHours = Time.get_datetime_dict_from_system()["hour"]
|
||||
if timeInHours < 6:
|
||||
currentBG = 3
|
||||
elif timeInHours >= 6 and timeInHours <= 9:
|
||||
currentBG = 2
|
||||
elif timeInHours >= 9 and timeInHours <= 17:
|
||||
currentBG = 1
|
||||
elif timeInHours >= 17 and timeInHours <= 21:
|
||||
currentBG = 2
|
||||
elif timeInHours > 21:
|
||||
currentBG = 3
|
||||
if currentBG == 1:
|
||||
Daytime.show()
|
||||
Nighttime.hide()
|
||||
Evening.hide()
|
||||
elif currentBG == 2:
|
||||
Daytime.hide()
|
||||
Nighttime.hide()
|
||||
Evening.show()
|
||||
elif currentBG == 3:
|
||||
Daytime.hide()
|
||||
Nighttime.show()
|
||||
Evening.hide()
|
||||
if true != true:
|
||||
var timeInHours = Time.get_datetime_dict_from_system()["hour"]
|
||||
if timeInHours < 6:
|
||||
currentBG = 3
|
||||
elif timeInHours >= 6 and timeInHours <= 9:
|
||||
currentBG = 2
|
||||
elif timeInHours >= 9 and timeInHours <= 17:
|
||||
currentBG = 1
|
||||
elif timeInHours >= 17 and timeInHours <= 21:
|
||||
currentBG = 2
|
||||
elif timeInHours > 21:
|
||||
currentBG = 3
|
||||
if currentBG == 1:
|
||||
Daytime.show()
|
||||
Nighttime.hide()
|
||||
Evening.hide()
|
||||
elif currentBG == 2:
|
||||
Daytime.hide()
|
||||
Nighttime.hide()
|
||||
Evening.show()
|
||||
elif currentBG == 3:
|
||||
Daytime.hide()
|
||||
Nighttime.show()
|
||||
Evening.hide()
|
||||
|
||||
+7
-7
@@ -5,19 +5,19 @@ extends Button
|
||||
@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"
|
||||
|
||||
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:
|
||||
YtDlp.setup_completed.connect(YTSetupCompleted)
|
||||
yt_download.pressed.connect(DownloadYTVidFromLink)
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
if currentlyExtending:
|
||||
@@ -38,18 +38,17 @@ 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():
|
||||
if yt_link.text.is_empty():
|
||||
OS.alert("please gimme a link")
|
||||
return
|
||||
if "&list=" in yt_link.text:
|
||||
if "list=" in yt_link.text:
|
||||
Parent.playlist_or_song.show()
|
||||
Parent.playlist_or_song.confirmed.connect(DownloadPlaylistConf)
|
||||
Parent.playlist_or_song.canceled.connect(DownloadSingleSongConf)
|
||||
@@ -63,7 +62,8 @@ func DownloadYTVidFromLink():
|
||||
yt_link.clear()
|
||||
download.set_destination(owner.PlaylistsLocation[owner.CurrentPlaylist])
|
||||
print(owner.PlaylistsLocation[owner.CurrentPlaylist])
|
||||
download.convert_to_audio(YtDlp.Audio.MP3)
|
||||
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