aboutsummaryrefslogtreecommitdiffstats
path: root/src (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* main: connect while UI is displayedMax Kellermann2008-09-181-39/+21
| | | | | | | | Display the UI always, and show connection errors there. This fixes a lot of consistency problems: error messages used to be printed to stderr, but afterwards, the atexit() handlers deinitialized ncurses and the screen was cleared. This patch is still problematic, but constitutes a good step forward.
* libmpdclient: moved code to mpd_recv(), mpd_wait()Max Kellermann2008-09-181-90/+129
| | | | | | Create generic utility functions for doint I/O: two wait functions, and mpd_recv() fills the input buffer. These functions are used in mpd_newConnection() and mpd_getNextReturnElement().
* libmpdclient: smaller input bufferMax Kellermann2008-09-182-6/+5
| | | | | Even for large responses, 16kB should be enough. There is no performance gain for larger buffers, even if MPD is local.
* libmpdclient: smaller error bufferMax Kellermann2008-09-182-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.
* libmpdclient: use memmove() instead of strcpy() for moving the bufferMax Kellermann2008-09-181-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.
* libmpdclient: don't strdup() MPD's welcome messageMax Kellermann2008-09-181-7/+3
| | | | | Why bother duplicating the buffer, when we can simply parse the response directly from the input buffer?
* libmpdclient: use size_t and ssize_tMax Kellermann2008-09-182-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.
* screen: removed empty methodsMax Kellermann2008-09-184-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.
* screen: removed NULL checkMax Kellermann2008-09-181-2/+1
| | | | | Since the screen's initialization is guaranteed, we can remove the NULL check in center_playing_item().
* screen_artist: fix compilation errorsMax Kellermann2008-09-171-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.
* code style, indent with tabs IVMax Kellermann2008-09-175-471/+449
| | | | Follow the same code style als MPD itself.
* browse: when deselecting, don't search twiceMax Kellermann2008-09-171-1/+1
| | | | | When deselecting a song in the file browser, the local variable "idx" was initialized and overwritten. Remove the initialization.
* playlist: added playlist_remove_reuse()Max Kellermann2008-09-172-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().
* make several functions return voidMax Kellermann2008-09-1710-41/+32
|
* playlist: use playlist_get() instead of playlist_get_song()Max Kellermann2008-09-172-6/+9
|
* list_window: don't reset *highlight to 0Max Kellermann2008-09-174-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.
* lyrics: don't check current.lines==NULLMax Kellermann2008-09-171-2/+2
| | | | | current.lines is always initialized, and cannot be NULL, no need to check it.
* help: return early from list_callback()Max Kellermann2008-09-171-25/+25
|
* help: converted help_text_rows to a macroMax Kellermann2008-09-171-10/+3
| | | | | Why bother counting the elements of help_text[] (with sentinel) at runtime, when the compiler can do it at compile time?
* lyrics: removed lyrics_text_rows, use current.lines->len insteadMax Kellermann2008-09-171-2/+1
| | | | | lyrics_text_rows wasn't set anyway, I somehow removed the code in a patch some time ago.
* list_window: added list_window_center()Max Kellermann2008-09-175-27/+25
| | | | | Merge code which used to be duplicated in the screens "play", "help", "lyrics".
* list_window: added list_window_scroll_cmd()Max Kellermann2008-09-174-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.
* list_window: set repaint at the end of list_window_cmd()Max Kellermann2008-09-171-6/+1
|
* screen: return early in switch_screen_mode() on errorMax Kellermann2008-09-171-7/+7
| | | | | When the selected screen does not exist, return before calling close().
* screen: added macro NUM_SCREENSMax Kellermann2008-09-171-25/+16
| | | | | Since the number of screens is known at compile time, define a macro which calculates this, instead of having a sentinel element.
* screen: close only current screen in screen_exit()Max Kellermann2008-09-171-2/+3
| | | | | Screens which are not active have already been closed, or have never been opened. Don't call close again on them.
* screen: don't store "screen" as a pointerMax Kellermann2008-09-171-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.
* screen: moved code to find_configured_screen()Max Kellermann2008-09-171-10/+13
|
* screen: mode_fn cannot be NULL, removed checksMax Kellermann2008-09-171-17/+9
| | | | | At startup, mode_fn is initialized with &screen_playlist, and it will never be reset to NULL. Remove all checks.
* screen: before calling update(), check if it is definedMax Kellermann2008-09-171-1/+1
| | | | | That seems to be a fn->paint was checked, then the code called fn->update(). Fix this.
* screen: removed screen_functions.get_lw()Max Kellermann2008-09-178-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.
* replaced get_screen_X() with static screen_functions variableMax Kellermann2008-09-1710-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.
* code style, indent with tabs IIIMax Kellermann2008-09-173-112/+104
| | | | Follow the same code style als MPD itself.
* mpdclient: call playlist_clear() in mpdclient_playlist_update()Max Kellermann2008-09-171-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.
* initial draw without delayMax Kellermann2008-09-161-0/+2
| | | | | Due to a missing refresh() call, ncmpc painted the screen after one second. Add refresh(), make ncmpc display immediately.
* screen: added struct namesMax Kellermann2008-09-167-91/+95
| | | | | Let us declare struct names in addition to typedef names, so we can forward-declare them.
* lyrics: converted in-process plugins to external programsMax Kellermann2008-09-169-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
* use GPtrArray instead of GArray for playlist songsMax Kellermann2008-09-162-13/+10
|
* playlist: hide direct accesses in inline functionsMax Kellermann2008-09-163-37/+92
| | | | | | Added functions like playlist_length(), playlist_get(), playlist_replace(), playlist_remove(). Don't access the mpdclient_playlist struct directly.
* mpdclient: added mpdclient_playlist_init(), mpdclient_playlist_clear()Max Kellermann2008-09-163-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()).
* mpdclient: moved code to playlist.cMax Kellermann2008-09-165-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.
* song: allocate mpd_song from glib slicesMax Kellermann2008-09-161-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.
* song: use struct mpd_songMax Kellermann2008-09-164-44/+44
| | | | | Use a forward declared struct mpd_song instead of the typedef mpd_Song.
* libmpdclient: moved code to song.cMax Kellermann2008-09-165-133/+231
| | | | | Move everything which manipulates the mpd_Song struct to song.c. Thousands of lines of too much for libmpdclient.c!
* mpdclient: add struct names, for forward declarationsMax Kellermann2008-09-161-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.
* libmpdclient: const pointersMax Kellermann2008-09-162-2/+2
| | | | Pass const pointers whenever possible.
* code style, indent with tabs IIMax Kellermann2008-09-165-142/+128
| | | | Follow the same code style als MPD itself.
* list_window: update variables without loopingMax Kellermann2008-09-161-10/+14
| | | | | Apparently, somebody was too lazy to derive the formulas for cursor movement, and wrote lots of while loops.
* include cleanupMax Kellermann2008-09-162-5/+5
| | | | Include only headers which are really used.
* easy_download: fixed the type of write_data()Max Kellermann2008-09-151-1/+3
| | | | Fix the type of write_data() to fit curl_write_callback.