source: titan/plugins/kravencfg/kravencfg.c @ 35769

Last change on this file since 35769 was 35769, checked in by tobayer, 9 years ago

[plugin] add kravencfg, 1st step

File size: 7.7 KB
Line 
1#include "../titan/struct.h"
2#include "../titan/debug.h"
3#include "../titan/header.h"
4
5#define MAX_KRAVENCFGS 20
6#define MAX_VARIANTS 10
7
8char pluginname[] = "kravencfg";
9char plugindesc[] = "kravencfg";
10char pluginpic[] = "%pluginpath%/kravencfg/plugin.png";
11
12int pluginaktiv = 0;
13int pluginversion = PLUGINVERSION;
14//int pluginversion = 999999; // = nopluginversion
15
16struct KravenCfg {
17        char* Name;
18        char* Variant[MAX_VARIANTS];
19} KravenCfgs[MAX_KRAVENCFGS];
20
21int check_kravencfg() {
22        char *tmpstr = NULL;
23
24        if(getconfig("skinpath", NULL) != NULL) {
25                tmpstr = getconfig("skinpath", NULL);
26                tmpstr = ostrstr(tmpstr, "KravenHD");
27                if(tmpstr == NULL) {
28                        debug(10, "KravenHD not found!");
29                        return -1;
30                } else {
31                        debug(10, "KravenHD found!");
32                        return 0;
33                }
34        } else return -1;
35}
36
37int filter_xml(const struct dirent *dir) {
38        int len = strlen( dir->d_name );
39
40        if(len < 4)
41                return 0;
42
43        return strcmp(dir->d_name+len-4,".xml") == 0;
44}
45
46void screen_kravencfg() {
47        char *tmpstr = NULL, *skinpath = NULL, *snippetspath = NULL, *kravencfg_sh = NULL, *token = NULL, *saveptr = NULL;
48        int i = 0, n = 0, x = 0, y = 0;
49        struct dirent **filelist;
50
51        skinpath = getconfig("skinpath", NULL);
52        snippetspath = ostrcat(skinpath, "/snippets", 0, 0);
53        kravencfg_sh = createpluginpath("/kravencfg/kravencfg.sh", 0);
54
55        //debug(10, "********************************************************");
56        //debug(10, "skinpath: %s", skinpath);
57        //debug(10, "snippetspath: %s", snippetspath);
58        //debug(10, "kravencfg_sh: %s", kravencfg_sh);
59        //debug(10, "********************************************************");
60
61        n = scandir(snippetspath, &filelist, filter_xml, alphasort);
62        //debug(10, "scandir n = %d", n);
63
64        if (n < 1) {
65                perror("scandir");
66                textbox(_("Message"), _("No skin snippets found!"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 0, 0);
67                return;
68        } else {
69                for (i = 0; i < n; i++) {
70                        tmpstr = strdup(filelist[i]->d_name);
71                        //debug(10, "tmpstr(%d/%d): %s", i, n-1, tmpstr);
72
73                        token = strtok_r(tmpstr, "-" , &saveptr);
74                        //debug(10, "token: %s", token);
75
76                        if(token != NULL) {
77                                if(i > 0) {
78                                        //debug(10, "KravenCfgs[%d].Name: %s", x, KravenCfgs[x].Name);
79                                        if(ostrcmp(KravenCfgs[x].Name, token) != 0) {
80                                                x++;
81                                                y = 0;
82                                                KravenCfgs[x].Name = token;
83                                                //debug(10, "KravenCfgs[%d].Name: %s", x, KravenCfgs[x].Name);
84                                        }
85                                } else {
86                                        KravenCfgs[x].Name = token;
87                                        //debug(10, "KravenCfgs[%d].Name: %s", x, KravenCfgs[x].Name);
88                                }
89                        }
90
91                        while(token != NULL) {
92                                if(ostrcmp(token, "xml") != 0 && ostrcmp(KravenCfgs[x].Name, token) != 0) {
93                                        //debug(10, "token: %s", token);
94                                        KravenCfgs[x].Variant[y] = token;
95                                        //debug(10, "KravenCfgs[%d].Variant[%d]: %s", x, y, KravenCfgs[x].Variant[y]);
96                                        y++;
97                                }
98                                token=strtok_r(NULL, ".", &saveptr);
99                        }
100
101                        free(filelist[i]);
102                }
103                free(filelist);
104        }
105
106        //debug(10, "size of KravenCfgs[x].Variant[y]: %d", sizeof(KravenCfgs));
107        //debug(10, "********************************************************");
108
109
110        int rcret = 0;
111        struct skin* skin_kravencfg = getscreen("kravencfg");
112        struct skin* skin_listbox = getscreennode(skin_kravencfg, "listbox");
113        struct skin* skin_png = getscreennode(skin_kravencfg, "png");
114        struct skin* skin_dummy = getscreennode(skin_kravencfg, "dummy");
115        struct skin* skin_tmp = NULL;
116
117        delmarkedscreennodes(skin_kravencfg, 1);
118        skin_listbox->aktpage = -1;
119        skin_listbox->aktline = 1;
120
121        for (x = 0; x < MAX_KRAVENCFGS; x++) {
122                if(KravenCfgs[x].Name != NULL) {
123                        skin_tmp = addlistbox(skin_kravencfg, skin_listbox, skin_tmp, 1);
124                        if(skin_tmp != NULL) {
125                                skin_tmp->type = CHOICEBOX;
126                                changename(skin_tmp, KravenCfgs[x].Name);
127                                changetext(skin_tmp, KravenCfgs[x].Name);
128                                if(skin_dummy != status.skinerr) {
129                                        skin_tmp->hspace = skin_dummy->hspace;
130                                        skin_tmp->vspace = skin_dummy->vspace;
131                                        skin_tmp->halign = skin_dummy->halign;
132                                        skin_tmp->valign = skin_dummy->valign;
133                                        skin_tmp->width = skin_dummy->width;
134                                        skin_tmp->height = skin_dummy->height;
135                                }
136                        }
137                        for (y = 0; y < MAX_VARIANTS; y++) {
138                                if(KravenCfgs[x].Variant[y] != NULL) {
139                                        addchoicebox(skin_tmp, KravenCfgs[x].Variant[y], _(KravenCfgs[x].Variant[y]));
140                                        //debug(10, "KravenCfgs[%d].Variant[%d]: %s %s", x, y, KravenCfgs[x].Name, KravenCfgs[x].Variant[y]);
141                                }
142                        }
143                setchoiceboxselection(skin_tmp, getskinconfig(KravenCfgs[x].Name, NULL));
144                //debug(10, "getskinconfig (%s) KravenCfgs[%d].Name (%s): %s", skin_tmp->name, x, KravenCfgs[x].Name, getskinconfig(KravenCfgs[x].Name, NULL));
145                }
146        }
147
148        changepic(skin_png, NULL);
149        drawscreen(skin_kravencfg, 0, 0);
150        addscreenrc(skin_kravencfg, skin_listbox);
151        skin_tmp = skin_listbox->select;
152
153        int count = 0;
154
155        while(1) {
156                addscreenrc(skin_kravencfg, skin_tmp);
157                if(count > 0) rcret = waitrc(skin_kravencfg, 0, 0);
158                skin_tmp = skin_listbox->select;
159
160                if(count == 0 || rcret == getrcconfigint("rcup", NULL) || rcret == getrcconfigint("rcdown", NULL) || rcret == getrcconfigint("rcleft", NULL) || rcret == getrcconfigint("rcright", NULL)) {
161                        //debug(10, "skin_listbox->aktline = %d", skin_listbox->aktline);
162                        //debug(10, "skin_listbox->aktline = %s", skin_listbox->select->name);
163                        //debug(10, "skin_listbox->aktline = %s", skin_tmp->name);
164                        //debug(10, "skin_listbox->aktline = %s", skin_listbox->select->ret);
165                        //debug(10, "skin_listbox->aktline = %s", skin_tmp->ret);
166
167                        tmpstr = ostrcat(snippetspath, "/", 0, 0);
168                        tmpstr = ostrcat(tmpstr, skin_listbox->select->name, 0, 0);
169                        tmpstr = ostrcat(tmpstr, "-", 0, 0);
170                        tmpstr = ostrcat(tmpstr, skin_listbox->select->ret, 0, 0);
171                        tmpstr = ostrcat(tmpstr, ".png", 0, 0);
172
173                        //debug(10, "changepic: %s", tmpstr);
174
175                        changepic(skin_png, tmpstr);
176                        drawscreen(skin_kravencfg, 0, 0);
177                        tmpstr = NULL;
178
179                        count = 1;
180                        //debug(10, "********************************************************");
181                }
182
183                if(rcret == getrcconfigint("rcexit", NULL)) break;
184
185                if(rcret == getrcconfigint("rcok", NULL)) {
186                        //debug(10, "********************************************************");
187                        while(skin_listbox != NULL) {
188                                if(skin_listbox->type == CHOICEBOX) {
189                                        //debug(10, "%s-%s", skin_listbox->name, skin_listbox->ret);
190                                        addskinconfigscreencheck(skin_listbox->name, skin_listbox, "0");
191
192                                        tmpstr = ostrcat(kravencfg_sh, " ", 0, 0);
193                                        tmpstr = ostrcat(tmpstr, skin_listbox->name, 0, 0);
194                                        tmpstr = ostrcat(tmpstr, " ", 0, 0);
195                                        tmpstr = ostrcat(tmpstr, skin_listbox->ret, 0, 0);
196                                        tmpstr = ostrcat(tmpstr, " ", 0, 0);
197                                        tmpstr = ostrcat(tmpstr, skinpath, 0, 0);
198
199                                        //debug(10, "*********************** start cmd here *********************************");
200                                        //debug(10, "%s", tmpstr);
201                                        system(tmpstr);
202                                        tmpstr = NULL;
203                                        //debug(10, "************************************************************************");
204
205                                }
206                                skin_listbox = skin_listbox->next;
207                        }
208                        //debug(10, "********************************************************");
209
210                        writeskinconfigtmp();
211
212                        textbox(_("Message"), _("Titan will be restarted!"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 0, 0);
213                        oshutdown(3, 0);
214
215                        break;
216                }
217        }
218
219        delmarkedscreennodes(skin_kravencfg, 1);
220        delownerrc(skin_kravencfg);
221        clearscreen(skin_kravencfg);
222}
223
224//wird beim Laden ausgefuehrt
225void init(void) {
226        char *tmpstr = NULL;
227
228        tmpstr = createpluginpath("/kravencfg/skin.xml", 0);
229        readscreen(tmpstr, 211, 1);
230        free(tmpstr); tmpstr = NULL;
231
232        pluginaktiv = 1;
233        debug(10, "kravencfg plugin loaded!");
234}
235
236//wird beim Entladen ausgefuehrt
237void deinit(void) {
238        delmarkedscreen(211);
239        pluginaktiv = 0;
240        debug(10, "kravencfg plugin removed!");
241}
242
243//wird in der Pluginverwaltung bzw Menue ausgefuehrt
244void start(void) {
245        if(check_kravencfg() == 0) {
246                screen_kravencfg();
247        } else {
248                textbox(_("Message"), _("KravenHD skin isn't active!"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 0, 0);
249        }
250}
Note: See TracBrowser for help on using the repository browser.