Rename database column download to state.
				
					
				
			This commit is contained in:
		
							parent
							
								
									0ae041f001
								
							
						
					
					
						commit
						e5910c55f2
					
				
					 7 changed files with 46 additions and 32 deletions
				
			
		|  | @ -17,10 +17,10 @@ def get_channels(): | |||
| 
 | ||||
| @site.route('/videos') | ||||
| @site.route('/watch') | ||||
| @site.route('/videos/<download_filter>') | ||||
| @site.route('/videos/<state>') | ||||
| @site.route('/channel/<channel_id>') | ||||
| @site.route('/channel/<channel_id>/<download_filter>') | ||||
| def get_channel(channel_id=None, download_filter=None): | ||||
| @site.route('/channel/<channel_id>/<state>') | ||||
| def get_channel(channel_id=None, state=None): | ||||
|     if channel_id is not None: | ||||
|         try: | ||||
|             common.ycdldb.add_channel(channel_id) | ||||
|  | @ -42,7 +42,7 @@ def get_channel(channel_id=None, download_filter=None): | |||
|     else: | ||||
|         videos = common.ycdldb.get_videos( | ||||
|             channel_id=channel_id, | ||||
|             download_filter=download_filter, | ||||
|             state=state, | ||||
|             orderby=orderby, | ||||
|         ) | ||||
| 
 | ||||
|  | @ -72,7 +72,7 @@ def get_channel(channel_id=None, download_filter=None): | |||
|         'channel.html', | ||||
|         all_states=all_states, | ||||
|         channel=channel, | ||||
|         download_filter=download_filter, | ||||
|         state=state, | ||||
|         query_string='?' + request.query_string.decode('utf-8'), | ||||
|         videos=videos, | ||||
|     ) | ||||
|  |  | |||
|  | @ -208,7 +208,7 @@ https://stackoverflow.com/a/35153397 | |||
|         <div id="video_card_{{video.id}}" | ||||
|         data-ytid="{{video.id}}" | ||||
|         onclick="return onclick_select(event);" | ||||
|         class="video_card video_card_{{video.download}}" | ||||
|         class="video_card video_card_{{video.state}}" | ||||
|         > | ||||
|             <img class="video_thumbnail" loading="lazy" src="http://i3.ytimg.com/vi/{{video.id}}/default.jpg" height="100px"> | ||||
|             <div class="video_details"> | ||||
|  | @ -222,7 +222,7 @@ https://stackoverflow.com/a/35153397 | |||
| 
 | ||||
|             <div class="action_toolbox"> | ||||
|                 <button | ||||
|                 {% if video.download == "pending" %} | ||||
|                 {% if video.state == "pending" %} | ||||
|                 class="video_action_pending hidden" | ||||
|                 {% else %} | ||||
|                 class="video_action_pending" | ||||
|  | @ -231,7 +231,7 @@ https://stackoverflow.com/a/35153397 | |||
|                 >Revert to Pending</button> | ||||
| 
 | ||||
|                 <button | ||||
|                 {% if video.download == "pending" %} | ||||
|                 {% if video.state == "pending" %} | ||||
|                 class="video_action_download" | ||||
|                 {% else %} | ||||
|                 class="video_action_download hidden" | ||||
|  | @ -240,7 +240,7 @@ https://stackoverflow.com/a/35153397 | |||
|                 >Download</button> | ||||
| 
 | ||||
|                 <button | ||||
|                 {% if video.download == "pending" %} | ||||
|                 {% if video.state == "pending" %} | ||||
|                 class="video_action_ignore" | ||||
|                 {% else %} | ||||
|                 class="video_action_ignore hidden" | ||||
|  | @ -288,7 +288,7 @@ https://stackoverflow.com/a/35153397 | |||
| var CHANNEL_ID = "{{channel.id}}"; | ||||
| {% endif %} | ||||
| 
 | ||||
| var DOWNLOAD_FILTER = "{{download_filter if download_filter else ""}}"; | ||||
| var STATE = "{{state if state else ""}}"; | ||||
| var video_card_first_selected = null; | ||||
| var video_card_selections = []; | ||||
| 
 | ||||
|  | @ -337,11 +337,11 @@ function filter_video_cards(search_term) | |||
|     video_cards = document.getElementById("video_cards"); | ||||
|     video_cards.classList.add("hidden"); | ||||
|     search_term = search_term.toLocaleLowerCase(); | ||||
|     let download_filter_class = "video_card_" + DOWNLOAD_FILTER; | ||||
|     let state_class = "video_card_" + STATE; | ||||
|     Array.from(video_cards.getElementsByClassName("video_card")).forEach(function(video_card) | ||||
|     { | ||||
|         let title = video_card.getElementsByClassName("video_title")[0].innerText.toLocaleLowerCase(); | ||||
|         if (DOWNLOAD_FILTER && !video_card.classList.contains(download_filter_class)) | ||||
|         if (STATE && !video_card.classList.contains(state_class)) | ||||
|         { | ||||
|             video_cards.removeChild(video_card); | ||||
|         } | ||||
|  |  | |||
|  | @ -144,6 +144,20 @@ def upgrade_5_to_6(ycdldb): | |||
|     ''') | ||||
|     ycdldb.sql.execute('DROP TABLE channels_old') | ||||
| 
 | ||||
| def upgrade_6_to_7(ycdldb): | ||||
|     ''' | ||||
|     In this version, the `download` column of the videos table was renamed to | ||||
|     `state`. The vocabulary throughout the rest of the program had already | ||||
|     evolved and the database column was behind the times. | ||||
|     ''' | ||||
|     ycdldb.sql.execute('ALTER TABLE videos RENAME COLUMN download TO state') | ||||
|     ycdldb.sql.execute('DROP INDEX IF EXISTS index_video_author_download') | ||||
|     ycdldb.sql.execute('DROP INDEX IF EXISTS index_video_download') | ||||
|     ycdldb.sql.execute('DROP INDEX IF EXISTS index_video_download_published') | ||||
|     ycdldb.sql.execute('CREATE INDEX index_video_author_state on videos(author_id, state)') | ||||
|     ycdldb.sql.execute('CREATE INDEX index_video_state on videos(state)') | ||||
|     ycdldb.sql.execute('CREATE INDEX index_video_state_published on videos(state, published)') | ||||
| 
 | ||||
| def upgrade_all(data_directory): | ||||
|     ''' | ||||
|     Given the directory containing a ycdl database, apply all of the | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| from voussoirkit import sqlhelpers | ||||
| 
 | ||||
| DATABASE_VERSION = 6 | ||||
| DATABASE_VERSION = 7 | ||||
| DB_VERSION_PRAGMA = f''' | ||||
| PRAGMA user_version = {DATABASE_VERSION}; | ||||
| ''' | ||||
|  | @ -32,16 +32,16 @@ CREATE TABLE IF NOT EXISTS videos( | |||
|     duration INT, | ||||
|     views INT, | ||||
|     thumbnail TEXT, | ||||
|     download TEXT | ||||
|     state TEXT | ||||
| ); | ||||
| 
 | ||||
| CREATE INDEX IF NOT EXISTS index_channel_id on channels(id); | ||||
| CREATE INDEX IF NOT EXISTS index_video_author on videos(author_id); | ||||
| CREATE INDEX IF NOT EXISTS index_video_author_download on videos(author_id, download); | ||||
| CREATE INDEX IF NOT EXISTS index_video_author_state on videos(author_id, state); | ||||
| CREATE INDEX IF NOT EXISTS index_video_id on videos(id); | ||||
| CREATE INDEX IF NOT EXISTS index_video_published on videos(published); | ||||
| CREATE INDEX IF NOT EXISTS index_video_download on videos(download); | ||||
| CREATE INDEX IF NOT EXISTS index_video_download_published on videos(download, published); | ||||
| CREATE INDEX IF NOT EXISTS index_video_state on videos(state); | ||||
| CREATE INDEX IF NOT EXISTS index_video_state_published on videos(state, published); | ||||
| ---------------------------------------------------------------------------------------------------- | ||||
| COMMIT; | ||||
| ''' | ||||
|  |  | |||
|  | @ -24,6 +24,6 @@ def video(v): | |||
|         'duration': v.duration, | ||||
|         'views': v.views, | ||||
|         'thumbnail': v.thumbnail, | ||||
|         'download': v.download, | ||||
|         'state': v.state, | ||||
|     } | ||||
|     return j | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ class Channel(Base): | |||
|             self.ycdldb.commit() | ||||
| 
 | ||||
|     def has_pending(self): | ||||
|         query = 'SELECT 1 FROM videos WHERE author_id == ? AND download == "pending" LIMIT 1' | ||||
|         query = 'SELECT 1 FROM videos WHERE author_id == ? AND state == "pending" LIMIT 1' | ||||
|         bindings = [self.id] | ||||
|         return self.ycdldb.sql_select_one(query, bindings) is not None | ||||
| 
 | ||||
|  | @ -109,7 +109,7 @@ class Video(Base): | |||
|         self.duration = db_row['duration'] | ||||
|         self.views = db_row['views'] | ||||
|         self.thumbnail = db_row['thumbnail'] | ||||
|         self.download = db_row['download'] | ||||
|         self.state = db_row['state'] | ||||
| 
 | ||||
|     @property | ||||
|     def author(self): | ||||
|  | @ -133,9 +133,9 @@ class Video(Base): | |||
| 
 | ||||
|         pairs = { | ||||
|             'id': self.id, | ||||
|             'download': state, | ||||
|             'state': state, | ||||
|         } | ||||
|         self.download = state | ||||
|         self.state = state | ||||
|         self.ycdldb.sql_update(table='videos', pairs=pairs, where_key='id') | ||||
| 
 | ||||
|         if commit: | ||||
|  |  | |||
|  | @ -313,7 +313,7 @@ class YCDLDBVideoMixin: | |||
|             video_id = video | ||||
| 
 | ||||
|         video = self.get_video(video_id) | ||||
|         if video.download != 'pending' and not force: | ||||
|         if video.state != 'pending' and not force: | ||||
|             print(f'{video.id} does not need to be downloaded.') | ||||
|             return | ||||
| 
 | ||||
|  | @ -339,7 +339,7 @@ class YCDLDBVideoMixin: | |||
|     def get_video(self, video_id): | ||||
|         return self.get_thing_by_id('video', video_id) | ||||
| 
 | ||||
|     def get_videos(self, channel_id=None, *, download_filter=None, orderby=None): | ||||
|     def get_videos(self, channel_id=None, *, state=None, orderby=None): | ||||
|         wheres = [] | ||||
|         orderbys = [] | ||||
| 
 | ||||
|  | @ -348,9 +348,9 @@ class YCDLDBVideoMixin: | |||
|             wheres.append('author_id') | ||||
|             bindings.append(channel_id) | ||||
| 
 | ||||
|         if download_filter is not None: | ||||
|             wheres.append('download') | ||||
|             bindings.append(download_filter) | ||||
|         if state is not None: | ||||
|             wheres.append('state') | ||||
|             bindings.append(state) | ||||
| 
 | ||||
|         if wheres: | ||||
|             wheres = [x + ' == ?' for x in wheres] | ||||
|  | @ -428,7 +428,7 @@ class YCDLDBVideoMixin: | |||
| 
 | ||||
|         try: | ||||
|             existing = self.get_video(video.id) | ||||
|             download_status = existing.download | ||||
|             download_status = existing.state | ||||
|         except exceptions.NoSuchVideo: | ||||
|             existing = None | ||||
|             download_status = 'pending' | ||||
|  | @ -442,7 +442,7 @@ class YCDLDBVideoMixin: | |||
|             'duration': video.duration, | ||||
|             'views': video.views, | ||||
|             'thumbnail': video.thumbnail['url'], | ||||
|             'download': download_status, | ||||
|             'state': download_status, | ||||
|         } | ||||
| 
 | ||||
|         if existing: | ||||
|  | @ -527,13 +527,13 @@ class YCDLDB( | |||
| 
 | ||||
|     def get_all_states(self): | ||||
|         ''' | ||||
|         Get a list of all the different `download` states that are currently in | ||||
|         use in the database. | ||||
|         Get a list of all the different states that are currently in use in | ||||
|         the database. | ||||
|         ''' | ||||
|         # Note: This function was added while I was considering the addition of | ||||
|         # arbitrarily many states for user-defined purposes, but I kind of went | ||||
|         # back on that so I'm not sure if it will be useful. | ||||
|         query = 'SELECT DISTINCT download FROM videos' | ||||
|         query = 'SELECT DISTINCT state FROM videos' | ||||
|         states = self.sql_select(query) | ||||
|         states = [row[0] for row in states] | ||||
|         return sorted(states) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue