| 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; |
| 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; |
| 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; |