Fossil

Check-in [a8d90b1f4f]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Remove mfirt
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | andygoth-forum-refactor
Files: files | file ages | folders
SHA3-256: a8d90b1f4fe63bb607b7d5b4cab6ab1b84d63bb0ca0c96654b37488f0c8f691b
User & Date: andygoth 2020-08-21 22:03:37.956
Context
2020-08-21
22:58
Extend translator to support two- and three-argument printf specifiers, e.g. "%.*s(len)(str)" or "%*.*d(width)(prec)(val)" ... (check-in: df7b0c3186 user: andygoth tags: andygoth-forum-refactor)
22:03
Remove mfirt ... (check-in: a8d90b1f4f user: andygoth tags: andygoth-forum-refactor)
21:52
Remove fprev ... (check-in: d585c34707 user: andygoth tags: andygoth-forum-refactor)
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/forum.c.
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
** Each instance of the following object represents a single message -
** either the initial post, an edit to a post, a reply, or an edit to
** a reply.
*/
struct ForumEntry {
  int fpid;              /* rid for this entry */
  int mfirt;             /* Root in-reply-to */
  int sid;               /* Serial ID number */
  char *zUuid;           /* Artifact hash */
  ForumEntry *pIrt;      /* This entry replies to pIrt */
  ForumEntry *pEditHead; /* Original, unedited entry */
  ForumEntry *pEditTail; /* Most recent edit for this entry */
  ForumEntry *pEditNext; /* This entry is edited by pEditNext */
  ForumEntry *pEditPrev; /* This entry is an edit of pEditPrev */







<







30
31
32
33
34
35
36

37
38
39
40
41
42
43
/*
** Each instance of the following object represents a single message -
** either the initial post, an edit to a post, a reply, or an edit to
** a reply.
*/
struct ForumEntry {
  int fpid;              /* rid for this entry */

  int sid;               /* Serial ID number */
  char *zUuid;           /* Artifact hash */
  ForumEntry *pIrt;      /* This entry replies to pIrt */
  ForumEntry *pEditHead; /* Original, unedited entry */
  ForumEntry *pEditTail; /* Most recent edit for this entry */
  ForumEntry *pEditNext; /* This entry is edited by pEditNext */
  ForumEntry *pEditPrev; /* This entry is an edit of pEditPrev */
127
128
129
130
131
132
133

134
135


136
137
138
139
140
141

142
143
144
145
146
147
148
*/
static void forumthread_display_order(
  ForumThread *pThread,    /* The complete thread */
  ForumEntry *pBase        /* Add replies to this entry */
){
  ForumEntry *p;
  ForumEntry *pPrev = 0;

  for(p=pBase->pNext; p; p=p->pNext){
    if( !p->pEditPrev && p->mfirt==pBase->fpid ){


      if( pPrev ){
        pPrev->nIndent = pBase->nIndent + 1;
        forumentry_add_to_display(pThread, pPrev);
        forumthread_display_order(pThread, pPrev);
      }
      pPrev = p;

    }
  }
  if( pPrev ){
    pPrev->nIndent = pBase->nIndent + 1;
    if( pPrev->nIndent>pThread->mxIndent ) pThread->mxIndent = pPrev->nIndent;
    forumentry_add_to_display(pThread, pPrev);
    forumthread_display_order(pThread, pPrev);







>

|
>
>
|
|
|
|
|
|
>







126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
*/
static void forumthread_display_order(
  ForumThread *pThread,    /* The complete thread */
  ForumEntry *pBase        /* Add replies to this entry */
){
  ForumEntry *p;
  ForumEntry *pPrev = 0;
  ForumEntry *pBaseIrt;
  for(p=pBase->pNext; p; p=p->pNext){
    if( !p->pEditPrev && p->pIrt ){
      pBaseIrt = p->pIrt->pEditHead ? p->pIrt->pEditHead : p->pIrt;
      if( pBaseIrt==pBase ){
        if( pPrev ){
          pPrev->nIndent = pBase->nIndent + 1;
          forumentry_add_to_display(pThread, pPrev);
          forumthread_display_order(pThread, pPrev);
        }
        pPrev = p;
      }
    }
  }
  if( pPrev ){
    pPrev->nIndent = pBase->nIndent + 1;
    if( pPrev->nIndent>pThread->mxIndent ) pThread->mxIndent = pPrev->nIndent;
    forumentry_add_to_display(pThread, pPrev);
    forumthread_display_order(pThread, pPrev);
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
  while( db_step(&q)==SQLITE_ROW ){
    pEntry = fossil_malloc( sizeof(*pEntry) );
    memset(pEntry, 0, sizeof(*pEntry));
    pEntry->fpid = db_column_int(&q, 0);
    firt = db_column_int(&q, 1);
    fprev = db_column_int(&q, 2);
    pEntry->zUuid = fossil_strdup(db_column_text(&q,3));
    pEntry->mfirt = firt;
    pEntry->sid = sid++;
    pEntry->pPrev = pThread->pLast;
    pEntry->pNext = 0;
    if( pThread->pLast==0 ){
      pThread->pFirst = pEntry;
    }else{
      pThread->pLast->pNext = pEntry;
    }
    if( firt ){
      pEntry->pIrt = pThread->pFirst;
      for(p=pThread->pFirst; p; p=p->pNext){
        if( p->fpid==firt ){
          pEntry->pIrt = p;
          break;
        }
      }
    }
    if( fprev ){
      ForumEntry *pBase = 0;
      p = forumentry_backward(pEntry->pPrev, fprev);
      p->pEditNext = pEntry;
      pEntry->pEditPrev = p;
      pEntry->pEditHead = p->pEditHead ? p->pEditHead : p;
      while( p ){
        pBase = p;
        p->pEditTail = pEntry;
        p = p->pEditPrev;
      }
      for(p=pEntry->pNext; p; p=p->pNext){
        if( p->mfirt==pEntry->fpid ) p->mfirt = pBase->fpid;
      }
    }
    pThread->pLast = pEntry;
  }
  db_finalize(&q);

  if( computeHierarchy ){







<


















<




<
|

<
<
<
<







173
174
175
176
177
178
179

180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197

198
199
200
201

202
203




204
205
206
207
208
209
210
  while( db_step(&q)==SQLITE_ROW ){
    pEntry = fossil_malloc( sizeof(*pEntry) );
    memset(pEntry, 0, sizeof(*pEntry));
    pEntry->fpid = db_column_int(&q, 0);
    firt = db_column_int(&q, 1);
    fprev = db_column_int(&q, 2);
    pEntry->zUuid = fossil_strdup(db_column_text(&q,3));

    pEntry->sid = sid++;
    pEntry->pPrev = pThread->pLast;
    pEntry->pNext = 0;
    if( pThread->pLast==0 ){
      pThread->pFirst = pEntry;
    }else{
      pThread->pLast->pNext = pEntry;
    }
    if( firt ){
      pEntry->pIrt = pThread->pFirst;
      for(p=pThread->pFirst; p; p=p->pNext){
        if( p->fpid==firt ){
          pEntry->pIrt = p;
          break;
        }
      }
    }
    if( fprev ){

      p = forumentry_backward(pEntry->pPrev, fprev);
      p->pEditNext = pEntry;
      pEntry->pEditPrev = p;
      pEntry->pEditHead = p->pEditHead ? p->pEditHead : p;

      for(; p; p=p->pEditPrev ){
        p->pEditTail = pEntry;




      }
    }
    pThread->pLast = pEntry;
  }
  db_finalize(&q);

  if( computeHierarchy ){
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
  fossil_print("fpid  = %d\n", fpid);
  fossil_print("froot = %d\n", froot);
  pThread = forumthread_create(froot, 1);
  fossil_print("Chronological:\n");
  fossil_print(
/* 0         1         2         3         4         5         6         7    */
/*  123456789 123456789 123456789 123456789 123456789 123456789 123456789 123 */
  " sid      fpid      pIrt pEditPrev     mfirt pEditTail hash\n");
  for(p=pThread->pFirst; p; p=p->pNext){
    fossil_print("%4d %9d %9d %9d %9d %9d %8.8s\n", p->sid,
       p->fpid, p->pIrt ? p->pIrt->fpid : 0,
       p->pEditPrev ? p->pEditPrev->fpid : 0,
       p->mfirt,
       p->pEditTail ? p->pEditTail->fpid : 0, p->zUuid);
  }
  fossil_print("\nDisplay\n");
  for(p=pThread->pDisplay; p; p=p->pDisplay){
    fossil_print("%*s", (p->nIndent-1)*3, "");
    if( p->pEditTail ){
      fossil_print("%d->%d\n", p->fpid, p->pEditTail->fpid);







|

|


<







285
286
287
288
289
290
291
292
293
294
295
296

297
298
299
300
301
302
303
  fossil_print("fpid  = %d\n", fpid);
  fossil_print("froot = %d\n", froot);
  pThread = forumthread_create(froot, 1);
  fossil_print("Chronological:\n");
  fossil_print(
/* 0         1         2         3         4         5         6         7    */
/*  123456789 123456789 123456789 123456789 123456789 123456789 123456789 123 */
  " sid      fpid      pIrt pEditPrev pEditTail hash\n");
  for(p=pThread->pFirst; p; p=p->pNext){
    fossil_print("%4d %9d %9d %9d %9d %8.8s\n", p->sid,
       p->fpid, p->pIrt ? p->pIrt->fpid : 0,
       p->pEditPrev ? p->pEditPrev->fpid : 0,

       p->pEditTail ? p->pEditTail->fpid : 0, p->zUuid);
  }
  fossil_print("\nDisplay\n");
  for(p=pThread->pDisplay; p; p=p->pDisplay){
    fossil_print("%*s", (p->nIndent-1)*3, "");
    if( p->pEditTail ){
      fossil_print("%d->%d\n", p->fpid, p->pEditTail->fpid);
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530

  /* Undocumented "threadtable" query parameter causes thread table
  ** to be displayed for debugging purposes.
  */
  if( PB("threadtable") ){
    @ <hr>
    @ <table border="1" cellpadding="3" cellspacing="0">
    @ <tr><th>sid<th>fpid<th>pIrt<th>mfirt<th>pEditHead<th>pEditTail\
    @ <th>pEditNext<th>pEditPrev<th>hash
    for(p=pThread->pFirst; p; p=p->pNext){
      @ <tr><td>%d(p->sid)<td>%d(p->fpid)\
      @ <td>%d(p->pIrt?p->pIrt->fpid:0)\
      @ <td>%d(p->mfirt)\
      @ <td>%d(p->pEditHead?p->pEditHead->fpid:0)\
      @ <td>%d(p->pEditTail?p->pEditTail->fpid:0)\
      @ <td>%d(p->pEditNext?p->pEditNext->fpid:0)\
      @ <td>%d(p->pEditPrev?p->pEditPrev->fpid:0)\
      @ <td>%S(p->zUuid)</tr>
    }
    @ </table>







|




<







506
507
508
509
510
511
512
513
514
515
516
517

518
519
520
521
522
523
524

  /* Undocumented "threadtable" query parameter causes thread table
  ** to be displayed for debugging purposes.
  */
  if( PB("threadtable") ){
    @ <hr>
    @ <table border="1" cellpadding="3" cellspacing="0">
    @ <tr><th>sid<th>fpid<th>pIrt<th>pEditHead<th>pEditTail\
    @ <th>pEditNext<th>pEditPrev<th>hash
    for(p=pThread->pFirst; p; p=p->pNext){
      @ <tr><td>%d(p->sid)<td>%d(p->fpid)\
      @ <td>%d(p->pIrt?p->pIrt->fpid:0)\

      @ <td>%d(p->pEditHead?p->pEditHead->fpid:0)\
      @ <td>%d(p->pEditTail?p->pEditTail->fpid:0)\
      @ <td>%d(p->pEditNext?p->pEditNext->fpid:0)\
      @ <td>%d(p->pEditPrev?p->pEditPrev->fpid:0)\
      @ <td>%S(p->zUuid)</tr>
    }
    @ </table>