From 0c996d6836defcc190a4f071437d95cb1f5140cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Mon, 4 Apr 2022 01:22:58 +0200 Subject: Rewrite episode data code. TODO: Ignore duplicate hints. --- c/datalistview.c | 77 +++++++++++++++++++++-------------------------------- c/episodelistview.c | 18 ++++++++----- 2 files changed, 41 insertions(+), 54 deletions(-) (limited to 'c') diff --git a/c/datalistview.c b/c/datalistview.c index fe16913..829f6d6 100644 --- a/c/datalistview.c +++ b/c/datalistview.c @@ -36,6 +36,7 @@ DlvShowEpisode(int iEpisode) { LVITEM lviKey, lviValue; term_t t; + qid_t q; ListView_DeleteAllItems(HDlv); @@ -44,54 +45,36 @@ DlvShowEpisode(int iEpisode) t = T(3); PI(t,iEpisode) return; - P("episode_data","lookup_episode_local",3,t) return; - - /* The episode data is a list of unary compounds, whose - * functor is the key and whose argument is the value. - * (Perhaps this should really be implemented in Prolog.) */ - - { - term_t tHead, tList; - - tHead = PL_new_term_ref(); - tList = PL_copy_term_ref(t+2); - - for (int i = 0; PL_get_list(tList, tHead, tList); i++) { - atom_t aKey; - const char *szKey; - char *szValue; - TCHAR *tszKey, *tszValue; - term_t tValue; - size_t iArity; - - if (!PL_get_name_arity(tHead,&aKey,&iArity)) continue; - szKey = PL_atom_chars(aKey); - if (!szKey) continue; - - tValue = PL_new_term_ref(); - if (!PL_get_arg(1, tHead, tValue)) continue; - GAC(tValue,&szValue) continue; - - tszKey = TszFromSz(szKey, CP_UTF8); - if (!tszKey) continue; - tszValue = TszFromSz(szValue, CP_UTF8); - if (!tszValue) goto c; - - lviKey.mask = LVIF_TEXT; - lviKey.iItem = i; - lviKey.iSubItem = 0; - lviKey.pszText = tszKey; - ListView_InsertItem(HDlv, &lviKey); - - lviValue.iItem = i; - lviValue.iSubItem = 1; - lviValue.pszText = tszValue; - ListView_SetItem(HDlv, &lviValue); - - free(tszValue); - c: free(tszKey); - } + q = Q("episode_data","episode_datum",3,t); + + for (int i = 0; Qn(q); i++) { + char *szKey; + char *szValue; + TCHAR *tszKey, *tszValue; + + GAC(t+1,&szKey) continue; + GAC(t+2,&szValue) continue; + + tszKey = TszFromSz(szKey, CP_UTF8); + if (!tszKey) continue; + tszValue = TszFromSz(szValue, CP_UTF8); + if (!tszValue) goto c; + + lviKey.mask = LVIF_TEXT; + lviKey.iItem = i; + lviKey.iSubItem = 0; + lviKey.pszText = tszKey; + ListView_InsertItem(HDlv, &lviKey); + + lviValue.iItem = i; + lviValue.iSubItem = 1; + lviValue.pszText = tszValue; + ListView_SetItem(HDlv, &lviValue); + + free(tszValue); + c: free(tszKey); } + Qc(q); UpdateLayout(); } diff --git a/c/episodelistview.c b/c/episodelistview.c index 0a85635..1389f53 100644 --- a/c/episodelistview.c +++ b/c/episodelistview.c @@ -175,6 +175,7 @@ ElvUpdate() lviName.mask = LVIF_TEXT; t = T(1); + P("episode_data","ensure_episode_data",0,t) return; P("episode_data","episode_count",1,t) return; GI(t,&iEpisodes) return; @@ -182,15 +183,15 @@ ElvUpdate() char *szName; int cb; TCHAR *tszEpisode, *tszName; - term_t t2; + term_t t; /* Format name string. */ - t2 = T(3); - PI(t2,i+1) return; + t = T(2); + PI(t,i+1) return; tszName = NULL; - P("episode_data","lookup_episode_local",3,t2) goto ep; - GAC(t2+1,&szName) goto ep; + P("episode_data","episode_title",2,t) goto ep; + GAC(t+1,&szName) goto ep; tszName = TszFromSz(szName, CP_UTF8); if (!tszName) return; @@ -239,9 +240,12 @@ ElvUpdateName(LPLVITEM lpLvi) TCHAR *tszName; term_t t; - t = T(3); + t = T(2); PI(t,lpLvi->lParam) return; - P("episode_data","lookup_episode",3,t) return; + P("episode_data","episode_title",2,t) { + P("episode_data","fetch_episode_data",0,t) return; + P("episode_data","episode_title",2,t) return; + } GAC(t+1,&szName) return; tszName = TszFromSz(szName, CP_UTF8); -- cgit v1.2.3