summaryrefslogblamecommitdiffstats
path: root/todo.c
blob: d3d14642c300d2544f01dc97e1a04c575fcf9f91 (plain) (tree)
1
2
3
4
5
6
7
8
9

                 

                  

                                                 
                  
 
                        


                           
                                      





                            





                                                      

                                      
                                               
 
                                   
                                        
 

                                 

                                        
                                                          
 


                                            
                 


                                                                   
                         

                                                            
                                                                                            







                                                            
                                      













                                                                                    




                                                                          





                                                                               
                                         
                                                                                                           

                                                                  
                                         

                                      
 






                                                                                     
                                
                                                               





                                

 















                                                                 
                                                 


                                   
                                                                 

                       
                                           
                                       
                             










                                             















                                                                     

                                                      


                   

                                                  
                
                                          







                                
 
                              
         






                                                      
                                               

















                                                                      
                            

                            
                                  


                                      
         
 





































                                                                   

 
     
#include "todo.h"

#ifdef CONFIG_TODO

int bbs_todo( term_screen *ts, const char *fname)
{
	int ret=0;

	int quit_loop=0;
	int menu_input = 0;
	char menu_cmd = 0;
	int row = 0;
	const char *todo_fname = NULL;

	if ( ts == NULL )
		return ret;


	if ( fname == NULL )
	{
		todo_fname = CONFIG_TODO_DEFAULT_FILE;
	} else
	{
		todo_fname = fname;
	}

	List *todo_list = llist_new();
	bbs_todo_load( todo_fname, todo_list );

	//log that someone use todo
	bbs_log( NULL, "visited TODO" );

	while( (quit_loop == 0) )
	{
		term_clr_scr( ts );
		term_cur_set_c( ts, 0 );
		term_printf( ts, "(A)dd,(R)emove,(Q)uit");

		//dispaly todo list
		row = term_get_maxrow( ts );
		term_cur_set_c( ts, 0 );
		{
			struct ListNode *iter=todo_list->first;
			int cnt = 1;
			while ( (iter != NULL) || ( cnt > row - 2))
			{
				term_cur_set_c( ts, 0 );
				term_cur_set_r( ts, 1+cnt );
				term_printf( ts,  "[%02d] -> %s\n", cnt, (char *)iter->val);
				cnt += 1;
				iter = iter->next;
			}
		}


		term_cur_set_c( ts, 0 );
		term_cur_set_r( ts, term_get_maxrow( ts ) );
		term_printf( ts, ":");

		menu_input = term_getc( ts );
		//if something whent wrong dont know why, need to get some test case
		if ( menu_input == -1 )
			continue;
		menu_cmd = (char)menu_input;

		switch( menu_cmd )
		{
			case 'q':
			case 'Q':
				quit_loop = 1;
				break;

			case 'a':
			case 'A':
				bbs_todo_add( ts, todo_list, todo_fname );
				break;

			case 's':
			case 'S':
				{
					struct ListNode *iter=todo_list->first;
					int cnt = 1;
					while (iter != NULL)
					{
						term_printf( ts, "[%02d] -> %s\n", cnt, (char *)iter->val);
						cnt += 1;
						iter = iter->next;
					}
				}
				break;

			case 'r':
			case 'R':
				{
					bbs_todo_remove( ts, todo_list, todo_fname );
				}
				break;

			default:
				term_printf( ts, "Try more\n");
		}
	}

	llist_free( todo_list );

	return ret;
}

int bbs_todo_add( term_screen *ts, List *todo, const char *fname)
{
	int ret = -1;
	int fret = -1;
	const int buf_size = 64;
	char buf[buf_size];

	if ( ts == NULL )
		return -1;

	if ( fname == NULL )
		return -1;

	term_clr_scr( ts );
	term_cur_set_c( ts, 0 );
	term_cur_set_r( ts, 0 );
	term_printf( ts, "Add new todo task:\n");

	memset( buf, 0, buf_size );
	term_cur_set_c( ts, 0 );
	fret = term_readline( ts, buf, buf_size, READLINE_TEXT );
	if ( fret > 0 )
	{
		char *l = malloc( fret+1 );
		memcpy( l, buf, fret );
		l[fret]='\0';
		llist_push( todo, l );
		bbs_todo_save( fname, todo );
		ret = 0;
	} else
	{
		return -1;
	}

	return ret;
}

int bbs_todo_remove( term_screen *ts, List *todo, const char *fname )
{
	int ret=-1;

	if ( ts == NULL )
		return ret;

	if ( todo == NULL )
		return ret;

	if ( fname == NULL )
		return ret;

	term_clr_scr( ts );
	term_cur_set_c( ts, 0 );
	term_cur_set_r( ts, 0 );
	term_printf( ts, "Remove entry from todo:\n");

	return ret;
}

int bbs_todo_save( const char *fname, List *todo )
{
	FILE *f;
	struct ListNode *iter=todo->first;
	int count_max = 0;

	f = fopen( fname, "w" );

	if ( f == NULL )
	{
		return -1;
	}

	while ( iter != NULL )
	{

		netbyte_store nb;
		nb_u8arr      td;
		int er=0;
		uint8_t *res=NULL;

		size_t str_size = strlen( iter->val );
		char *str = malloc( str_size );

		memcpy( str, iter->val, str_size );

		nb_init( &nb );
		er = nb_u8arr_create( &td, str_size, (uint8_t *)str );
		if (er)
			printf("er create u8arr: %d\n",er);

		er = nb_add_u8arr( &nb, &td );
		if (er)
			printf("er add u8arr: %d\n",er);

		res = nb_create( &nb );



		fwrite( res, 1, nb.size, f );

		free( str );
		free( res );

		iter = iter->next;
		if