diff --git a/godot/Components/BundlePost.gd b/godot/Components/BundlePost.gd new file mode 100644 index 0000000..466a4cd --- /dev/null +++ b/godot/Components/BundlePost.gd @@ -0,0 +1,91 @@ +extends Node + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" +var SongTitle = "" +var SongArtist = "" +var CompletionType +var Tags = "" +var OriginalURL = "" +var PartsURLs = [] +var PartsVolumes = [] +var PartsDelays = [] +var PartsOthers = [] +var BackVolume = 0 + +enum CompletionTypeOptions { + OpenSeed, + SoloCompletion, + DuetCompletion, + AllHarmony, + AllMelody +} + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +func setSongTitle(value): + SongTitle = value + +func setSongArtist(value): + SongArtist = value + +func setCompletionType(value): + CompletionType = value + +func setTags(value): + Tags = value + +func setOriginalURL(value): + OriginalURL = value + +func setPartsURLs(value): + PartsURLs = value + +func setPartsVolumes(value): + PartsVolumes = value + +func setPartsDelays(value): + PartsDelays = value + +func setBackVolume(value): + BackVolume = value + +func getFinalText(): + var completiontext = "" + var partof = "" + match CompletionType : + CompletionTypeOptions.OpenSeed: + completiontext = " and it's not complete until you sing the rest of it with me!" + partof = "part of " + CompletionTypeOptions.SoloCompletion: + completiontext = " let me know what you think!" + CompletionTypeOptions.DuetCompletion: + completiontext = " with "+PartsOthers+" and it sounds great, don't you think!?" + CompletionTypeOptions.AllHarmony: + partof = "only the harmonies of " + completiontext = " and would love someone to put the melody on top!" + CompletionTypeOptions.AllMelody: + partof = "only the melody of " + completiontext = " and would love someone to put some harmonies underneath!" + var partstext = "The audio track are attached" + if len(PartsURLs) > 0: + partstext = "The audio track urls are :" + for parturl in PartsURLs: + partstext += " "+parturl + partstext += ".\n" + var volumetext = "Backing volume recommendation: "+String(BackVolume)+"db. Parts volume recommendations: " + for partvolume in PartsVolumes: + volumetext += String(partvolume)+"db, " + volumetext += ".\n" + var partdelaytext = "Audio delay recommendations: " + for partDelay in PartsDelays: + partdelaytext += String(partDelay)+"s, " + return "Hey, I sang "+partof+SongTitle+" by "+SongArtist+" at "+OriginalURL+completiontext+" "+\ + "\nWith #ASingCrow, you can join it and other songs.\n"+partstext+volumetext+partdelaytext+" "+Tags + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass diff --git a/godot/Components/MastoAuthCode.gd b/godot/Components/MastoAuthCode.gd new file mode 100644 index 0000000..cbfb5d8 --- /dev/null +++ b/godot/Components/MastoAuthCode.gd @@ -0,0 +1,25 @@ +extends Control + +signal on_cancel +signal on_authorize(code) + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass + + +func _on_Button2_pressed(): + emit_signal("on_cancel") + +func _on_Button_pressed(): + emit_signal("on_authorize",$VBoxContainer/LineEdit.text) diff --git a/godot/Components/MastoAuthCode.tscn b/godot/Components/MastoAuthCode.tscn new file mode 100644 index 0000000..668cb5e --- /dev/null +++ b/godot/Components/MastoAuthCode.tscn @@ -0,0 +1,55 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://Components/MastoAuthCode.gd" type="Script" id=1] + +[node name="Control" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Button2" type="Button" parent="."] +anchor_left = 1.0 +anchor_right = 1.0 +margin_left = -71.0 +margin_top = 10.0 +margin_right = -17.0 +margin_bottom = 30.0 +text = "Cancel" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +margin_top = -33.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Label" type="Label" parent="VBoxContainer"] +margin_right = 1024.0 +margin_bottom = 14.0 +text = "Launched an authorisation request in your system's browser, please note down the code and enter it in the box below to continue" +align = 1 +valign = 1 + +[node name="LineEdit" type="LineEdit" parent="VBoxContainer"] +margin_top = 18.0 +margin_right = 1024.0 +margin_bottom = 42.0 + +[node name="Button" type="Button" parent="VBoxContainer"] +margin_top = 46.0 +margin_right = 1024.0 +margin_bottom = 66.0 +text = "Authorize" +__meta__ = { +"_edit_use_anchors_": false +} +[connection signal="pressed" from="Button2" to="." method="_on_Button2_pressed"] +[connection signal="pressed" from="VBoxContainer/Button" to="." method="_on_Button_pressed"] diff --git a/godot/Components/MastoConfig.gd b/godot/Components/MastoConfig.gd new file mode 100644 index 0000000..67e2bfb --- /dev/null +++ b/godot/Components/MastoConfig.gd @@ -0,0 +1,127 @@ +extends Control + +var ca_request +var auth_request +var toot_request + +# Called when the node enters the scene tree for the first time. +func _ready(): + Globals.loadConfig() + if len(Globals.providers.mastodon) > 0: + if Globals.providers.mastodon[0].has("baseURL"): + print("Setting base url") + $VBoxContainer/HBoxContainer/TextEdit.text = Globals.providers.mastodon[0].baseURL + if Globals.providers.mastodon[0].has("oauth_token"): + print("Already Registered") + $VBoxContainer/AuthUser.disabled = true + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass + +func _on_Login_pressed(): + if len(Globals.providers.mastodon) == 0: + Globals.providers.mastodon = {} + if !Globals.providers.mastodon[0].has("app_client_id"): + register_app() + if !Globals.providers.mastodon[0].has("oauth_token"): + auth_user() + +func register_app(): + var headers = ["Content-Type: application/json"] + var data = { + "client_name": "ASingCrow", + "redirect_uris": "urn:ietf:wg:oauth:2.0:oob", + "scopes": "read write follow push", + "website": "https://asingcrow.martyn.berlin" + } + ca_request = HTTPRequest.new() + add_child(ca_request) + ca_request.connect("request_completed",self,"_on_app_created") + ca_request.request("https://toot.martyn.berlin/api/v1/apps",headers,true,HTTPClient.METHOD_POST,JSON.print(data)) + +func _on_app_created(result, response_code, headers, body): + print("Response...") + if response_code != 200: + print("PANIC! got "+String(response_code)) + print(body.get_string_from_utf8) + return + var response = parse_json(body.get_string_from_utf8()) + var dict = { + "app_client_id": response.client_id, + "app_client_secret": response.client_secret } + Globals.providers.mastodon.append(dict) + Globals.saveConfig() + remove_child(ca_request) + +func _on_token_requested(result, response_code, headers, body): + print("Response...") + if response_code != 200: + print("PANIC! got "+String(response_code)) + print(body.get_string_from_utf8()) + return + var response = parse_json(body.get_string_from_utf8()) + Globals.providers.mastodon[0].oauth_token = response.access_token + Globals.saveConfig() + remove_child(auth_request) + pass + +func _on_Button3_pressed(): + var client = Globals.providers.mastodon + var headers = ["Content-Type: application/json", + "Authorization: Bearer "+client[0].oauth_token] + var data = { + "status": "Test toot", + } + toot_request = HTTPRequest.new() + add_child(toot_request) + toot_request.connect("request_completed",self,"_on_tooted") + toot_request.request("https://toot.martyn.berlin/api/v1/statuses",headers,true,HTTPClient.METHOD_POST,JSON.print(data)) + print("Headers: ") + print(headers) + print("Sending...") + print(JSON.print(data)) + +func _on_tooted(result, response_code, headers, body): + if response_code != 200: + print("PANIC! got "+String(response_code)) + print(body.get_string_from_utf8()) + return + var response = parse_json(body.get_string_from_utf8()) + print("Tooted successfully!") + print(body) + remove_child(toot_request) + +func auth_user(): + var client = Globals.providers.mastodon + OS.shell_open("https://toot.martyn.berlin/oauth/authorize?client_id="+client[0].app_client_id+"&scope=read+write+follow+push&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code") + $VBoxContainer/CodeEntry.visible=true + + +func _on_CodeEntry_on_authorize(code): + var client = Globals.providers.mastodon + var headers = ["Content-Type: application/json"] + var data = { + "client_id": client[0].app_client_id, + "client_secret": client[0].app_client_secret, + "redirect_uri": "urn:ietf:wg:oauth:2.0:oob", + "grant_type": "authorization_code", + "scope": "read write follow push", + "code": code + } + auth_request = HTTPRequest.new() + add_child(auth_request) + auth_request.connect("request_completed",self,"_on_token_requested") + auth_request.request("https://toot.martyn.berlin/oauth/token",headers,true,HTTPClient.METHOD_POST,JSON.print(data)) + pass # Replace with function body. + + +func _on_TextEdit_text_changed(new_text): + var dict + if len(Globals.providers.mastodon) > 0: + dict = Globals.providers.mastodon[0] + else: + dict = {} + Globals.providers.mastodon[0] = dict + Globals.providers.mastodon[0].baseURL = $VBoxContainer/HBoxContainer/TextEdit.text + Globals.saveConfig() diff --git a/godot/Components/MastoConfig.tscn b/godot/Components/MastoConfig.tscn new file mode 100644 index 0000000..195875e --- /dev/null +++ b/godot/Components/MastoConfig.tscn @@ -0,0 +1,110 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://Components/MastoConfig.gd" type="Script" id=1] +[ext_resource path="res://Components/MastoAuthCode.tscn" type="PackedScene" id=2] + +[node name="MastoConfig" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 5.0 +margin_top = 5.0 +margin_right = -5.0 +margin_bottom = -5.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_right = 1014.0 +margin_bottom = 24.0 + +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] +margin_top = 5.0 +margin_right = 328.0 +margin_bottom = 19.0 +text = "Mastodon root url (e.g. https://toot.martyn.berlin) : " + +[node name="TextEdit" type="LineEdit" parent="VBoxContainer/HBoxContainer"] +margin_left = 332.0 +margin_right = 1014.0 +margin_bottom = 24.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="AuthUser" type="Button" parent="VBoxContainer"] +margin_top = 28.0 +margin_right = 1014.0 +margin_bottom = 48.0 +text = "Authenticate as user..." + +[node name="CodeEntry" parent="VBoxContainer" instance=ExtResource( 2 )] +visible = false +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 100.0 +margin_right = 1014.0 +margin_bottom = 400.0 +rect_min_size = Vector2( 0, 300 ) + +[node name="TestToot" type="Button" parent="VBoxContainer"] +margin_top = 52.0 +margin_right = 1014.0 +margin_bottom = 72.0 +text = "Test Post" + +[node name="Panel" type="Panel" parent="VBoxContainer"] +margin_top = 76.0 +margin_right = 1014.0 +margin_bottom = 76.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Label" type="Label" parent="VBoxContainer/Panel"] +margin_right = 122.0 +margin_bottom = 14.0 +text = "Mastodon settings:" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="GridContainer" type="GridContainer" parent="VBoxContainer/Panel"] +anchor_right = 1.0 +margin_top = 20.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="CheckBox" type="CheckBox" parent="VBoxContainer/Panel/GridContainer"] +margin_right = 741.0 +margin_bottom = 24.0 +text = "Attach Audio to Toot (Mastodon Admins may not like this, audio takes up a fair amount of space and bandwidth)" + +[node name="CheckBox2" type="CheckBox" parent="VBoxContainer/Panel/GridContainer"] +margin_top = 28.0 +margin_right = 741.0 +margin_bottom = 52.0 +text = "Send Audio to binary pastebin paste.c-net.org - again, might upset their admins..." + +[node name="Label" type="Label" parent="VBoxContainer/Panel/GridContainer"] +margin_top = 56.0 +margin_right = 741.0 +margin_bottom = 70.0 +text = "We'll add more options as time goes on." + +[node name="HTTPRequest" type="HTTPRequest" parent="."] +[connection signal="text_changed" from="VBoxContainer/HBoxContainer/TextEdit" to="." method="_on_TextEdit_text_changed"] +[connection signal="pressed" from="VBoxContainer/AuthUser" to="." method="_on_Login_pressed"] +[connection signal="on_authorize" from="VBoxContainer/CodeEntry" to="." method="_on_CodeEntry_on_authorize"] +[connection signal="pressed" from="VBoxContainer/TestToot" to="." method="_on_Button3_pressed"] diff --git a/godot/Components/PublishDetails.gd b/godot/Components/PublishDetails.gd new file mode 100644 index 0000000..3f5cda0 --- /dev/null +++ b/godot/Components/PublishDetails.gd @@ -0,0 +1,45 @@ +extends Control + + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass + + +func _on_any_text_changed(new_text): + BundlePost.setSongArtist($HBoxContainer/GridContainer/GridContainer/ArtistEdit.text) + BundlePost.setSongTitle($HBoxContainer/GridContainer/GridContainer/SongEdit.text) + match $HBoxContainer/GridContainer/GridContainer/CompletionDropdown.selected: + 0: + BundlePost.setCompletionType(BundlePost.CompletionTypeOptions.OpenSeed) + 1: + BundlePost.setCompletionType(BundlePost.CompletionTypeOptions.SoloCompletion) + 2: + BundlePost.setCompletionType(BundlePost.CompletionTypeOptions.DuetCompletion) + 3: + BundlePost.setCompletionType(BundlePost.CompletionTypeOptions.AllHarmony) + 4: + BundlePost.setCompletionType(BundlePost.CompletionTypeOptions.AllMelody) + BundlePost.setSongTitle($HBoxContainer/GridContainer/GridContainer/SongEdit.text) + BundlePost.setTags($HBoxContainer/GridContainer/GridContainer/TagsEdit.text) + $HBoxContainer/Panel/GridContainer/PostContent.text = BundlePost.getFinalText() + pass # Replace with function body. + + +func _on_Control_ready(): + $HBoxContainer/GridContainer/GridContainer/CompletionDropdown.add_item("Open Seed - part of a duet") + $HBoxContainer/GridContainer/GridContainer/CompletionDropdown.add_item("Solo Completion") + $HBoxContainer/GridContainer/GridContainer/CompletionDropdown.add_item("Duet Completion") + $HBoxContainer/GridContainer/GridContainer/CompletionDropdown.add_item("All Harmony Seed") + $HBoxContainer/GridContainer/GridContainer/CompletionDropdown.add_item("All Melody Seed") + pass # Replace with function body. diff --git a/godot/Components/PublishDetails.tscn b/godot/Components/PublishDetails.tscn new file mode 100644 index 0000000..556155a --- /dev/null +++ b/godot/Components/PublishDetails.tscn @@ -0,0 +1,115 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://Components/PublishDetails.gd" type="Script" id=1] + +[node name="Control" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="GridContainer" type="GridContainer" parent="HBoxContainer"] +margin_right = 510.0 +margin_bottom = 600.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="GridContainer" type="GridContainer" parent="HBoxContainer/GridContainer"] +margin_right = 510.0 +margin_bottom = 600.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +columns = 2 + +[node name="Label" type="Label" parent="HBoxContainer/GridContainer/GridContainer"] +margin_top = 5.0 +margin_right = 122.0 +margin_bottom = 19.0 +text = "Artist name : " + +[node name="ArtistEdit" type="LineEdit" parent="HBoxContainer/GridContainer/GridContainer"] +margin_left = 126.0 +margin_right = 184.0 +margin_bottom = 24.0 + +[node name="Label2" type="Label" parent="HBoxContainer/GridContainer/GridContainer"] +margin_top = 33.0 +margin_right = 122.0 +margin_bottom = 47.0 +text = "Song name : " + +[node name="SongEdit" type="LineEdit" parent="HBoxContainer/GridContainer/GridContainer"] +margin_left = 126.0 +margin_top = 28.0 +margin_right = 184.0 +margin_bottom = 52.0 + +[node name="Label3" type="Label" parent="HBoxContainer/GridContainer/GridContainer"] +margin_top = 59.0 +margin_right = 122.0 +margin_bottom = 73.0 +text = "Completion type : " + +[node name="CompletionDropdown" type="OptionButton" parent="HBoxContainer/GridContainer/GridContainer"] +margin_left = 126.0 +margin_top = 56.0 +margin_right = 184.0 +margin_bottom = 76.0 + +[node name="Label4" type="Label" parent="HBoxContainer/GridContainer/GridContainer"] +margin_top = 85.0 +margin_right = 122.0 +margin_bottom = 99.0 +text = "Extra tags : " + +[node name="TagsEdit" type="LineEdit" parent="HBoxContainer/GridContainer/GridContainer"] +margin_left = 126.0 +margin_top = 80.0 +margin_right = 184.0 +margin_bottom = 104.0 + +[node name="Panel" type="Panel" parent="HBoxContainer"] +margin_left = 514.0 +margin_right = 1024.0 +margin_bottom = 600.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="GridContainer" type="GridContainer" parent="HBoxContainer/Panel"] +anchor_right = 1.0 +anchor_bottom = 1.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Label" type="Label" parent="HBoxContainer/Panel/GridContainer"] +margin_right = 510.0 +margin_bottom = 14.0 +size_flags_horizontal = 3 +text = "Post looks like :" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="PostContent" type="Label" parent="HBoxContainer/Panel/GridContainer"] +margin_top = 18.0 +margin_right = 510.0 +margin_bottom = 32.0 +autowrap = true +__meta__ = { +"_edit_use_anchors_": false +} +[connection signal="ready" from="." to="." method="_on_Control_ready"] +[connection signal="text_changed" from="HBoxContainer/GridContainer/GridContainer/ArtistEdit" to="." method="_on_any_text_changed"] +[connection signal="text_changed" from="HBoxContainer/GridContainer/GridContainer/SongEdit" to="." method="_on_any_text_changed"] +[connection signal="item_selected" from="HBoxContainer/GridContainer/GridContainer/CompletionDropdown" to="." method="_on_any_text_changed"] +[connection signal="text_changed" from="HBoxContainer/GridContainer/GridContainer/TagsEdit" to="." method="_on_any_text_changed"] diff --git a/godot/GlobalSettings.tscn b/godot/GlobalSettings.tscn index 57e5568..0322085 100644 --- a/godot/GlobalSettings.tscn +++ b/godot/GlobalSettings.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://main_menu.gd" type="Script" id=1] [ext_resource path="res://GlobalSettings.gd" type="Script" id=2] [ext_resource path="res://Components/MicMeterHoriz.tscn" type="PackedScene" id=3] [ext_resource path="res://UI/src/165316__ani-music__synthesizer-echo-plinks-2.wav" type="AudioStream" id=4] +[ext_resource path="res://Components/MastoConfig.tscn" type="PackedScene" id=5] [node name="Control" type="Control"] anchor_right = 1.0 @@ -194,6 +195,33 @@ margin_top = 32.0 margin_right = -4.0 margin_bottom = -4.0 +[node name="Button" type="Button" parent="MarginContainer/VBoxContainer/TabContainer/Providers"] +anchor_left = 1.0 +anchor_right = 1.0 +margin_left = -111.0 +margin_bottom = 5.0 +text = "Add Provider" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="GridContainer" type="GridContainer" parent="MarginContainer/VBoxContainer/TabContainer/Providers"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = 28.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="MastoConfig" parent="MarginContainer/VBoxContainer/TabContainer/Providers/GridContainer" instance=ExtResource( 5 )] +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 1006.0 +size_flags_horizontal = 3 +size_flags_vertical = 0 + [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] stream = ExtResource( 4 ) [connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer2/Quit" to="." method="_on_Quit_pressed"] diff --git a/godot/Globals.gd b/godot/Globals.gd index 8154373..c31662b 100644 --- a/godot/Globals.gd +++ b/godot/Globals.gd @@ -9,6 +9,7 @@ var config = ConfigFile.new() # Declare member variables here. Examples: # var a = 2 # var b = "text" +var providers = { "mastodon" : []} # Called when the node enters the scene tree for the first time. @@ -51,6 +52,10 @@ func loadConfig(): if not config.has_section_key("audio","audio_delay_seconds"): config.set_value("audio","audio_delay_seconds",0.0) audio_delay_seconds = config.get_value("audio","audio_delay_seconds",0.0) + + if not config.has_section_key("providers","mastodon"): + config.set_value("providers","mastodon",[]) + providers.mastodon = config.get_value("providers", "mastodon", []) config.save("user://settings.cfg") config_loaded = true @@ -59,5 +64,6 @@ func saveConfig(): config.set_value("audio","playback_device",playback_device) config.set_value("audio","capture_device",capture_device) config.set_value("audio","audio_delay_seconds",audio_delay_seconds) + config.set_value("providers","mastodon",providers.mastodon) config.save("user://settings.cfg") diff --git a/godot/PlayVideoRecordAudio.gd b/godot/PlayVideoRecordAudio.gd index 1d46fc8..91d8ea5 100644 --- a/godot/PlayVideoRecordAudio.gd +++ b/godot/PlayVideoRecordAudio.gd @@ -46,7 +46,9 @@ func _ready(): spectrum_play = AudioServer.get_bus_effect_instance(0,0) spectrum_record = AudioServer.get_bus_effect_instance(1,1) position_changing_by_code = false - $MarginContainer/VBoxContainer/HBoxContainer4/SaveMode.add_item("Save separate streams") + $MarginContainer/VBoxContainer/HBoxContainer4/SaveButton.get_popup().add_item("Save separate streams") + $MarginContainer/VBoxContainer/HBoxContainer4/SaveButton.get_popup().add_item("Save mixed down") + $MarginContainer/VBoxContainer/HBoxContainer4/SaveButton.get_popup().add_item("Publish") # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): diff --git a/godot/PlayVideoRecordAudio.tscn b/godot/PlayVideoRecordAudio.tscn index 24839d4..4553ff5 100644 --- a/godot/PlayVideoRecordAudio.tscn +++ b/godot/PlayVideoRecordAudio.tscn @@ -226,16 +226,10 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="SaveMode" type="OptionButton" parent="MarginContainer/VBoxContainer/HBoxContainer4"] -margin_right = 968.0 +[node name="SaveButton" type="MenuButton" parent="MarginContainer/VBoxContainer/HBoxContainer4"] +margin_right = 109.0 margin_bottom = 20.0 -size_flags_horizontal = 3 - -[node name="SaveButton" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer4"] -margin_left = 972.0 -margin_right = 1013.0 -margin_bottom = 20.0 -text = "Save" +text = "Save or Publish" [node name="AudioStreamRecorder" type="AudioStreamPlayer" parent="."] stream = SubResource( 1 ) diff --git a/godot/mastotest.gd b/godot/mastotest.gd new file mode 100644 index 0000000..8edc2cc --- /dev/null +++ b/godot/mastotest.gd @@ -0,0 +1,29 @@ +extends Control + + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + + +# Called when the node enters the scene tree for the first time. +func _ready(): + $HTTPRequest.request("http://toot.martyn.berlin/api/v1/timelines/tag/cat") + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass + + +func _on_HTTPRequest_request_completed(result, response_code, headers, body): + for slice in $GridContainer.get_children(): + slice.remove_and_skip() + var json = JSON.parse(body.get_string_from_utf8()) + if json.result != null: + for toot in json.result: + var tootitem = Label.new() + tootitem.text = toot.account.display_name+": "+toot.content + $GridContainer.add_child(tootitem) + pass # Replace with function body. diff --git a/godot/mastotest.tscn b/godot/mastotest.tscn new file mode 100644 index 0000000..6dc9b12 --- /dev/null +++ b/godot/mastotest.tscn @@ -0,0 +1,25 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://mastotest.gd" type="Script" id=1] + +[node name="Control" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="HTTPRequest" type="HTTPRequest" parent="."] + +[node name="GridContainer" type="GridContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 5.0 +margin_top = 5.0 +margin_right = -5.0 +margin_bottom = -5.0 +__meta__ = { +"_edit_use_anchors_": false +} +[connection signal="request_completed" from="HTTPRequest" to="." method="_on_HTTPRequest_request_completed"] diff --git a/godot/project.godot b/godot/project.godot index 32183c3..9924c84 100644 --- a/godot/project.godot +++ b/godot/project.godot @@ -27,6 +27,7 @@ enable_audio_input=true [autoload] Globals="*res://Globals.tscn" +BundlePost="*res://Components/BundlePost.gd" [rendering]