libpurple/plugins/log_reader.c

changeset 18522
dbf8b610712a
parent 18521
88a85456ae56
child 18523
121b16df5e05
equal deleted inserted replaced
18521:88a85456ae56 18522:dbf8b610712a
1739 char *path; /* FIXME: Change this to use PurpleStringref like log.c:old_logger_list */ 1739 char *path; /* FIXME: Change this to use PurpleStringref like log.c:old_logger_list */
1740 int offset; 1740 int offset;
1741 int length; 1741 int length;
1742 }; 1742 };
1743 1743
1744 static char *qip_get_file_contents(const char *path)
1745 {
1746 GError *error;
1747 char *contents;
1748 char *utf8_string;
1749
1750 purple_debug_info("QIP logger", "Reading %s\n", path);
1751
1752 error = NULL;
1753 if (!g_file_get_contents(path, &contents, NULL, &error)) {
1754 purple_debug_error("QIP logger",
1755 "Couldn't read file %s: %s \n", path, error->message);
1756 g_error_free(error);
1757 return NULL;
1758 }
1759
1760 g_return_val_if_fail(contents != NULL, NULL);
1761
1762 /* Convert file contents from Cp1251 to UTF-8 codeset */
1763 error = NULL;
1764 if (!(utf8_string = g_convert(contents, -1, "UTF-8", "Cp1251", NULL, NULL, &error))) {
1765 purple_debug_error("QIP logger",
1766 "Couldn't convert file %s to UTF-8: %s\n", path, error->message);
1767 g_error_free(error);
1768
1769 g_free(contents);
1770 return NULL;
1771 }
1772
1773 g_free(contents);
1774 contents = g_markup_escape_text(utf8_string, -1);
1775 g_free(utf8_string);
1776
1777 return contents;
1778 }
1779
1780 static GList *qip_logger_list(PurpleLogType type, const char *sn, PurpleAccount *account) 1744 static GList *qip_logger_list(PurpleLogType type, const char *sn, PurpleAccount *account)
1781 { 1745 {
1782 GList *list = NULL; 1746 GList *list = NULL;
1783 const char *logdir; 1747 const char *logdir;
1784 PurplePlugin *plugin; 1748 PurplePlugin *plugin;
1794 gboolean main_cycle = TRUE; 1758 gboolean main_cycle = TRUE;
1795 char *c; 1759 char *c;
1796 char *start_log; 1760 char *start_log;
1797 char *new_line; 1761 char *new_line;
1798 int offset = 0; 1762 int offset = 0;
1763 GError *error;
1799 1764
1800 g_return_val_if_fail(sn != NULL, list); 1765 g_return_val_if_fail(sn != NULL, list);
1801 g_return_val_if_fail(account != NULL, list); 1766 g_return_val_if_fail(account != NULL, list);
1802 1767
1803 /* QIP only supports ICQ. */ 1768 /* QIP only supports ICQ. */
1822 filename = g_strdup_printf("%s.txt", purple_normalize(account, sn)); 1787 filename = g_strdup_printf("%s.txt", purple_normalize(account, sn));
1823 path = g_build_filename(logdir, username, "History", filename, NULL); 1788 path = g_build_filename(logdir, username, "History", filename, NULL);
1824 g_free(username); 1789 g_free(username);
1825 g_free(filename); 1790 g_free(filename);
1826 1791
1827 if ((contents = qip_get_file_contents(path)) == NULL) 1792 purple_debug_info("QIP logger", "Reading %s\n", path);
1828 { 1793
1794 error = NULL;
1795 if (!g_file_get_contents(path, &contents, NULL, &error)) {
1796 purple_debug_error("QIP logger",
1797 "Couldn't read file %s: %s \n", path, error->message);
1798 g_error_free(error);
1829 g_free(path); 1799 g_free(path);
1830 return list; 1800 return list;
1831 } 1801 }
1832 1802
1833 c = contents; 1803 c = contents;
1835 while (main_cycle) { 1805 while (main_cycle) {
1836 1806
1837 gboolean add_new_log = FALSE; 1807 gboolean add_new_log = FALSE;
1838 1808
1839 if (*c) { 1809 if (*c) {
1840 if (purple_str_has_prefix(c, QIP_LOG_IN_MESSAGE_ESC) || 1810 if (purple_str_has_prefix(c, QIP_LOG_IN_MESSAGE) ||
1841 purple_str_has_prefix(c, QIP_LOG_OUT_MESSAGE_ESC)) { 1811 purple_str_has_prefix(c, QIP_LOG_OUT_MESSAGE)) {
1842 1812
1843 char *tmp; 1813 char *tmp;
1844 1814
1845 new_line = c; 1815 new_line = c;
1846 1816
1938 GString *formatted; 1908 GString *formatted;
1939 char *c; 1909 char *c;
1940 const char *line; 1910 const char *line;
1941 gchar *contents; 1911 gchar *contents;
1942 char *selected; 1912 char *selected;
1913 GError *error;
1914 char *utf8_string;
1943 1915
1944 g_return_val_if_fail(log != NULL, g_strdup("")); 1916 g_return_val_if_fail(log != NULL, g_strdup(""));
1945 1917
1946 data = log->logger_data; 1918 data = log->logger_data;
1947 1919
1948 g_return_val_if_fail(data->path != NULL, g_strdup("")); 1920 g_return_val_if_fail(data->path != NULL, g_strdup(""));
1949 g_return_val_if_fail(data->length > 0, g_strdup("")); 1921 g_return_val_if_fail(data->length > 0, g_strdup(""));
1950 1922
1951 if ((contents = qip_get_file_contents(data->path)) == NULL) 1923 error = NULL;
1952 { 1924 if (!g_file_get_contents(data->path, &contents, NULL, &error)) {
1925 purple_debug_error("QIP logger",
1926 "Couldn't read file %s: %s \n", data->path, error->message);
1927 g_error_free(error);
1953 return g_strdup(""); 1928 return g_strdup("");
1954 } 1929 }
1955
1956 buddy = purple_find_buddy(log->account, log->name);
1957 1930
1958 selected = g_strndup(contents + data->offset, data->length + 2); 1931 selected = g_strndup(contents + data->offset, data->length + 2);
1959 selected[data->length] = '\n'; 1932 selected[data->length] = '\n';
1960 selected[data->length + 1] = '\0'; 1933 selected[data->length + 1] = '\0';
1961
1962 g_free(contents); 1934 g_free(contents);
1963 contents = selected; 1935 contents = selected;
1936
1937 /* Convert file contents from Cp1251 to UTF-8 codeset */
1938 error = NULL;
1939 if (!(utf8_string = g_convert(contents, -1, "UTF-8", "Cp1251", NULL, NULL, &error))) {
1940 purple_debug_error("QIP logger",
1941 "Couldn't convert file %s to UTF-8: %s\n", data->path, error->message);
1942 g_error_free(error);
1943 g_free(contents);
1944 return g_strdup("");
1945 }
1946
1947 g_free(contents);
1948 contents = g_markup_escape_text(utf8_string, -1);
1949 g_free(utf8_string);
1950
1951 buddy = purple_find_buddy(log->account, log->name);
1964 1952
1965 /* Apply formatting... */ 1953 /* Apply formatting... */
1966 formatted = g_string_sized_new(data->length + 2); 1954 formatted = g_string_sized_new(data->length + 2);
1967 c = contents; 1955 c = contents;
1968 line = contents; 1956 line = contents;

mercurial