From 297d5ab8e59ca017addec5f0893c89c4704074ed Mon Sep 17 00:00:00 2001
From: k-m_schindler <k-m_schindler@b956fd51-792f-4845-bead-9b4dfca2ff2c>
Date: Sun, 24 Feb 2013 18:55:15 +0000
Subject: fix problems with empty songlist. thanks to Zup3rvock.

git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2949 b956fd51-792f-4845-bead-9b4dfca2ff2c
---
 src/base/UNote.pas | 38 ++++++++++++++++++++++----------------
 src/base/USong.pas |  7 +++++--
 2 files changed, 27 insertions(+), 18 deletions(-)

(limited to 'src')

diff --git a/src/base/UNote.pas b/src/base/UNote.pas
index b9e71ac2..f3ff19ce 100644
--- a/src/base/UNote.pas
+++ b/src/base/UNote.pas
@@ -231,37 +231,43 @@ begin
   end;
 end;
 
-function GetTimeFromBeat(Beat: integer): real;
+function GetTimeFromBeat(Beat: integer; SelfSong: TSong = nil): real;
 var
   CurBPM: integer;
+  Song: TSong;
 begin
+  if (SelfSong <> nil) then
+    Song := SelfSong
+  else
+    Song := CurrentSong;
+
   // static BPM
-  if Length(CurrentSong.BPM) = 1 then
+  if Length(Song.BPM) = 1 then
   begin
-    Result := CurrentSong.GAP / 1000 + Beat * 60 / CurrentSong.BPM[0].BPM;
+    Result := Song.GAP / 1000 + Beat * 60 / Song.BPM[0].BPM;
   end
   // variable BPM
-  else if Length(CurrentSong.BPM) > 1 then
+  else if Length(Song.BPM) > 1 then
   begin
-    Result := CurrentSong.GAP / 1000;
+    Result := Song.GAP / 1000;
     CurBPM := 0;
-    while (CurBPM <= High(CurrentSong.BPM)) and
-          (Beat > CurrentSong.BPM[CurBPM].StartBeat) do
+    while (CurBPM <= High(Song.BPM)) and
+          (Beat > Song.BPM[CurBPM].StartBeat) do
     begin
-      if (CurBPM < High(CurrentSong.BPM)) and
-         (Beat >= CurrentSong.BPM[CurBPM+1].StartBeat) then
+      if (CurBPM < High(Song.BPM)) and
+         (Beat >= Song.BPM[CurBPM+1].StartBeat) then
       begin
         // full range
-        Result := Result + (60 / CurrentSong.BPM[CurBPM].BPM) *
-                           (CurrentSong.BPM[CurBPM+1].StartBeat - CurrentSong.BPM[CurBPM].StartBeat);
+        Result := Result + (60 / Song.BPM[CurBPM].BPM) *
+                           (Song.BPM[CurBPM+1].StartBeat - Song.BPM[CurBPM].StartBeat);
       end;
 
-      if (CurBPM = High(CurrentSong.BPM)) or
-         (Beat < CurrentSong.BPM[CurBPM+1].StartBeat) then
+      if (CurBPM = High(Song.BPM)) or
+         (Beat < Song.BPM[CurBPM+1].StartBeat) then
       begin
         // in the middle
-        Result := Result + (60 / CurrentSong.BPM[CurBPM].BPM) *
-                           (Beat - CurrentSong.BPM[CurBPM].StartBeat);
+        Result := Result + (60 / Song.BPM[CurBPM].BPM) *
+                           (Beat - Song.BPM[CurBPM].StartBeat);
       end;
       Inc(CurBPM);
     end;
@@ -410,7 +416,7 @@ var
   CurrentSound:        TCaptureBuffer;
   CurrentPlayer:       PPlayer;
   LastPlayerNote:      PPlayerNote;
-  Line: 	       PLine;
+  Line:                PLine;
   SentenceIndex:       integer;
   SentenceMin:         integer;
   SentenceMax:         integer;
diff --git a/src/base/USong.pas b/src/base/USong.pas
index 38ba1c12..4f35d774 100644
--- a/src/base/USong.pas
+++ b/src/base/USong.pas
@@ -1188,7 +1188,7 @@ begin
     if ((MedleyFlags and 1) = 0) or (self.PreviewStart <= 0) then //PreviewStart is not set or <=0
     begin
       if (MedleyFlags and 2) = 2 then
-        self.PreviewStart := GetTimeFromBeat(self.Medley.StartBeat)  //fallback to MedleyStart
+        self.PreviewStart := GetTimeFromBeat(self.Medley.StartBeat, self)  //fallback to MedleyStart
       else
         self.PreviewStart := 0; //else set it to 0, it will be set in FindRefrainStart
     end;
@@ -1552,7 +1552,10 @@ begin
   Resolution := 4;
   Creator    := '';
   PreviewStart := 0;
-  CalcMedley := true;
+  if CurrentSong = nil then
+    CalcMedley := false
+  else
+    CalcMedley := true;
   Medley.Source := msNone;
 
   Relative := false;
-- 
cgit v1.2.3