aboutsummaryrefslogtreecommitdiff
path: root/c
diff options
context:
space:
mode:
authorJohn Ankarström <john@ankarstrom.se>2022-04-04 01:22:58 +0200
committerJohn Ankarström <john@ankarstrom.se>2022-04-04 01:22:58 +0200
commit0c996d6836defcc190a4f071437d95cb1f5140cb (patch)
tree3af475d4e6f8730279ade1fcd66cf7d33f950a3e /c
parent12176831abde1f4545fae95ee9edd5688f8cc584 (diff)
downloadEpisodeBrowser-0c996d6836defcc190a4f071437d95cb1f5140cb.tar.gz
Rewrite episode data code.
TODO: Ignore duplicate hints.
Diffstat (limited to 'c')
-rw-r--r--c/datalistview.c77
-rw-r--r--c/episodelistview.c18
2 files changed, 41 insertions, 54 deletions
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);