Add permalink_short textbox
Browse files
app.py
CHANGED
@@ -157,12 +157,11 @@ def load_data(request: gr.Request, model_3d, image_slider):
|
|
157 |
query_params = _resolve_short_id_to_query_params(query_params)
|
158 |
|
159 |
# Extract URLs from query parameters (which may have been updated)
|
|
|
160 |
model_url = query_params.get("3d", None)
|
161 |
hm_url = query_params.get("hm", None)
|
162 |
img_url = query_params.get("image", None)
|
163 |
|
164 |
-
# Check if any relevant parameters are set to decide if we should clear query_params for permalink generation
|
165 |
-
# This logic ensures that if only 'sid' was passed and it resolved, query_params will now contain 3d, hm, image.
|
166 |
# If 'sid' was passed but didn't resolve, or no params were passed, then model_url, hm_url, img_url will be None.
|
167 |
has_loadable_params = bool(model_url or hm_url or img_url)
|
168 |
|
@@ -199,17 +198,25 @@ def load_data(request: gr.Request, model_3d, image_slider):
|
|
199 |
|
200 |
# If any loadable query parameters were effectively present (either directly or via sid), generate a permalink.
|
201 |
permalink = ""
|
|
|
202 |
if has_loadable_params:
|
|
|
203 |
try:
|
204 |
permalink_model_url = query_params.get("3d", model_url)
|
205 |
permalink_hm_url = query_params.get("hm", hm_url if len(slider_images) > 1 and hm_url else (slider_images[1] if len(slider_images) > 1 else None) )
|
206 |
permalink_img_url = query_params.get("image", img_url if slider_images and img_url else (slider_images[0] if slider_images else None) )
|
207 |
-
|
208 |
permalink = storage.generate_permalink_from_urls(permalink_model_url, permalink_hm_url, permalink_img_url)
|
|
|
|
|
|
|
|
|
|
|
209 |
except Exception as e:
|
210 |
print(f"Error generating permalink: {e}")
|
|
|
|
|
211 |
|
212 |
-
return model_url, slider_images, permalink
|
213 |
|
214 |
def process_upload(files, current_model, current_images):
|
215 |
"""
|
@@ -368,16 +375,25 @@ with gr.Blocks(css_paths="style_20250503.css", title="3D viewer", theme='Surn/be
|
|
368 |
key="permalink",
|
369 |
elem_classes="solid centered",
|
370 |
max_lines=5,
|
371 |
-
lines=
|
372 |
)
|
373 |
gr.Markdown("### Copy the permalink to share your model and images.", elem_classes="solid centered",)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
374 |
with gr.Row():
|
375 |
gr.HTML(value=getVersions(), visible=True, elem_id="versions")
|
376 |
|
377 |
viewer3d.load(
|
378 |
load_data,
|
379 |
inputs=[model_3d, image_slider],
|
380 |
-
outputs=[model_3d, image_slider, permalink],
|
381 |
scroll_to_output=True
|
382 |
).then(
|
383 |
lambda link: (gr.update(visible=True), gr.update(interactive=False))
|
|
|
157 |
query_params = _resolve_short_id_to_query_params(query_params)
|
158 |
|
159 |
# Extract URLs from query parameters (which may have been updated)
|
160 |
+
short_id = query_params.get("sid", None)
|
161 |
model_url = query_params.get("3d", None)
|
162 |
hm_url = query_params.get("hm", None)
|
163 |
img_url = query_params.get("image", None)
|
164 |
|
|
|
|
|
165 |
# If 'sid' was passed but didn't resolve, or no params were passed, then model_url, hm_url, img_url will be None.
|
166 |
has_loadable_params = bool(model_url or hm_url or img_url)
|
167 |
|
|
|
198 |
|
199 |
# If any loadable query parameters were effectively present (either directly or via sid), generate a permalink.
|
200 |
permalink = ""
|
201 |
+
permalink_short = ""
|
202 |
if has_loadable_params:
|
203 |
+
# Generate permalink using the processed URLs.
|
204 |
try:
|
205 |
permalink_model_url = query_params.get("3d", model_url)
|
206 |
permalink_hm_url = query_params.get("hm", hm_url if len(slider_images) > 1 and hm_url else (slider_images[1] if len(slider_images) > 1 else None) )
|
207 |
permalink_img_url = query_params.get("image", img_url if slider_images and img_url else (slider_images[0] if slider_images else None) )
|
|
|
208 |
permalink = storage.generate_permalink_from_urls(permalink_model_url, permalink_hm_url, permalink_img_url)
|
209 |
+
if not short_id:
|
210 |
+
# If no short ID was provided, generate a new one.
|
211 |
+
result, short_id = storage.gen_full_url(full_url=permalink, repo_id=constants.HF_REPO_ID, json_file=constants.SHORTENER_JSON_FILE)
|
212 |
+
permalink_short = f"{constants.APP_BASE_URL}/?sid={short_id}"
|
213 |
+
print(f"Generated permalink: {result} (short ID: {short_id})")
|
214 |
except Exception as e:
|
215 |
print(f"Error generating permalink: {e}")
|
216 |
+
|
217 |
+
|
218 |
|
219 |
+
return model_url, slider_images, permalink, permalink_short
|
220 |
|
221 |
def process_upload(files, current_model, current_images):
|
222 |
"""
|
|
|
375 |
key="permalink",
|
376 |
elem_classes="solid centered",
|
377 |
max_lines=5,
|
378 |
+
lines=4
|
379 |
)
|
380 |
gr.Markdown("### Copy the permalink to share your model and images.", elem_classes="solid centered",)
|
381 |
+
permalink_short = gr.Textbox(
|
382 |
+
show_copy_button=True,
|
383 |
+
label="Shortened Permalink",
|
384 |
+
elem_id="short_permalink",
|
385 |
+
key="permalink",
|
386 |
+
elem_classes="solid centered",
|
387 |
+
max_lines=5,
|
388 |
+
lines=3
|
389 |
+
)
|
390 |
with gr.Row():
|
391 |
gr.HTML(value=getVersions(), visible=True, elem_id="versions")
|
392 |
|
393 |
viewer3d.load(
|
394 |
load_data,
|
395 |
inputs=[model_3d, image_slider],
|
396 |
+
outputs=[model_3d, image_slider, permalink, permalink_short],
|
397 |
scroll_to_output=True
|
398 |
).then(
|
399 |
lambda link: (gr.update(visible=True), gr.update(interactive=False))
|