cw-generator/addons/SharePlugin/Share.gd

81 lines
2.3 KiB
GDScript

#
# © 2024-present https://github.com/cengiz-pz
#
@tool
class_name Share
extends Node
const PLUGIN_SINGLETON_NAME: String = "SharePlugin"
const MIME_TYPE_TEXT: String = "text/plain"
const MIME_TYPE_IMAGE: String = "image/*"
@onready var _temp_image_path: String = OS.get_user_data_dir() + "/tmp_share_img_path.png"
var _plugin_singleton: Object
func _ready() -> void:
if OS.get_name() == "Android":
_update_plugin()
func _notification(a_what: int) -> void:
if a_what == NOTIFICATION_APPLICATION_RESUMED:
_update_plugin()
func _update_plugin() -> void:
if _plugin_singleton == null:
if Engine.has_singleton(PLUGIN_SINGLETON_NAME):
_plugin_singleton = Engine.get_singleton(PLUGIN_SINGLETON_NAME)
else:
printerr("%s singleton not found!" % PLUGIN_SINGLETON_NAME)
func share_text(a_title: String, a_subject: String, a_content: String) -> void:
if _plugin_singleton != null:
_plugin_singleton.share(
SharedData.new()
.set_title(a_title)
.set_subject(a_subject)
.set_content(a_content)
.set_mime_type(MIME_TYPE_TEXT)
.get_raw_data()
)
else:
printerr("%s plugin not initialized" % PLUGIN_SINGLETON_NAME)
func share_image(a_path: String, a_title: String, a_subject: String, a_content: String) -> void:
share_file(a_path, MIME_TYPE_IMAGE, a_title, a_subject, a_content)
func share_texture(a_texture: Texture2D, a_title: String, a_subject: String, a_content: String) -> void:
var __image: Image = a_texture.get_image()
__image.save_png(_temp_image_path)
share_file(_temp_image_path, MIME_TYPE_IMAGE, a_title, a_subject, a_content)
func share_viewport(a_viewport: Viewport, a_title: String, a_subject: String, a_content: String, a_flip_y: bool = false) -> void:
var __image: Image = a_viewport.get_texture().get_image()
if a_flip_y:
__image.flip_y()
__image.save_png(_temp_image_path)
share_file(_temp_image_path, MIME_TYPE_IMAGE, a_title, a_subject, a_content)
func share_file(a_path: String, a_mime_type: String, a_title: String, a_subject: String, a_content: String) -> void:
if _plugin_singleton != null:
_plugin_singleton.share(
SharedData.new()
.set_title(a_title)
.set_subject(a_subject)
.set_content(a_content)
.set_mime_type(a_mime_type)
.set_file_path(a_path)
.get_raw_data()
)
else:
printerr("%s plugin not initialized" % PLUGIN_SINGLETON_NAME)