Add show_download_directory, and a few ui fixes.
This commit is contained in:
		
							parent
							
								
									35353a1d83
								
							
						
					
					
						commit
						cf01ca24ff
					
				
					 3 changed files with 61 additions and 15 deletions
				
			
		|  | @ -1,5 +1,7 @@ | ||||||
| import flask; from flask import request | import flask; from flask import request | ||||||
| import itertools | import itertools | ||||||
|  | import os | ||||||
|  | import subprocess | ||||||
| import time | import time | ||||||
| 
 | 
 | ||||||
| from voussoirkit import flasktools | from voussoirkit import flasktools | ||||||
|  | @ -217,3 +219,28 @@ def post_set_queuefile_extension(channel_id): | ||||||
| 
 | 
 | ||||||
|     response = {'id': channel.id, 'queuefile_extension': channel.queuefile_extension} |     response = {'id': channel.id, 'queuefile_extension': channel.queuefile_extension} | ||||||
|     return flasktools.json_response(response) |     return flasktools.json_response(response) | ||||||
|  | 
 | ||||||
|  | @site.route('/channel/<channel_id>/show_download_directory', methods=['POST']) | ||||||
|  | def post_show_download_directory(channel_id): | ||||||
|  |     if not request.is_localhost: | ||||||
|  |         flask.abort(403) | ||||||
|  | 
 | ||||||
|  |     channel = common.ycdldb.get_channel(channel_id) | ||||||
|  |     if channel.download_directory: | ||||||
|  |         abspath = channel.download_directory.absolute_path | ||||||
|  |     else: | ||||||
|  |         abspath = common.ycdldb.config['download_directory'] | ||||||
|  | 
 | ||||||
|  |     if not os.path.exists(abspath): | ||||||
|  |         return flask.abort(400) | ||||||
|  | 
 | ||||||
|  |     if os.name == 'nt': | ||||||
|  |         command = f'explorer.exe "{abspath}"' | ||||||
|  |         subprocess.Popen(command, shell=True) | ||||||
|  |         return flasktools.json_response({}) | ||||||
|  |     else: | ||||||
|  |         command = ['xdg-open', abspath] | ||||||
|  |         subprocess.Popen(command, shell=True) | ||||||
|  |         return flasktools.json_response({}) | ||||||
|  | 
 | ||||||
|  |     flask.abort(501) | ||||||
|  | @ -75,6 +75,13 @@ function set_queuefile_extension(channel_id, extension, callback) | ||||||
|     return common.post(url, data, callback); |     return common.post(url, data, callback); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | api.channels.show_download_directory = | ||||||
|  | function show_download_directory(channel_id, callback) | ||||||
|  | { | ||||||
|  |     const url = `/channel/${channel_id}/show_download_directory`; | ||||||
|  |     return common.post(url, null, callback); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| api.channels.callback_go_to_channels = | api.channels.callback_go_to_channels = | ||||||
| function callback_go_to_channels(response) | function callback_go_to_channels(response) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -5,8 +5,8 @@ | ||||||
|     <title>{{channel.name}}</title> |     <title>{{channel.name}}</title> | ||||||
|     <meta charset="UTF-8"> |     <meta charset="UTF-8"> | ||||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> |     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> | ||||||
|     <link rel="stylesheet" href="/static/css/common.css"> |     <link rel="stylesheet" href="/static/css/common.css"/> | ||||||
|     <link rel="stylesheet" href="/static/css/ycdl.css"> |     <link rel="stylesheet" href="/static/css/ycdl.css"/> | ||||||
|     <script src="/static/js/common.js"></script> |     <script src="/static/js/common.js"></script> | ||||||
|     <script src="/static/js/api.js"></script> |     <script src="/static/js/api.js"></script> | ||||||
|     <script src="/static/js/hotkeys.js"></script> |     <script src="/static/js/hotkeys.js"></script> | ||||||
|  | @ -264,12 +264,13 @@ https://stackoverflow.com/a/35153397 | ||||||
|     <div>Channel ID: <code>{{channel.id}}</code></div> |     <div>Channel ID: <code>{{channel.id}}</code></div> | ||||||
| 
 | 
 | ||||||
|     <div> |     <div> | ||||||
|         <input type="text" id="set_name_input" placeholder="Name" value="{{channel.name or ''}}"/> |         <input type="text" id="set_name_input" placeholder="Name" size=32 value="{{channel.name or ''}}"/> | ||||||
|         <button id="set_name_button" class="button_with_spinner" onclick="return set_name_form();">Set name</button> |         <button id="set_name_button" class="button_with_spinner" onclick="return set_name_form(event);">Set name</button> | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|     <div> |     <div> | ||||||
|         <label><input type="checkbox" id="set_autorefresh_checkbox" {{"checked" if channel.autorefresh else ""}} onchange="return set_autorefresh_form(event);"/> Automatically refresh this channel regularly.</label> |         {% set checked = 'checked' if channel.autorefresh else '' %} | ||||||
|  |         <label><input type="checkbox" id="set_autorefresh_checkbox" {{checked}} onchange="return set_autorefresh_form(event);"/> Automatically refresh this channel regularly.</label> | ||||||
|         <span id="set_autorefresh_spinner" class="hidden">Working...</span> |         <span id="set_autorefresh_spinner" class="hidden">Working...</span> | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|  | @ -285,12 +286,15 @@ https://stackoverflow.com/a/35153397 | ||||||
| 
 | 
 | ||||||
|     <div> |     <div> | ||||||
|         <input type="text" id="set_queuefile_extension_input" placeholder="Queuefile extension" value="{{channel.queuefile_extension or ''}}"/> |         <input type="text" id="set_queuefile_extension_input" placeholder="Queuefile extension" value="{{channel.queuefile_extension or ''}}"/> | ||||||
|         <button id="set_queuefile_extension_button" class="button_with_spinner" onclick="return set_queuefile_extension_form();">Set extension</button> |         <button id="set_queuefile_extension_button" class="button_with_spinner" onclick="return set_queuefile_extension_form(event);">Set extension</button> | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|     <div> |     <div> | ||||||
|         <input type="text" id="set_download_directory_input" placeholder="Queuefile directory" value="{{channel.download_directory.absolute_path if channel.download_directory else ''}}"/> |         <input type="text" id="set_download_directory_input" placeholder="Queuefile directory" value="{{channel.download_directory.absolute_path if channel.download_directory else ''}}"/> | ||||||
|         <button id="set_download_directory_button" class="button_with_spinner" onclick="return set_download_directory_form();">Set directory</button> |         <button id="set_download_directory_button" class="button_with_spinner" onclick="return set_download_directory_form(event);">Set directory</button> | ||||||
|  |         {% if request.is_localhost %} | ||||||
|  |         <button id="show_directory_button" onclick="return show_download_directory_form(event);">Open directory</button> | ||||||
|  |         {% endif %} | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|     <div><a href="https://www.youtube.com/channel/{{channel.id}}/videos">Channel page</a></div> |     <div><a href="https://www.youtube.com/channel/{{channel.id}}/videos">Channel page</a></div> | ||||||
|  | @ -299,8 +303,9 @@ https://stackoverflow.com/a/35153397 | ||||||
| 
 | 
 | ||||||
|     <button class="red_button button_with_confirm" |     <button class="red_button button_with_confirm" | ||||||
|     data-prompt="Delete channel and all videos?" |     data-prompt="Delete channel and all videos?" | ||||||
|     data-onclick="return delete_channel_form();" |     data-onclick="return delete_channel_form(event);" | ||||||
|     >Delete Channel</button> |     >Delete Channel</button> | ||||||
|  | 
 | ||||||
|     </div> <!-- tab-settings --> |     </div> <!-- tab-settings --> | ||||||
| 
 | 
 | ||||||
|     </div> <!-- tabbed_container --> |     </div> <!-- tabbed_container --> | ||||||
|  | @ -377,12 +382,8 @@ var video_card_first_selected = null; | ||||||
| function select_all() | function select_all() | ||||||
| { | { | ||||||
|     video_card_first_selected = null; |     video_card_first_selected = null; | ||||||
|     for (const video_card of document.getElementsByClassName("video_card")) |     for (const video_card of document.querySelectorAll(".video_card:not(.hidden)")) | ||||||
|     { |     { | ||||||
|         if (video_card.classList.contains("hidden")) |  | ||||||
|         { |  | ||||||
|             continue; |  | ||||||
|         } |  | ||||||
|         video_card.classList.add("video_card_selected"); |         video_card.classList.add("video_card_selected"); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -437,8 +438,7 @@ function select_one(event) | ||||||
| 
 | 
 | ||||||
| function select_shift(event) | function select_shift(event) | ||||||
| { | { | ||||||
|     let video_cards = Array.from(document.getElementsByClassName("video_card")); |     const video_cards = Array.from(document.querySelectorAll(".video_card:not(.hidden)")); | ||||||
|     video_cards = video_cards.filter(card => ! card.classList.contains("hidden")) |  | ||||||
| 
 | 
 | ||||||
|     let start_index = video_cards.indexOf(video_card_first_selected); |     let start_index = video_cards.indexOf(video_card_first_selected); | ||||||
|     let end_index = video_cards.indexOf(event.target); |     let end_index = video_cards.indexOf(event.target); | ||||||
|  | @ -739,7 +739,19 @@ function set_queuefile_extension_callback(response) | ||||||
|     { |     { | ||||||
|         set_queuefile_extension_input.value = extension; |         set_queuefile_extension_input.value = extension; | ||||||
|     } |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|  | function show_download_directory_form() | ||||||
|  | { | ||||||
|  |     function callback(response) | ||||||
|  |     { | ||||||
|  |         if (response.meta.status !== 200) | ||||||
|  |         { | ||||||
|  |             alert(JSON.stringify(response)); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     api.channels.show_download_directory(CHANNEL_ID, callback); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| if (CHANNEL_ID) | if (CHANNEL_ID) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue