aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* browse: ensure that filelist!=NULLMax Kellermann2008-09-212-4/+18
| | | | | There are several places where browser.filelist can become NULL. Catch that everywhere and generate an empty filelist in this case.
* browser: check if the selection is validMax Kellermann2008-09-212-1/+8
| | | | Don't call filelist_get() with an invalid index.
* support: added assertionsMax Kellermann2008-09-211-0/+16
| | | | Check the function parameters.
* screen_artist: check if anything is selectedMax Kellermann2008-09-211-0/+8
| | | | | Don't try to call add_query() with no valid selection, this causes a segfault. This usually happens when ncmpc isn't connected.
* libmpdclient: added another connection->sock checkMax Kellermann2008-09-211-0/+6
| | | | Check if connection->sock is valid in mpd_executeCommand().
* mpdclient: check errorCode only if MPD_ERROR_ACK is setMax Kellermann2008-09-211-1/+2
| | | | | | connection->errorCode has an undefined value when connection->error is not MPD_ERROR_ACK. Read it only if MPD_ERROR_ACK is set, to make valgrind happy.
* mpdclient: fix memory leak in mpdclient_finish_command()Max Kellermann2008-09-211-4/+5
| | | | | During authentication, the message pointer was allocated, but never freed. Allocate it only if it is really used (and freed).
* code style, indent with tabs VIIIMax Kellermann2008-09-211-171/+143
| | | | Follow the same code style als MPD itself.
* libmpdclient: check connection->sock >= 0Max Kellermann2008-09-211-0/+10
| | | | | mpd_wait() must not be called when the socket is dead; add an assertion there. In mpd_recv(), add a run-time check.
* added optional bitrate display to status barJ. Alexander Treuman2008-09-213-4/+20
| | | | | If visible-bitrate is enabled, then the current bitrate will be drawn next to the song time in the status bar. By default it will not be displayed.
* wreadln: adding additional line editing bindsJ. Alexander Treuman2008-09-211-1/+9
| | | | | Adding some GNU readline-style binds. These are ^B/^F to move the cursor back/forward, and ^N/^P to go to the next/previous line.
* ncmpc.1: -k is the short version of --key-file, not -PJ. Alexander Treuman2008-09-211-1/+1
|
* generate po/Makefile.in instead of bundling itJ. Alexander Treuman2008-09-212-255/+1
| | | | | | | The previously bundled po/Makefile.in would use predefined variables that should be set by the configure script. f.e., $prefix was defined as /usr/local, and caused po files to always be installed there instead of in the prefix given to ./configure.
* configure.ac: don't enable the lyrics screen by defaultJ. Alexander Treuman2008-09-211-1/+1
| | | | | The configure help text already said the lyrics screen was disabled by default. Now it actually will be.
* autogen: don't run ./configure if $NOCONFIGURE is setJ. Alexander Treuman2008-09-211-2/+4
|
* mpdclient: don't call screen_status_message()Max Kellermann2008-09-211-2/+0
| | | | The caller should decide how to display error messages.
* Adding crop feature in ncmpcYannick LM2008-09-216-0/+44
| | | | | The "crop" command deletes all songs from the playlist, except the one currently being played.
* screen_help: removed update() methodMax Kellermann2008-09-211-13/+6
| | | | | Why redraw the help screen when nothing has changed? Redraw it only after help_cmd(), and when explicitly requested (help_paint()).
* filelist: fix segfault during filelist_sort()Max Kellermann2008-09-191-1/+13
| | | | | | | When I converted the filelist from GList to GPtrArray, I missed that the GCompareFunc does not actually get the pointers from g_ptr_array_sort(), but pointers to the pointers... run g_ptr_array_sort_with_data() instead with a wrapper function.
* filelist: free entries with g_slice_free()Max Kellermann2008-09-191-2/+2
| | | | | Somehow I forgot about changing free() to g_slice_free() in the previous patch...
* filelist: allocate entries with g_slice_alloc()Max Kellermann2008-09-191-4/+2
| | | | | In this case, slices are faster. Also fix a memory leak in filelist_prepend() which I simply forgot about in the last patch set.
* properly configure M4 macro dirunK2008-09-192-0/+2
| | | | | Add information about the M4 macro dir ./m4/ to both configure.ac and Makefile.am.
* filelist: use GPtrArray instead of GListMax Kellermann2008-09-195-63/+57
| | | | | Since we do a lot of indexed accesses to the filelist, a linked list doesn't seem appropriate. Use GPtrArray instead.
* browser: added function browser_get_selected()Max Kellermann2008-09-191-9/+11
| | | | | browser_get_selected() checks if there is a file list and a valid selection, and returns the selected entry.
* screen_search: free second file listMax Kellermann2008-09-191-0/+1
| | | | Fix a memory leak: the concatened list was never freed.
* filelist: provide more functions for working with a filelistMax Kellermann2008-09-197-58/+124
| | | | Avoid direct accesses to the filelist struct, provide an API for that.
* filelist: drop "mpdclient" prefixMax Kellermann2008-09-198-18/+16
| | | | | The separate filelist library does not depend on mpdclient, so the prefix is superfluous.
* browser: use mpdclient_filelist_find_song() in set_highlight()Max Kellermann2008-09-191-18/+9
| | | | | A song should not be twice in the browser. Simplify set_highlight() by finding the entry with mpdclient_filelist_find_song().
* browser: song must not be NULL in set_highlight()Max Kellermann2008-09-191-2/+1
| | | | | The caller must not pass NULL to set_highlight(). Replaced check with assertion.
* filelist: song must not be NULLMax Kellermann2008-09-191-1/+4
| | | | | A caller must not pass NULL to mpdclient_filelist_find_song(). Replace the check with an assertion.
* mpdclient: moved code to filelist.cMax Kellermann2008-09-195-77/+126
| | | | | | | | Move everything which is solely filelist related to filelist.c and filelist.h. Fix the indentation of that file, and provide the struct name "filelist". Don't clear data in mpdclient_filelist_free() before calling g_free(). Constify the "song" parameter to mpdclient_filelist_find_song().
* code style, indent with tabs VIIMax Kellermann2008-09-191-23/+16
| | | | Follow the same code style als MPD itself.
* fix terminal resizing (SIGWINCH)Max Kellermann2008-09-191-0/+33
| | | | | | | | | | | When I replaced ncmpc's old main loop with g_main_loop from libglib, SIGWINCH (i.e. window resizing) stopped working. This regression was caused by the fact that ncurses' wgetch() function was only called when there was actually data on STDIN. wgetch() has several side effects besides reading data from STDIN, for example it checks whether there has been a window resize. Fix this with a custom SIGWINCH handler.
* removed the clock screenMax Kellermann2008-09-189-262/+0
| | | | Why should an audio player display a large clock?
* screen_browser: removed entity.song!=NULL checkMax Kellermann2008-09-181-6/+5
| | | | | It is guaranteed that the "song" attribute is not NULL, remove the check.
* screen_browser: removed redundant highlight checkMax Kellermann2008-09-181-6/+5
| | | | | | browser_select_entry() checked the entry's "highlight" flag twice: the first time, it was toggled, and the second time, action was performed based on the flag. Merge the two checks.
* screen_browser: removed redundant entity type checksMax Kellermann2008-09-181-14/+10
| | | | | The function browser_select_entry() returns early when the entity type is not "SONG". No need to double check that.
* screen_browser: moved code to browser_select_entry()Max Kellermann2008-09-182-52/+26
| | | | | | Moved code from browser_handle_select(). Call this new function also from browser_handle_select_all(). This fixes a bug in select_all(): it actually did not select all, but stopped after the first song.
* screen_browser: removed commented codeMax Kellermann2008-09-181-15/+0
|
* screen_browser: moved code to browser_playlist_changed()Max Kellermann2008-09-185-49/+39
| | | | | Merge code from all 3 browser screens into one generic browser function.
* screen_browser: moved code to screen_browser.cMax Kellermann2008-09-186-507/+542
| | | | Isolate the generic browser code from the directory browser.
* screen_browser: added struct screen_browserMax Kellermann2008-09-184-185/+208
| | | | | We are going to separate the browser functions from screen_file.c. Move all variables which are going to be needed by this code.
* renamed screen_browse.h to screen_browser.hMax Kellermann2008-09-185-4/+4
|
* code style, indent with tabs VIMax Kellermann2008-09-184-550/+515
| | | | Follow the same code style als MPD itself.
* added support for wide charactersMax Kellermann2008-09-182-4/+17
| | | | | | | | This patch was taken from bug 476, author unknown (http://www.musicpd.org/mantis/view.php?id=476). It changes the definition of my_strlen(): instead of returning the number of UTF-8 characters, it counts the number of terminal cells occupied by a string.
* code style, indent with tabs VMax Kellermann2008-09-181-87/+81
| | | | Follow the same code style als MPD itself.
* screen: don't handle CMD_PLAYMax Kellermann2008-09-181-0/+2
| | | | | | | | | | CMD_PLAY is mapped to the Enter key by default. Some screens (mis-)use it for navigation, for entering a directory. The playlist screen actually plays the file under the cursor. On all other screens, pressing Enter may be confusing, since it is more of a "confirmation" key instead of "play". We should probaby add CMD_CONFIRM later, but for now, disable the general CMD_PLAY handler in screen.c. This fixes bug 240.
* libmpdclient: added resolver libraryMax Kellermann2008-09-184-199/+327
| | | | | | | The resolver library provides unified access to all resolvers (getaddrinfo(), gethostbyname(), Unix domain sockets). Like getaddrinfo(), it can return more than one address for a host name. This fixes bug 1517 (http://www.musicpd.org/mantis/view.php?id=1517).
* quit with g_main_loop_quit()Max Kellermann2008-09-182-5/+5
| | | | | Call g_main_loop_quit() on CMD_QUIT, instead of exit() with an atexit() handler.
* playlist: reset id in playlist_clear()Max Kellermann2008-09-181-0/+2
| | | | | | The playlist is reset when the connection to the MPD server is closed. After a successful reconnect, we have to reload the full playlist. To remember this, also reset the id attribute.