1272 Commits

Author SHA1 Message Date
Adrian Ulrich
e5e9ba3022 Sync with BASTP HEAD 2017-02-03 18:48:48 +01:00
Adrian Ulrich
cc930c3dbb never return covers for unindexed songs
Invalid song objects have an id == -1, unindexed songs start at -2, so we should also skip them as their album information is bonkers
2017-02-02 19:04:41 +01:00
Adrian Ulrich
3c15eca5e6 do not put empty-names in brackets 2017-02-02 18:56:13 +01:00
Adrian Ulrich
cb6b824e05 use getAndroidMediaIds for cover and mirrorlink 2017-01-26 20:26:17 +01:00
Adrian Ulrich
7d90334867 fix scrobbler 2017-01-26 20:18:07 +01:00
Adrian Ulrich
541f846aaa improve ReadaheadThread
We are now calculating the read speed instead of using a hardcoded value.
2017-01-24 22:16:24 +01:00
Adrian Ulrich
446912c225 improve isMediaFile() guess 2017-01-24 21:23:08 +01:00
Adrian Ulrich
a98eb36a1c Relax sFilterLeftInt to also match on integers which are followed by other chars.
..so we also match eg: '2/13' (-> 2)
2017-01-24 21:03:25 +01:00
Adrian Ulrich
a6442948fc relax audio data check 2017-01-22 21:38:09 +01:00
Adrian Ulrich
d2c54eeb2a Do not index ringtone data 2017-01-22 21:14:11 +01:00
Adrian Ulrich
2c5abc352c Use MediaStore.Audio.Media.EXTERNAL_CONTENT_URI for cover lookups
MediaStore.Audio.Media.getContentUriForPath() seems to return strange results on some phones and lookups to non-external databases are pretty unlikely anyway.
2017-01-22 20:41:01 +01:00
Adrian Ulrich
555070a7e7 Pass filedescriptor to mediametadataretriever instead of a path.
This avoids issues where it would parse paths as uri's - we already do this for the MediaPlayer, so doing the same here seems to be sane.
2017-01-22 20:40:11 +01:00
Adrian Ulrich
b8831f71f2 use media database to store preferences instead of the shared pref provider 2017-01-21 14:05:01 +01:00
Adrian Ulrich
1982b0f969 convert legacy ID3v1 numeric-only genres into strings 2017-01-21 12:27:16 +01:00
Adrian Ulrich
74f921e3a1 use Long to calculate duration
The duration is stored as 'ms', so the total sum might overflow
2017-01-18 21:11:14 +01:00
Adrian Ulrich
055ed2c053 increase icon search to 150 tries 2017-01-18 20:19:32 +01:00
Adrian Ulrich
d2b5f931d2 improve quickscan 2017-01-15 17:16:16 +01:00
Adrian Ulrich
bb2e707844 add option to abort a scan 2017-01-15 16:00:06 +01:00
Antic1tizen One
c270b13296 Add CI smoke build, fix Gradle Lint warnings, fixes #451 (#504)
- Added CI smoke build config that spawns a build for pull-requests
- Removed extra translations that have no base strings anymore
- Added skip MissingTranslation option to lint as there are missing strings that are not filled in Transifex
2017-01-12 19:01:19 +01:00
Antic1tizen One
58b40d862c Plugin subsystem. Shown as a last option in song context menu. Part of #407 (#442) 2017-01-08 19:52:07 +01:00
Adrian Ulrich
76996605c8 Show every album where the artist has at least one song for album lookups
the old code just used the inherited primary artist which is pretty confusing
2017-01-08 18:45:32 +01:00
Adrian Ulrich
039a6821b6 improve handling of changed and updated files 2017-01-08 17:54:26 +01:00
Adrian Ulrich
364a08b3bc set disc_num to 1 if unset 2017-01-03 21:22:11 +01:00
Adrian Ulrich
e4cbf3e4fe fix sql layout to store disc_num on song
The album id is hashed from the string, so joining it from the shared album entry doesn't make much sense
2017-01-02 13:01:30 +01:00
Adrian Ulrich
e92e24ec00 fix regexp for year-fallback extraction
Java regexp's are always automatically enclosed by ^$
2017-01-01 18:13:49 +01:00
Adrian Ulrich
2e958ec285 update notification at most twice per second 2016-12-31 14:07:02 +01:00
Adrian Ulrich
e747f1ee37 use notification instead of toast to display scan progress 2016-12-31 13:54:17 +01:00
Adrian Ulrich
fc167c08c7 remove debugging leftovers 2016-12-31 12:45:34 +01:00
Adrian Ulrich
01ee099cef disable database debugging 2016-12-31 12:38:39 +01:00
Adrian Ulrich
d26d10570b import old playlists 2016-12-31 12:38:05 +01:00
Adrian Ulrich
2a562230da make delay in startQuickScan an argument 2016-12-31 11:12:12 +01:00
Adrian Ulrich
c55860d56d s/songs/tracks/ 2016-12-28 18:06:19 +01:00
Adrian Ulrich
08f79a84ae implement media scanner UI 2016-12-27 21:44:42 +01:00
Adrian Ulrich
46deaf25e7 crashfix: correctly check sort mode bounds
A sort mode of -6 means '6 reversed', so we must check if '6' is in-bounds (instead of -6)
2016-12-26 21:06:05 +01:00
Adrian Ulrich
6c85a11743 Merge branch 'medialibrary' 2016-12-26 19:33:08 +01:00
Adrian Ulrich
dcd7df4f66 first version of automatic media scanner 2016-12-26 19:31:12 +01:00
Adrian Ulrich
8abdf25d38 Implement getLibrarySize() 2016-12-18 19:59:46 +01:00
Adrian Ulrich
16aa6440f8 implement externally triggerable scanner 2016-12-18 18:55:41 +01:00
Adrian Ulrich
57b88bfef2 fix code style errors 2016-12-18 18:27:59 +01:00
Adrian Ulrich
2e9de29921 fix comment typo 2016-12-18 11:53:10 +01:00
Adrian Ulrich
4ed4cd0fab implement startNativeLibraryScan() 2016-12-18 11:50:59 +01:00
Adrian Ulrich
5782e295eb implement startUpdateScan() 2016-12-18 11:36:17 +01:00
Adrian Ulrich
4429c50dec improve handling of file updates 2016-12-18 10:58:15 +01:00
Adrian Ulrich
da159cace2 Reduce visibility of functions 2016-12-18 10:12:46 +01:00
Adrian Ulrich
72d8c65211 UGLY: our SQL optimizer is pretty silly and uses a regexp to parse SQL.
Instead of fixing the root issue (parsing sql by regexp), we are going to pass
a 'nicer' query to the 'optimizer' so that it is able to catch our intent.
2016-12-18 10:09:48 +01:00
Adrian Ulrich
ddc38d1853 avoid deadlock while entering random mode from play-click
calling setSong(0); is not required as changing the mode will already broadcast a change which causes us to pick up a new song from scratch.

The old code caused 2 threads to touch the PlaybackService + SongTimeline at the same time, resulting in a deadlock in the worst case.

Trace for historical reasons:
DALVIK THREADS (21):
"main" prio=5 tid=1 Blocked
  | group="main" sCount=1 dsCount=0 obj=0x73d5b000 self=0xb4827800
  | sysTid=14357 nice=0 cgrp=default sched=0/0 handle=0xb6f74bec
  | state=S schedstat=( 321573745 82720575 681 ) utm=21 stm=11 core=3 HZ=100
  | stack=0xbe5a4000-0xbe5a6000 stackSize=8MB
  | held mutexes=
  at ch.blinkenlights.android.vanilla.SongTimeline.shiftCurrentSong(SongTimeline.java:669)
  - waiting to lock <0x30e74b87> (a ch.blinkenlights.android.vanilla.SongTimeline) held by thread 16
  at ch.blinkenlights.android.vanilla.PlaybackService.setCurrentSong(PlaybackService.java:1298)
  at ch.blinkenlights.android.vanilla.PlaybackService.play(PlaybackService.java:1184)
  - locked <0x3ce87ab4> (a java.lang.Object[])
  at ch.blinkenlights.android.vanilla.PlaybackService.playPause(PlaybackService.java:1221)
  - locked <0x3ce87ab4> (a java.lang.Object[])
  at ch.blinkenlights.android.vanilla.PlaybackActivity.playPause(PlaybackActivity.java:186)
  at ch.blinkenlights.android.vanilla.PlaybackActivity.onClick(PlaybackActivity.java:206)
  at ch.blinkenlights.android.vanilla.LibraryActivity.onClick(LibraryActivity.java:544)
  at android.view.View.performClick(View.java:4789)
  at android.view.View$PerformClick.run(View.java:19881)
  at android.os.Handler.handleCallback(Handler.java:739)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:135)
  at android.app.ActivityThread.main(ActivityThread.java:5294)
  at java.lang.reflect.Method.invoke!(Native method)
  at java.lang.reflect.Method.invoke(Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

	"PlaybackService" prio=5 tid=16 Blocked
  | group="main" sCount=1 dsCount=0 obj=0x12d52900 self=0xb4a1c400
  | sysTid=14379 nice=0 cgrp=default sched=0/0 handle=0xb4929400
  | state=S schedstat=( 25323853 1519584 33 ) utm=2 stm=0 core=3 HZ=100
  | stack=0xaeafe000-0xaeb00000 stackSize=1036KB
  | held mutexes=
  at ch.blinkenlights.android.vanilla.PlaybackService.setCurrentSong(PlaybackService.java:1315)
  - waiting to lock <0x3ce87ab4> (a java.lang.Object[]) held by thread 1
  at ch.blinkenlights.android.vanilla.PlaybackService.activeSongReplaced(PlaybackService.java:1659)
  at ch.blinkenlights.android.vanilla.SongTimeline.broadcastChangedSongs(SongTimeline.java:906)
  at ch.blinkenlights.android.vanilla.SongTimeline.setFinishAction(SongTimeline.java:511)
  - locked <0x30e74b87> (a ch.blinkenlights.android.vanilla.SongTimeline)
  at ch.blinkenlights.android.vanilla.PlaybackService.processNewState(PlaybackService.java:1039)
  at ch.blinkenlights.android.vanilla.PlaybackService.handleMessage(PlaybackService.java:1543)
  at android.os.Handler.dispatchMessage(Handler.java:98)
  at android.os.Looper.loop(Looper.java:135)
  at android.os.HandlerThread.run(HandlerThread.java:61)
2016-12-02 15:23:36 +01:00
Adrian Ulrich
d6b8cdbddc fix sd scanner
onAttach(Context) is an API23 function, this fixes the scanner to work on Android <=5
2016-12-02 07:56:53 +01:00
Adrian Ulrich
012f0538f8 remove orphaned playlist entries during delete 2016-11-28 21:06:42 +01:00
Adrian Ulrich
055effb976 support for file updates 2016-11-28 21:05:02 +01:00
Adrian Ulrich
69b8636c60 get rid of unused recursive flag 2016-11-28 20:05:08 +01:00