/* * This file part of gsopcast - A gtk front-end of p2p tv sopcast. * http://lianwei3.googlepages.com/home2 * Copyright (C) 2006 Wei Lian * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "header.h" #include "channel.h" extern char channels_url[64]; extern char tree_state[64]; extern char channels_url_header[64]; extern char record_dir[64]; extern GtkWidget *entry_player; extern GtkWidget *entry_url; extern GtkWidget *entry_url_header; extern GtkWidget *entry_record_dir; extern GtkWidget *entry_inport; extern GtkWidget *entry_outport; extern GtkWidget *window1; char org_tree_state[64]; //----------------------------------------------------- void load_config() { //initialize by default strcpy(channels_url, "http://www.sopcast.com/gchlxml"); strcpy(channels_url_header, "sop://"); strcpy(record_dir, getenv("HOME")); strcat(record_dir, "/SOPCAST/"); int width = 350, height = 450; gtk_entry_set_text(GTK_ENTRY(entry_player), "mplayer -ontop -geometry 100%:100%"); gtk_entry_set_text(GTK_ENTRY(entry_url), channels_url); gtk_entry_set_text(GTK_ENTRY(entry_url_header), channels_url_header); gtk_entry_set_text(GTK_ENTRY(entry_record_dir), record_dir); gtk_widget_set_usize(GTK_WIDGET(window1), width, height); gtk_window_set_policy(GTK_WINDOW(window1), TRUE, TRUE, FALSE); char *line = NULL; size_t len = 0; char *strtok_buffer = NULL; char *ptr; std::string data_path = getenv("HOME"); data_path += "/.gsopcast/config"; FILE *fp = fopen(data_path.c_str(), "r"); if (fp == NULL) return; while (getline(&line, &len, fp) != -1) { ///player if (strncmp(line, "player=", strlen("player=")) == 0) { strtok_r(line, "\n", &strtok_buffer); gtk_entry_set_text(GTK_ENTRY(entry_player), line + strlen("player=")); } ///channels_url else if (strncmp(line, "channels_url=", strlen("channels_url=")) == 0) { strtok_r(line, "\n", &strtok_buffer); gtk_entry_set_text(GTK_ENTRY(entry_url), line + strlen("channels_url=")); strcpy(channels_url, line + strlen("channels_url=")); } ///channels_url_header else if (strncmp (line, "channels_url_header=", strlen("channels_url_header=")) == 0) { strtok_r(line, "\n", &strtok_buffer); gtk_entry_set_text(GTK_ENTRY(entry_url_header), line + strlen("channels_url_header=")); strcpy(channels_url_header, line + strlen("channels_url_header=")); } ///record_dir else if (strncmp(line, "record_dir=", strlen("record_dir=")) == 0) { strtok_r(line, "\n", &strtok_buffer); gtk_entry_set_text(GTK_ENTRY(entry_record_dir), line + strlen("record_dir=")); strcpy(record_dir, line + strlen("record_dir=")); } /// inport (xihels@gmail.com) else if (strncmp(line, "inport=", strlen("inport=")) == 0) { strtok_r(line, "\n", &strtok_buffer); gtk_entry_set_text(GTK_ENTRY(entry_inport), line + strlen("inport=")); } /// outport(xihes@gmail.com) else if (strncmp(line, "outport=", strlen("outport=")) == 0) { strtok_r(line, "\n", &strtok_buffer); gtk_entry_set_text(GTK_ENTRY(entry_outport), line + strlen("outport=")); } ///window size else if (strncmp(line, "win_size=", strlen("win_size=")) == 0) { width = atoi(line + strlen("win_size=")); width = width >= 342 ? width : 342; width = width <= 800 ? width : 800; ptr = strstr(line, ","); ptr++; height = atoi(ptr); height = height >= 161 ? height : 161; height = height <= 600 ? height : 600; gtk_widget_set_usize(GTK_WIDGET(window1), width, height); gtk_window_set_policy(GTK_WINDOW(window1), TRUE, TRUE, FALSE); } } fclose(fp); if (line) free(line); } //----------------------------------------------------- void save_config() { std::string data_path = getenv("HOME"); data_path += "/.gsopcast/"; if (access(data_path.c_str(), F_OK)) mkdir(data_path.c_str(), S_IRWXU); data_path += "config"; FILE *fp = fopen(data_path.c_str(), "w"); if (fp == NULL) { perror("path to file config is invalid"); return; } const gchar *line; ////player line = gtk_entry_get_text(GTK_ENTRY(entry_player)); fprintf(fp, "player="); fwrite(line, 1, strlen(line), fp); fprintf(fp, "\n"); ///channels_url line = gtk_entry_get_text(GTK_ENTRY(entry_url)); strcpy(channels_url, line); fprintf(fp, "channels_url="); fwrite(line, 1, strlen(line), fp); fprintf(fp, "\n"); ///channels_url_header line = gtk_entry_get_text(GTK_ENTRY(entry_url_header)); strcpy(channels_url_header, line); fprintf(fp, "channels_url_header="); fwrite(line, 1, strlen(line), fp); fprintf(fp, "\n"); ///record_dir line = gtk_entry_get_text(GTK_ENTRY(entry_record_dir)); strcpy(record_dir, line); fprintf(fp, "record_dir="); fwrite(line, 1, strlen(line), fp); fprintf(fp, "\n"); /// inport(xihels@gmail.com) line = gtk_entry_get_text(GTK_ENTRY(entry_inport)); fprintf(fp, "inport="); fwrite(line, 1, strlen(line), fp); fprintf(fp, "\n"); // outport(xihels@gmail.com) line = gtk_entry_get_text(GTK_ENTRY(entry_outport)); fprintf(fp, "outport="); fwrite(line, 1, strlen(line), fp); fprintf(fp, "\n"); ///store win size int width, height; gtk_window_get_size(GTK_WINDOW(window1), &width, &height); fprintf(fp, "win_size="); fprintf(fp, "%d", width); fprintf(fp, ","); fprintf(fp, "%d", height); fclose(fp); } //----------------------------------------------------- void load_tree_state() { memset(tree_state, 0, sizeof(tree_state)); memset(org_tree_state, 0, sizeof(org_tree_state)); std::string data_path = getenv("HOME"); data_path += "/.gsopcast/tree"; FILE *fp = fopen(data_path.c_str(), "r"); if (fp != NULL) { fread(tree_state, 1, sizeof(tree_state), fp); memcpy(org_tree_state, tree_state, sizeof(tree_state)); fclose(fp); } } //----------------------------------------------------- void save_tree_state() { store_tree_state(); if (memcmp(tree_state, org_tree_state, sizeof(tree_state))) ////if different { ////save tree state std::string data_path = getenv("HOME"); data_path += "/.gsopcast/"; if (access(data_path.c_str(), F_OK)) mkdir(data_path.c_str(), S_IRWXU); data_path += "tree"; FILE *fp = fopen(data_path.c_str(), "w"); if (fp == NULL) { perror("path to file tree is invalid"); return; } fwrite(tree_state, 1, sizeof(tree_state), fp); fclose(fp); } }