aboutsummaryrefslogtreecommitdiffstats
path: root/src (unfollow)
Commit message (Collapse)AuthorFilesLines
2008-09-18libmpdclient: smaller input bufferMax Kellermann2-6/+5
Even for large responses, 16kB should be enough. There is no performance gain for larger buffers, even if MPD is local.
2008-09-18libmpdclient: smaller error bufferMax Kellermann2-21/+23
512 characters should be well enough for error messages which are actually being displayed somewhere. Use sizeof(errorStr) instead of MPD_BUFFER_MAX_LENGTH everywhere. Do proper length checking when copying the output buffer to errorStr.
2008-09-18libmpdclient: use memmove() instead of strcpy() for moving the bufferMax Kellermann1-8/+8
In general, don't treat the input buffer as a null-terminated string: don't append '\0', don't use strchr() and strtok(). To delete consumed portions of the buffer, strcpy() is bad anyway, because it does not allow overlapping buffers.
2008-09-18libmpdclient: don't strdup() MPD's welcome messageMax Kellermann1-7/+3
Why bother duplicating the buffer, when we can simply parse the response directly from the input buffer?
2008-09-18libmpdclient: use size_t and ssize_tMax Kellermann2-5/+6
When working with buffer lengths and recv() results, we should declare size_t and ssize_t variables, otherwise the code may fail on 64 bit machines.
2008-09-18screen: removed empty methodsMax Kellermann4-49/+0
Declaring empty methods is of no use. If a method is empty, we should set it to NULL in the screen_functions struct.
2008-09-18screen: removed NULL checkMax Kellermann1-2/+1
Since the screen's initialization is guaranteed, we can remove the NULL check in center_playing_item().
2008-09-17screen_artist: fix compilation errorsMax Kellermann1-26/+29
Unfortunately when I fixed the GCC warnings and refactored lots of the code, the "artist" screen was disabled. This patch applies all API changes and fixes all warnings.
2008-09-17code style, indent with tabs IVMax Kellermann5-471/+449
Follow the same code style als MPD itself.
2008-09-17browse: when deselecting, don't search twiceMax Kellermann1-1/+1
When deselecting a song in the file browser, the local variable "idx" was initialized and overwritten. Remove the initialization.
2008-09-17playlist: added playlist_remove_reuse()Max Kellermann2-3/+10
playlist_remove_reuse() removes a song from the playlist, but does not free it. Use this function in mpdclient_cmd_delete() to fix a segmentation fault: the song pointer was still used after it was freed, by passing it to mpdclient_playlist_callback(). Free the song manually now. Reorganize and simply some code in mpdclient_cmd_delete().
2008-09-17make several functions return voidMax Kellermann10-41/+32
2008-09-17playlist: use playlist_get() instead of playlist_get_song()Max Kellermann2-6/+9
2008-09-17list_window: don't reset *highlight to 0Max Kellermann4-4/+0
Since the list_window code sets highlight to 0 before it calls the list_callback, the callback itself doesn't have to reset the flag.
2008-09-17lyrics: don't check current.lines==NULLMax Kellermann1-2/+2
current.lines is always initialized, and cannot be NULL, no need to check it.
2008-09-17help: return early from list_callback()Max Kellermann1-25/+25
2008-09-17help: converted help_text_rows to a macroMax Kellermann1-10/+3
Why bother counting the elements of help_text[] (with sentinel) at runtime, when the compiler can do it at compile time?
2008-09-17lyrics: removed lyrics_text_rows, use current.lines->len insteadMax Kellermann1-2/+1
lyrics_text_rows wasn't set anyway, I somehow removed the code in a patch some time ago.
2008-09-17list_window: added list_window_center()Max Kellermann5-27/+25
Merge code which used to be duplicated in the screens "play", "help", "lyrics".
2008-09-17list_window: added list_window_scroll_cmd()Max Kellermann4-69/+62
It is similar to list_window_cmd(), but it scrolls the window instead of moving the selection. It is used by the "lyrics" and the "help" screen.
2008-09-17list_window: set repaint at the end of list_window_cmd()Max Kellermann1-6/+1
2008-09-17screen: return early in switch_screen_mode() on errorMax Kellermann1-7/+7
When the selected screen does not exist, return before calling close().
2008-09-17screen: added macro NUM_SCREENSMax Kellermann1-25/+16
Since the number of screens is known at compile time, define a macro which calculates this, instead of having a sentinel element.
2008-09-17screen: close only current screen in screen_exit()Max Kellermann1-2/+3
Screens which are not active have already been closed, or have never been opened. Don't call close again on them.
2008-09-17screen: don't store "screen" as a pointerMax Kellermann1-140/+135
There can only be onle screen struct instance at a time. Declare it as a static struct, instead of a pointer to the struct. This simplifies all accesses, and avoids the dynamic allocation.
2008-09-17screen: moved code to find_configured_screen()Max Kellermann1-10/+13
2008-09-17screen: mode_fn cannot be NULL, removed checksMax Kellermann1-17/+9
At startup, mode_fn is initialized with &screen_playlist, and it will never be reset to NULL. Remove all checks.
2008-09-17screen: before calling update(), check if it is definedMax Kellermann1-1/+1
That seems to be a fn->paint was checked, then the code called fn->update(). Fix this.
2008-09-17screen: removed screen_functions.get_lw()Max Kellermann8-53/+2
If it is really important to set the curser, we should think of a better way, instead of exporting one non-generic method. For now, just set the cursor to the origin.
2008-09-17replaced get_screen_X() with static screen_functions variableMax Kellermann10-208/+134
Compile time initialization saves resources, compared to run-time initialization. Declare all screen_function structs as global variables, and remove all get functions.
2008-09-17code style, indent with tabs IIIMax Kellermann3-112/+104
Follow the same code style als MPD itself.
2008-09-17mpdclient: call playlist_clear() in mpdclient_playlist_update()Max Kellermann1-2/+1
Instead of freeing the playlist with mpdclient_playlist_free(), call playlist_clear() to empty the song list. This fixes a segmentation fault which occured when you cleared the playlist.
2008-09-16initial draw without delayMax Kellermann1-0/+2
Due to a missing refresh() call, ncmpc painted the screen after one second. Add refresh(), make ncmpc display immediately.
2008-09-16screen: added struct namesMax Kellermann7-91/+95
Let us declare struct names in addition to typedef names, so we can forward-declare them.
2008-09-16lyrics: converted in-process plugins to external programsMax Kellermann9-677/+482
In-process plugins are very problematic. It is much easier and flexible to move the lyrics plugins to external programs, with a trivial protocol. This is work in progress, among the things missing: - protocol specification, including exit codes - plugin installation - plugin search directory - run-time configuration (currently hard coded) - automatic polling (using glib's main loop?) - better and more robust error handling
2008-09-16use GPtrArray instead of GArray for playlist songsMax Kellermann2-13/+10
2008-09-16playlist: hide direct accesses in inline functionsMax Kellermann3-37/+92
Added functions like playlist_length(), playlist_get(), playlist_replace(), playlist_remove(). Don't access the mpdclient_playlist struct directly.
2008-09-16mpdclient: added mpdclient_playlist_init(), mpdclient_playlist_clear()Max Kellermann3-6/+34
Moved code from mpdclient_new() and mpdclient_playlist_free(). In mpdclient_disconnect(), call mpdclient_playlist_clear() instead of mpdclient_playlist_free() (which is now called in mpdclient_free()).
2008-09-16mpdclient: moved code to playlist.cMax Kellermann5-111/+174
Move everything which manipulates the mpdclient_playlist struct to playlist.c. Many of the functions get a mpdclient pointer instead of a playlist; this will be changed later. The functions mpdclient_playlist_update() and mpdclient_playlist_update_changes() stay in mpdclient.c for now, since they are tightly connected to the client code.
2008-09-16song: allocate mpd_song from glib slicesMax Kellermann1-0/+15
Since we compile ncmpc with glib, we can use its slice allocator for efficient song allocation. I have added a way to disable this with a macro.
2008-09-16song: use struct mpd_songMax Kellermann4-44/+44
Use a forward declared struct mpd_song instead of the typedef mpd_Song.
2008-09-16libmpdclient: moved code to song.cMax Kellermann5-133/+231
Move everything which manipulates the mpd_Song struct to song.c. Thousands of lines of too much for libmpdclient.c!
2008-09-16mpdclient: add struct names, for forward declarationsMax Kellermann1-4/+4
To relax the include dependencies, give all structs real names, in addition to the typedef names. This way, other headers can forward-declare them, and do not need to include mpdclient.h. In the future, the typedefs will be removed.
2008-09-16libmpdclient: const pointersMax Kellermann2-2/+2
Pass const pointers whenever possible.
2008-09-16code style, indent with tabs IIMax Kellermann5-142/+128
Follow the same code style als MPD itself.
2008-09-16list_window: update variables without loopingMax Kellermann1-10/+14
Apparently, somebody was too lazy to derive the formulas for cursor movement, and wrote lots of while loops.
2008-09-16include cleanupMax Kellermann2-5/+5
Include only headers which are really used.
2008-09-15easy_download: fixed the type of write_data()Max Kellermann1-1/+3
Fix the type of write_data() to fit curl_write_callback.
2008-09-15use GArray for playlist instead of GListMax Kellermann3-101/+76
Using a doubly linked list for the local playlist copy is a huge waste of both memory and CPU cycles. Use GArray instead of GList, which is much faster in this case.
2008-09-15free info entity while iteratingMax Kellermann1-0/+2
Memory leak: the function mpdclient_playlist_update_changes() did not free the entity which was returned by mpd_getNextInfoEntity(). Add a mpd_freeInfoEntity() call at the end of each iteration.