Fossil SCM

Remove mfirt

andygoth 2020-08-21 22:03 andygoth-forum-refactor
Commit a8d90b1f4fe63bb607b7d5b4cab6ab1b84d63bb0ca0c96654b37488f0c8f691b
1 file changed +14 -20
+14 -20
--- src/forum.c
+++ src/forum.c
@@ -32,11 +32,10 @@
3232
** either the initial post, an edit to a post, a reply, or an edit to
3333
** a reply.
3434
*/
3535
struct ForumEntry {
3636
int fpid; /* rid for this entry */
37
- int mfirt; /* Root in-reply-to */
3837
int sid; /* Serial ID number */
3938
char *zUuid; /* Artifact hash */
4039
ForumEntry *pIrt; /* This entry replies to pIrt */
4140
ForumEntry *pEditHead; /* Original, unedited entry */
4241
ForumEntry *pEditTail; /* Most recent edit for this entry */
@@ -129,18 +128,22 @@
129128
ForumThread *pThread, /* The complete thread */
130129
ForumEntry *pBase /* Add replies to this entry */
131130
){
132131
ForumEntry *p;
133132
ForumEntry *pPrev = 0;
133
+ ForumEntry *pBaseIrt;
134134
for(p=pBase->pNext; p; p=p->pNext){
135
- if( !p->pEditPrev && p->mfirt==pBase->fpid ){
136
- if( pPrev ){
137
- pPrev->nIndent = pBase->nIndent + 1;
138
- forumentry_add_to_display(pThread, pPrev);
139
- forumthread_display_order(pThread, pPrev);
135
+ if( !p->pEditPrev && p->pIrt ){
136
+ pBaseIrt = p->pIrt->pEditHead ? p->pIrt->pEditHead : p->pIrt;
137
+ if( pBaseIrt==pBase ){
138
+ if( pPrev ){
139
+ pPrev->nIndent = pBase->nIndent + 1;
140
+ forumentry_add_to_display(pThread, pPrev);
141
+ forumthread_display_order(pThread, pPrev);
142
+ }
143
+ pPrev = p;
140144
}
141
- pPrev = p;
142145
}
143146
}
144147
if( pPrev ){
145148
pPrev->nIndent = pBase->nIndent + 1;
146149
if( pPrev->nIndent>pThread->mxIndent ) pThread->mxIndent = pPrev->nIndent;
@@ -172,11 +175,10 @@
172175
memset(pEntry, 0, sizeof(*pEntry));
173176
pEntry->fpid = db_column_int(&q, 0);
174177
firt = db_column_int(&q, 1);
175178
fprev = db_column_int(&q, 2);
176179
pEntry->zUuid = fossil_strdup(db_column_text(&q,3));
177
- pEntry->mfirt = firt;
178180
pEntry->sid = sid++;
179181
pEntry->pPrev = pThread->pLast;
180182
pEntry->pNext = 0;
181183
if( pThread->pLast==0 ){
182184
pThread->pFirst = pEntry;
@@ -191,22 +193,16 @@
191193
break;
192194
}
193195
}
194196
}
195197
if( fprev ){
196
- ForumEntry *pBase = 0;
197198
p = forumentry_backward(pEntry->pPrev, fprev);
198199
p->pEditNext = pEntry;
199200
pEntry->pEditPrev = p;
200201
pEntry->pEditHead = p->pEditHead ? p->pEditHead : p;
201
- while( p ){
202
- pBase = p;
202
+ for(; p; p=p->pEditPrev ){
203203
p->pEditTail = pEntry;
204
- p = p->pEditPrev;
205
- }
206
- for(p=pEntry->pNext; p; p=p->pNext){
207
- if( p->mfirt==pEntry->fpid ) p->mfirt = pBase->fpid;
208204
}
209205
}
210206
pThread->pLast = pEntry;
211207
}
212208
db_finalize(&q);
@@ -291,16 +287,15 @@
291287
pThread = forumthread_create(froot, 1);
292288
fossil_print("Chronological:\n");
293289
fossil_print(
294290
/* 0 1 2 3 4 5 6 7 */
295291
/* 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123 */
296
- " sid fpid pIrt pEditPrev mfirt pEditTail hash\n");
292
+ " sid fpid pIrt pEditPrev pEditTail hash\n");
297293
for(p=pThread->pFirst; p; p=p->pNext){
298
- fossil_print("%4d %9d %9d %9d %9d %9d %8.8s\n", p->sid,
294
+ fossil_print("%4d %9d %9d %9d %9d %8.8s\n", p->sid,
299295
p->fpid, p->pIrt ? p->pIrt->fpid : 0,
300296
p->pEditPrev ? p->pEditPrev->fpid : 0,
301
- p->mfirt,
302297
p->pEditTail ? p->pEditTail->fpid : 0, p->zUuid);
303298
}
304299
fossil_print("\nDisplay\n");
305300
for(p=pThread->pDisplay; p; p=p->pDisplay){
306301
fossil_print("%*s", (p->nIndent-1)*3, "");
@@ -513,16 +508,15 @@
513508
** to be displayed for debugging purposes.
514509
*/
515510
if( PB("threadtable") ){
516511
@ <hr>
517512
@ <table border="1" cellpadding="3" cellspacing="0">
518
- @ <tr><th>sid<th>fpid<th>pIrt<th>mfirt<th>pEditHead<th>pEditTail\
513
+ @ <tr><th>sid<th>fpid<th>pIrt<th>pEditHead<th>pEditTail\
519514
@ <th>pEditNext<th>pEditPrev<th>hash
520515
for(p=pThread->pFirst; p; p=p->pNext){
521516
@ <tr><td>%d(p->sid)<td>%d(p->fpid)\
522517
@ <td>%d(p->pIrt?p->pIrt->fpid:0)\
523
- @ <td>%d(p->mfirt)\
524518
@ <td>%d(p->pEditHead?p->pEditHead->fpid:0)\
525519
@ <td>%d(p->pEditTail?p->pEditTail->fpid:0)\
526520
@ <td>%d(p->pEditNext?p->pEditNext->fpid:0)\
527521
@ <td>%d(p->pEditPrev?p->pEditPrev->fpid:0)\
528522
@ <td>%S(p->zUuid)</tr>
529523
--- src/forum.c
+++ src/forum.c
@@ -32,11 +32,10 @@
32 ** either the initial post, an edit to a post, a reply, or an edit to
33 ** a reply.
34 */
35 struct ForumEntry {
36 int fpid; /* rid for this entry */
37 int mfirt; /* Root in-reply-to */
38 int sid; /* Serial ID number */
39 char *zUuid; /* Artifact hash */
40 ForumEntry *pIrt; /* This entry replies to pIrt */
41 ForumEntry *pEditHead; /* Original, unedited entry */
42 ForumEntry *pEditTail; /* Most recent edit for this entry */
@@ -129,18 +128,22 @@
129 ForumThread *pThread, /* The complete thread */
130 ForumEntry *pBase /* Add replies to this entry */
131 ){
132 ForumEntry *p;
133 ForumEntry *pPrev = 0;
 
134 for(p=pBase->pNext; p; p=p->pNext){
135 if( !p->pEditPrev && p->mfirt==pBase->fpid ){
136 if( pPrev ){
137 pPrev->nIndent = pBase->nIndent + 1;
138 forumentry_add_to_display(pThread, pPrev);
139 forumthread_display_order(pThread, pPrev);
 
 
 
 
140 }
141 pPrev = p;
142 }
143 }
144 if( pPrev ){
145 pPrev->nIndent = pBase->nIndent + 1;
146 if( pPrev->nIndent>pThread->mxIndent ) pThread->mxIndent = pPrev->nIndent;
@@ -172,11 +175,10 @@
172 memset(pEntry, 0, sizeof(*pEntry));
173 pEntry->fpid = db_column_int(&q, 0);
174 firt = db_column_int(&q, 1);
175 fprev = db_column_int(&q, 2);
176 pEntry->zUuid = fossil_strdup(db_column_text(&q,3));
177 pEntry->mfirt = firt;
178 pEntry->sid = sid++;
179 pEntry->pPrev = pThread->pLast;
180 pEntry->pNext = 0;
181 if( pThread->pLast==0 ){
182 pThread->pFirst = pEntry;
@@ -191,22 +193,16 @@
191 break;
192 }
193 }
194 }
195 if( fprev ){
196 ForumEntry *pBase = 0;
197 p = forumentry_backward(pEntry->pPrev, fprev);
198 p->pEditNext = pEntry;
199 pEntry->pEditPrev = p;
200 pEntry->pEditHead = p->pEditHead ? p->pEditHead : p;
201 while( p ){
202 pBase = p;
203 p->pEditTail = pEntry;
204 p = p->pEditPrev;
205 }
206 for(p=pEntry->pNext; p; p=p->pNext){
207 if( p->mfirt==pEntry->fpid ) p->mfirt = pBase->fpid;
208 }
209 }
210 pThread->pLast = pEntry;
211 }
212 db_finalize(&q);
@@ -291,16 +287,15 @@
291 pThread = forumthread_create(froot, 1);
292 fossil_print("Chronological:\n");
293 fossil_print(
294 /* 0 1 2 3 4 5 6 7 */
295 /* 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123 */
296 " sid fpid pIrt pEditPrev mfirt pEditTail hash\n");
297 for(p=pThread->pFirst; p; p=p->pNext){
298 fossil_print("%4d %9d %9d %9d %9d %9d %8.8s\n", p->sid,
299 p->fpid, p->pIrt ? p->pIrt->fpid : 0,
300 p->pEditPrev ? p->pEditPrev->fpid : 0,
301 p->mfirt,
302 p->pEditTail ? p->pEditTail->fpid : 0, p->zUuid);
303 }
304 fossil_print("\nDisplay\n");
305 for(p=pThread->pDisplay; p; p=p->pDisplay){
306 fossil_print("%*s", (p->nIndent-1)*3, "");
@@ -513,16 +508,15 @@
513 ** to be displayed for debugging purposes.
514 */
515 if( PB("threadtable") ){
516 @ <hr>
517 @ <table border="1" cellpadding="3" cellspacing="0">
518 @ <tr><th>sid<th>fpid<th>pIrt<th>mfirt<th>pEditHead<th>pEditTail\
519 @ <th>pEditNext<th>pEditPrev<th>hash
520 for(p=pThread->pFirst; p; p=p->pNext){
521 @ <tr><td>%d(p->sid)<td>%d(p->fpid)\
522 @ <td>%d(p->pIrt?p->pIrt->fpid:0)\
523 @ <td>%d(p->mfirt)\
524 @ <td>%d(p->pEditHead?p->pEditHead->fpid:0)\
525 @ <td>%d(p->pEditTail?p->pEditTail->fpid:0)\
526 @ <td>%d(p->pEditNext?p->pEditNext->fpid:0)\
527 @ <td>%d(p->pEditPrev?p->pEditPrev->fpid:0)\
528 @ <td>%S(p->zUuid)</tr>
529
--- src/forum.c
+++ src/forum.c
@@ -32,11 +32,10 @@
32 ** either the initial post, an edit to a post, a reply, or an edit to
33 ** a reply.
34 */
35 struct ForumEntry {
36 int fpid; /* rid for this entry */
 
37 int sid; /* Serial ID number */
38 char *zUuid; /* Artifact hash */
39 ForumEntry *pIrt; /* This entry replies to pIrt */
40 ForumEntry *pEditHead; /* Original, unedited entry */
41 ForumEntry *pEditTail; /* Most recent edit for this entry */
@@ -129,18 +128,22 @@
128 ForumThread *pThread, /* The complete thread */
129 ForumEntry *pBase /* Add replies to this entry */
130 ){
131 ForumEntry *p;
132 ForumEntry *pPrev = 0;
133 ForumEntry *pBaseIrt;
134 for(p=pBase->pNext; p; p=p->pNext){
135 if( !p->pEditPrev && p->pIrt ){
136 pBaseIrt = p->pIrt->pEditHead ? p->pIrt->pEditHead : p->pIrt;
137 if( pBaseIrt==pBase ){
138 if( pPrev ){
139 pPrev->nIndent = pBase->nIndent + 1;
140 forumentry_add_to_display(pThread, pPrev);
141 forumthread_display_order(pThread, pPrev);
142 }
143 pPrev = p;
144 }
 
145 }
146 }
147 if( pPrev ){
148 pPrev->nIndent = pBase->nIndent + 1;
149 if( pPrev->nIndent>pThread->mxIndent ) pThread->mxIndent = pPrev->nIndent;
@@ -172,11 +175,10 @@
175 memset(pEntry, 0, sizeof(*pEntry));
176 pEntry->fpid = db_column_int(&q, 0);
177 firt = db_column_int(&q, 1);
178 fprev = db_column_int(&q, 2);
179 pEntry->zUuid = fossil_strdup(db_column_text(&q,3));
 
180 pEntry->sid = sid++;
181 pEntry->pPrev = pThread->pLast;
182 pEntry->pNext = 0;
183 if( pThread->pLast==0 ){
184 pThread->pFirst = pEntry;
@@ -191,22 +193,16 @@
193 break;
194 }
195 }
196 }
197 if( fprev ){
 
198 p = forumentry_backward(pEntry->pPrev, fprev);
199 p->pEditNext = pEntry;
200 pEntry->pEditPrev = p;
201 pEntry->pEditHead = p->pEditHead ? p->pEditHead : p;
202 for(; p; p=p->pEditPrev ){
 
203 p->pEditTail = pEntry;
 
 
 
 
204 }
205 }
206 pThread->pLast = pEntry;
207 }
208 db_finalize(&q);
@@ -291,16 +287,15 @@
287 pThread = forumthread_create(froot, 1);
288 fossil_print("Chronological:\n");
289 fossil_print(
290 /* 0 1 2 3 4 5 6 7 */
291 /* 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123 */
292 " sid fpid pIrt pEditPrev pEditTail hash\n");
293 for(p=pThread->pFirst; p; p=p->pNext){
294 fossil_print("%4d %9d %9d %9d %9d %8.8s\n", p->sid,
295 p->fpid, p->pIrt ? p->pIrt->fpid : 0,
296 p->pEditPrev ? p->pEditPrev->fpid : 0,
 
297 p->pEditTail ? p->pEditTail->fpid : 0, p->zUuid);
298 }
299 fossil_print("\nDisplay\n");
300 for(p=pThread->pDisplay; p; p=p->pDisplay){
301 fossil_print("%*s", (p->nIndent-1)*3, "");
@@ -513,16 +508,15 @@
508 ** to be displayed for debugging purposes.
509 */
510 if( PB("threadtable") ){
511 @ <hr>
512 @ <table border="1" cellpadding="3" cellspacing="0">
513 @ <tr><th>sid<th>fpid<th>pIrt<th>pEditHead<th>pEditTail\
514 @ <th>pEditNext<th>pEditPrev<th>hash
515 for(p=pThread->pFirst; p; p=p->pNext){
516 @ <tr><td>%d(p->sid)<td>%d(p->fpid)\
517 @ <td>%d(p->pIrt?p->pIrt->fpid:0)\
 
518 @ <td>%d(p->pEditHead?p->pEditHead->fpid:0)\
519 @ <td>%d(p->pEditTail?p->pEditTail->fpid:0)\
520 @ <td>%d(p->pEditNext?p->pEditNext->fpid:0)\
521 @ <td>%d(p->pEditPrev?p->pEditPrev->fpid:0)\
522 @ <td>%S(p->zUuid)</tr>
523

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button