From 9bbedc30d451861ccbd2348c00d7d8ae5a828c60 Mon Sep 17 00:00:00 2001 From: k-m_schindler Date: Sun, 3 Jan 2016 22:49:06 +0000 Subject: end of first pass. many more smaller changes and preparations for later additions git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@3189 b956fd51-792f-4845-bead-9b4dfca2ff2c --- src/screens/UScreenPopup.pas | 1161 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1160 insertions(+), 1 deletion(-) (limited to 'src/screens/UScreenPopup.pas') diff --git a/src/screens/UScreenPopup.pas b/src/screens/UScreenPopup.pas index fdf4a69c..e950581b 100644 --- a/src/screens/UScreenPopup.pas +++ b/src/screens/UScreenPopup.pas @@ -60,6 +60,66 @@ type function Draw: boolean; override; end; +{ for later addition +type + TPopupInsertUserHandler = procedure(Value: boolean; Data: pointer); + + TScreenPopupInsertUser = class(TMenu) + private + fHandler: TPopupInsertUserHandler; + fHandlerData: Pointer; + + public + Visible: boolean; // whether the menu should be drawn + Username: UTF8String; + Password: UTF8String; + InteractionTmp: integer; + + constructor Create; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; + procedure OnShow; override; + procedure ShowPopup(const Title: UTF8String; Msg: UTF8String; Handler: TPopupInsertUserHandler; + HandlerData: Pointer); + function Draw: boolean; override; + end; + +type + TPopupSendScoreHandler = procedure(Value: integer; Data: pointer); + + TScreenPopupSendScore = class(TMenu) + private + fHandler: TPopupSendScoreHandler; + fHandlerData: pointer; + + TColorR: real; + TColorG: real; + TColorB: real; + + TDColorR: real; + TDColorG: real; + TDColorB: real; + + public + Visible: boolean; // whether the menu should be drawn + IWebsite: array of UTF8String; + IUsername: array of UTF8String; + IPlayersPlay: array of UTF8String; + Password: UTF8String; + Username: UTF8String; + + SelectValueP: integer; + SelectValueW: integer; + SelectValueU: integer; + + constructor Create; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; + procedure OnShow; override; + procedure ShowPopup(const Title: UTF8String; Handler: TPopupSendScoreHandler; + HandlerData: Pointer); + function Draw: boolean; override; + end; +} + type TScreenPopup = class(TMenu) { @@ -87,6 +147,49 @@ type constructor Create; end; +{ for later addition +type + TScreenPopupScoreDownload = class(TMenu) + public + Visible: boolean; // whether the menu should be drawn + Actual_Song: integer; + Actual_Web: integer; + Index_Song: integer; + Num_Songs: integer; + Num_Webs: integer; + CountSongsUpdate: integer; + + OpScoreFile: boolean; + ScoreFile: TextFile; + + Download_Phase: integer; + + Text_SongSituation: UTF8String; + Text_WebSituation: UTF8String; + + Texture_ProgressBar: TTexture; + + List_MD5Song: widestring; + Receive_List: array[0..2] of widestring; + Actual_Level: integer; + Position_Receive_List: array[0..2] of integer; + + constructor Create; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; + procedure OnShow; override; + procedure ShowPopup(optmode: integer; optsong: integer; optweb: integer); + procedure DownloadTimeBarSong(); + procedure DownloadTimeBarWeb(); + function Draw: boolean; override; + procedure ReadMD5FileSong(); + procedure ReceiveListScore(); + procedure SaveScoreSong(); + procedure FileSaveScoreSong(); + procedure LogSongUpdate(Artist, Title, WebName: UTF8String); + procedure OpenFile(); + end; +} + var //ISelections: array of string; SelectValue: integer; @@ -132,7 +235,7 @@ begin SDLK_DOWN: InteractNext; SDLK_UP: InteractPrev; - + SDLK_RIGHT: InteractNext; SDLK_LEFT: InteractPrev; end; @@ -199,6 +302,1062 @@ begin Background.OnShow end; +{ TScreenPopupInsertUser } + +{for later addition +function TScreenPopupInsertUser.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; +var + Value: boolean; + I: integer; + Password_TMP: UTF8String; +begin + Result := true; + if (PressedDown) then + begin // Key Down + // check normal keys + if (IsPrintableChar(CharCode)) then + begin + if (Interaction = 0) or (Interaction = 1) then + begin + if (Interaction = 0) then + begin + Button[0].Text[0].Text := Button[0].Text[0].Text + UCS4ToUTF8String(CharCode); + Username := Username + UCS4ToUTF8String(CharCode); + end + else + begin + Password := Password + UCS4ToUTF8String(CharCode); + Button[1].Text[0].Text := Button[1].Text[0].Text + '*'; + end; + end; + end; + + // check special keys + case PressedKey of + SDLK_ESCAPE: + begin + Value := false; + Visible := false; + Result := false; + end; + + SDLK_BACKSPACE : + begin + if (Interaction = 0) or (Interaction = 1) then + begin + Button[Interaction].Text[0].DeleteLastLetter(); + + if (Interaction = 0) then + Username := Button[Interaction].Text[0].Text; + + if (Interaction = 1) then + begin + Password_TMP := ''; + for I := 1 to Length(Password)-1 do + Password_TMP := Password_TMP + Password[I]; + Password := Password_TMP; + end; + end; + end; + + SDLK_RETURN: + begin + InteractionTmp := Interaction; + + if (Interaction <> 3) then + Interaction := 2; + + Value := (Interaction = 2); + if (Interaction = 3) then + Visible := false; + Result := false; + end; + + SDLK_TAB: InteractNext; + + SDLK_DOWN: InteractNext; + SDLK_UP: InteractPrev; + + SDLK_RIGHT: InteractNext; + SDLK_LEFT: InteractPrev; + end; + end; + + if (not Result) then + begin + if (@fHandler <> nil) then + fHandler(Value, fHandlerData); + end; +end; + +constructor TScreenPopupInsertUser.Create; +begin + inherited Create; + + fHandler := nil; + fHandlerData := nil; + + AddText(Theme.InsertUserPopup.TextInsertUser); + + LoadFromTheme(Theme.InsertUserPopup); + + AddButton(Theme.InsertUserPopup.ButtonUsername); + if (Length(Button[0].Text) = 0) then + AddButtonText(14, 20, ''); + + AddButton(Theme.InsertUserPopup.ButtonPassword); + if (Length(Button[1].Text) = 0) then + AddButtonText(14, 20, ''); + + AddButton(Theme.InsertUserPopup.Button1); + if (Length(Button[2].Text) = 0) then + AddButtonText(14, 20, 'Add'); + + AddButton(Theme.InsertUserPopup.Button2); + if (Length(Button[3].Text) = 0) then + AddButtonText(14, 20, 'Cancel'); + + Button[0].Text[0].Writable := true; + Button[1].Text[0].Writable := true; + + Interaction := 0; +end; + +function TScreenPopupInsertUser.Draw: boolean; +begin + Result := inherited Draw; +end; + +procedure TScreenPopupInsertUser.OnShow; +begin + inherited; +end; + +procedure TScreenPopupInsertUser.ShowPopup(const Title: UTF8String; Msg: UTF8String; Handler: TPopupInsertUserHandler; + HandlerData: Pointer); +begin + + Visible := true; //Set Visible + fHandler := Handler; + fHandlerData := HandlerData; + + Text[0].Text := Language.Translate(Msg); + Text[1].Text := Title; + + Button[0].Visible := true; + Button[1].Visible := true; + Button[2].Visible := true; + Button[3].Visible := true; + + Password := ''; + Username := ''; + + Button[0].Text[0].Text := ''; + Button[1].Text[0].Text := ''; + Button[2].Text[0].Text := Language.Translate('MSG_INSERT_USER_ADD'); + Button[3].Text[0].Text := Language.Translate('MSG_INSERT_USER_CANCEL'); + + Interaction := 0; + + Background.OnShow +end; +} +{ TScreenPopupSendScore } +{ +function TScreenPopupSendScore.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; +var + New_User: boolean; + I, Value: integer; + Password_TMP: UTF8String; +begin + Result := true; + if (PressedDown) then + begin // Key Down + // check normal keys + if (IsPrintableChar(CharCode)) then + begin + if (Interaction = 3) or (Interaction = 4) then + begin + if (Interaction = 3) then + begin + Button[0].Text[0].Text := Button[0].Text[0].Text + UCS4ToUTF8String(CharCode); + Username := Username + UCS4ToUTF8String(CharCode); + end; + + if (Interaction = 4) then + begin + Button[1].Text[0].Text := Button[1].Text[0].Text + '*'; + Password := Password + UCS4ToUTF8String(CharCode); + end; + end + end; + + // check special keys + case PressedKey of + SDLK_ESCAPE: + begin + Value := 0; + Visible := false; + Result := false; + end; + + SDLK_BACKSPACE: + begin + if (Interaction = 3) or (Interaction = 4) then + begin + Button[Interaction - 3].Text[0].DeleteLastLetter; + + if (Interaction = 3) then + Username := Button[Interaction - 3].Text[0].Text; + + if (Interaction = 4) then + begin + Password_TMP := ''; + for I := 1 to Length(Password)-1 do + Password_TMP := Password_TMP + Password[I]; + Password := Password_TMP; + end; + + end + else + begin + Value := 0; + Visible := false; + Result := false; + end; + end; + + SDLK_RETURN: + begin + + if (Interaction = 5) then + begin + Value := 1; + Visible := false; + end; + + if (Interaction = 6) then + begin + Value := 2; + Visible := false; + end; + + Result := false; + end; + + SDLK_DOWN: InteractNext; + SDLK_UP: InteractPrev; + + SDLK_TAB: InteractNext; + + SDLK_RIGHT: + begin + if (Interaction < 3) then + InteractInc; + + if (Interaction = 1) and (SelectValueW <= High(IWebsite)) then + begin + New_User := false; + + if (SelectValueU <> High(IUsername)) then + SelectValueU := 0 + else + New_User := true; + + SetLength(IUsername, Length(DataBase.NetworkUser[SelectValueW].UserList)); + for I := 0 to High(DataBase.NetworkUser[SelectValueW].UserList) do + IUsername[I] := DataBase.NetworkUser[SelectValueW].UserList[I].Username; + SetLength(IUsername, Length(IUsername) + 1); + IUsername[High(IUsername)] := Language.Translate('SCORE_SEND_OTHER_USER'); + + + if (New_User = true) then + SelectValueU := High(IUsername); + + UpdateSelectSlideOptions(Theme.SendScorePopup.SelectSlide3, 2, IUsername, SelectValueU); + end; + + if (SelectValueU = High(IUsername)) then + begin + Button[0].Text[1].ColR := TColorR; + Button[0].Text[1].ColG := TColorG; + Button[0].Text[1].ColB := TColorB; + + Button[1].Text[1].ColR := TColorR; + Button[1].Text[1].ColG := TColorG; + Button[1].Text[1].ColB := TColorB; + + Button[0].Selectable := true; + Button[1].Selectable := true; + end + else + begin + Button[0].Text[1].ColR := TDColorR; + Button[0].Text[1].ColG := TDColorG; + Button[0].Text[1].ColB := TDColorB; + + Button[1].Text[1].ColR := TDColorR; + Button[1].Text[1].ColG := TDColorG; + Button[1].Text[1].ColB := TDColorB; + + Button[0].Selectable := false; + Button[1].Selectable := false; + end; + + end; + SDLK_LEFT: + begin + if (Interaction < 3) then + InteractDec; + + if (Interaction = 1) then + begin + New_User := false; + + SetLength(IUsername, Length(DataBase.NetworkUser[SelectValueW].UserList)); + + for I := 0 to High(DataBase.NetworkUser[SelectValueW].UserList) do + IUsername[I] := DataBase.NetworkUser[SelectValueW].UserList[I].Username; + + SetLength(IUsername, Length(IUsername) + 1); + IUsername[High(IUsername)] := Language.Translate('SCORE_SEND_OTHER_USER'); + + if ((SelectValueU <> High(IUsername)) and (High(IUsername) <> 0)) then + SelectValueU := 0 + else + New_User := true; + + if (New_User = true) then + SelectValueU := High(IUsername); + + UpdateSelectSlideOptions(Theme.SendScorePopup.SelectSlide3, 2, IUsername, SelectValueU); + end; + + if (SelectValueU = High(IUsername)) then + begin + Button[0].Text[1].ColR := TColorR; + Button[0].Text[1].ColG := TColorG; + Button[0].Text[1].ColB := TColorB; + + Button[1].Text[1].ColR := TColorR; + Button[1].Text[1].ColG := TColorG; + Button[1].Text[1].ColB := TColorB; + + Button[0].Selectable := true; + Button[1].Selectable := true; + end + else + begin + Button[0].Text[1].ColR := TDColorR; + Button[0].Text[1].ColG := TDColorG; + Button[0].Text[1].ColB := TDColorB; + + Button[1].Text[1].ColR := TDColorR; + Button[1].Text[1].ColG := TDColorG; + Button[1].Text[1].ColB := TDColorB; + + Button[0].Selectable := false; + Button[1].Selectable := false; + end; + + end; + + end; + end; + + if (not Result) then + begin + if (@fHandler <> nil) then + fHandler(Value, fHandlerData); + end; + +end; + +constructor TScreenPopupSendScore.Create; +var + I: integer; +begin + inherited Create; + + fHandler := nil; + fHandlerData := nil; + SelectValueP := 0; + SelectValueW := 0; + SelectValueU := 0; + + LoadFromTheme(Theme.SendScorePopup); + + SetLength(IWebsite, 0); + for I := 0 to High(DataBase.NetworkUser) do + begin + SetLength(IWebsite, Length(IWebsite) + 1); + IWebsite[High(IWebsite)] := DataBase.NetworkUser[I].Website; + end; + + AddSelectSlide(Theme.SendScorePopup.SelectSlide1, SelectValueP, IPlayersPlay); + AddSelectSlide(Theme.SendScorePopup.SelectSlide2, SelectValueW, IWebsite); + AddSelectSlide(Theme.SendScorePopup.SelectSlide3, SelectValueU, IUsername); + + TColorR := Theme.SendScorePopup.ButtonUsername.ColR; + TColorG := Theme.SendScorePopup.ButtonUsername.ColG; + TColorB := Theme.SendScorePopup.ButtonUsername.ColB; + + TDColorR := Theme.SendScorePopup.ButtonUsername.DColR; + TDColorG := Theme.SendScorePopup.ButtonUsername.DColG; + TDColorB := Theme.SendScorePopup.ButtonUsername.DColB; + + AddButton(Theme.SendScorePopup.ButtonUsername); + AddButton(Theme.SendScorePopup.ButtonPassword); + + AddButton(Theme.SendScorePopup.Button1); + AddButton(Theme.SendScorePopup.Button2); + + Interaction := 0; +end; + +function TScreenPopupSendScore.Draw: boolean; +begin + Result := inherited Draw; +end; + +procedure TScreenPopupSendScore.OnShow; +begin + inherited; +end; + +procedure TScreenPopupSendScore.ShowPopup(const Title: UTF8String; Handler: TPopupSendScoreHandler; + HandlerData: Pointer); +var + I: integer; +begin + + Visible := true; //Set Visible + fHandler := Handler; + fHandlerData := HandlerData; + Password := ''; + Username := ''; + + SelectValueP := 0; + SelectValueW := 0; + SelectValueU := 0; + + Interaction := 0; + + Text[0].Text := Language.Translate(Title); + + for I := 0 to 3 do + Button[I].Visible := true; + + Button[0].Text[0].Text := ''; + Button[1].Text[0].Text := ''; + + Button[2].Text[0].Text := Language.Translate('SCORE_SEND'); + Button[3].Text[0].Text := Language.Translate('SCORE_SAVE'); + + SetLength(IPlayersPlay, PlayersPlay); + + for I := 0 to PlayersPlay - 1 do + IPlayersPlay[I] := Ini.Name[I]; + + UpdateSelectSlideOptions(Theme.SendScorePopup.SelectSlide1, 0, IPlayersPlay, SelectValueP); + + //UpdateSelectSlideOptions(Theme.SendScorePopup.SelectSlide2, 1, IWebsite, SelectValueW); + + SetLength(IUsername, Length(DataBase.NetworkUser[SelectValueW].UserList)); + + for I := 0 to High(DataBase.NetworkUser[SelectValueW].UserList) do + IUsername[I] := DataBase.NetworkUser[SelectValueW].UserList[I].Username; + + SetLength(IUsername, Length(IUsername) + 1); + IUsername[High(IUsername)] := Language.Translate('SCORE_SEND_OTHER_USER'); + + UpdateSelectSlideOptions(Theme.SendScorePopup.SelectSlide3, 2, IUsername, SelectValueU); + + if (SelectValueU = High(IUsername)) then + begin + Button[0].Text[1].ColR := TColorR; + Button[0].Text[1].ColG := TColorG; + Button[0].Text[1].ColB := TColorB; + + Button[1].Text[1].ColR := TColorR; + Button[1].Text[1].ColG := TColorG; + Button[1].Text[1].ColB := TColorB; + + Button[0].Selectable := true; + Button[1].Selectable := true; + end + else + begin + Button[0].Selectable := false; + Button[1].Selectable := false; + + Button[0].Text[1].ColR := TDColorR; + Button[0].Text[1].ColG := TDColorG; + Button[0].Text[1].ColB := TDColorB; + + Button[1].Text[1].ColR := TDColorR; + Button[1].Text[1].ColG := TDColorG; + Button[1].Text[1].ColB := TDColorB; + end; + + SelectsS[0].Visible := true; + SelectsS[1].Visible := true; + SelectsS[2].Visible := true; + + Interaction := 0; + + Background.OnShow +end; +} +{ TScreenPopupScoreDownload } +{ +function TScreenPopupScoreDownload.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; +var + Value: boolean; +begin + Result := true; + if (PressedDown) then + begin // Key Down + // check special keys + case PressedKey of + SDLK_ESCAPE, + SDLK_BACKSPACE : + begin + Value := false; + Visible := false; + Result := false; + Text[0].Text := Language.Translate('SCORE_DOWNLOAD_RECEIVE_LIST'); + Text[1].Text := ''; + end; + + SDLK_RETURN: + begin + Value := (Interaction = 0); + if (Interaction = 0) then + begin + Visible := false; + Result := false; + Text[0].Text := Language.Translate('SCORE_DOWNLOAD_RECEIVE_LIST'); + Text[1].Text := ''; + end; + end; + + SDLK_DOWN: Interaction := -1; + SDLK_UP: Interaction := -1; + + SDLK_RIGHT: InteractNext; + SDLK_LEFT: InteractPrev; + end; + end; + +end; + +constructor TScreenPopupScoreDownload.Create; +begin + inherited Create; + + Texture_ProgressBar := Texture.LoadTexture(Skin.GetTextureFileName('ProgressBar')); + + Theme.ScoreDownloadPopup.TextSongScoreDownload.Text := Language.Translate('SCORE_DOWNLOAD_RECEIVE_LIST'); + Theme.ScoreDownloadPopup.TextWebScoreDownload.Text := ''; + + AddText(Theme.ScoreDownloadPopup.TextSongScoreDownload); + AddText(Theme.ScoreDownloadPopup.TextWebScoreDownload); + + LoadFromTheme(Theme.ScoreDownloadPopup); + + AddButton(Theme.ScoreDownloadPopup.Button1); + if (Length(Button[0].Text) = 0) then + AddButtonText(14, 20, 'Button 1'); + + Interaction := 0; +end; + +procedure TScreenPopupScoreDownload.LogSongUpdate(Artist, Title, WebName: UTF8String); +var + UpdateFile: TextFile; +begin + AssignFile(UpdateFile, WebScoresPath.Append(WebName + ' [Song Update].txt').ToNative); + + if FileExists(WebScoresPath.Append(WebName + ' [Song Update].txt').ToNative) then + Append(UpdateFile) + else + Rewrite(UpdateFile); + + WriteLn(UpdateFile, Artist + ' - ' + Title); + + Flush(UpdateFile); + Close(UpdateFile); +end; + +procedure TScreenPopupScoreDownload.SaveScoreSong(); +var + String_Text, User_Score, Max_Score, Media_Score: string; + I, J, Update: integer; + DeleteSongLevel: array [0..2] of boolean; +begin + + if not(CatSongs.Song[Index_Song].Main) then + begin + Actual_Song := Actual_Song + 1; + Text_SongSituation := Language.Translate('SCORE_DOWNLOAD_SONG') + ' ' + IntToStr(Actual_Song) + '/' + IntToStr(Num_Songs); + Text_WebSituation := IntToStr(Actual_Web) + '/' + IntToStr(Num_Webs); + + for J := 0 to 2 do + begin + + if (Position_Receive_List[J] <= Length(Receive_List[J])) then + begin + + String_Text := ''; + + while (Receive_List[J][Position_Receive_List[J]] <> #10) and (Position_Receive_List[J] <= Length(Receive_List[J])) do + begin + String_Text := String_Text + Receive_List[J][Position_Receive_List[J]]; + Position_Receive_List[J] := Position_Receive_List[J] + 1; + end; + + // E -> Error song no exist in web + if (String_Text <> 'ERROR') then + begin + DeleteSongLevel[J] := false; + + DataBase.AddSong(CatSongs.Song[Index_Song]); + + Max_Score := Copy(String_Text, 0, 5); + Media_Score := Copy(String_Text, 6, 5); + User_Score := Copy(String_Text, 11, Length(String_Text) - 10); + + DataBase.AddMax_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, StrToInt(Max_Score), J); + DataBase.AddMedia_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, StrToInt(Media_Score), J); + DataBase.AddUser_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, User_Score, J); + end + else + DeleteSongLevel[J] := true; + + Position_Receive_List[J] := Position_Receive_List[J] + 1; + end; + end; + + if (DeleteSongLevel[0]) and (DeleteSongLevel[1]) and (DeleteSongLevel[2]) then + begin + Update := DataBase.Delete_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID); + + if (Update <> 0) then + begin + LogSongUpdate(CatSongs.Song[Index_Song].Artist, CatSongs.Song[Index_Song].Title, DllMan.Websites[Actual_Web - 1].Name); + CountSongsUpdate := CountSongsUpdate + 1; + end; + end; + + end; + + Index_Song := Index_Song + 1; + +end; + +procedure TScreenPopupScoreDownload.FileSaveScoreSong(); +var + String_Text, User_Score, Max_Score, Media_Score, MD5_Song: string; + Level: byte; + Update: integer; + SongExist: boolean; +begin + + if not(CatSongs.Song[Index_Song].Main) then + begin + Actual_Song := Actual_Song + 1; + Text_SongSituation := Language.Translate('SCORE_DOWNLOAD_SONG') + ' ' + IntToStr(Actual_Song) + '/' + IntToStr(Num_Songs); + Text_WebSituation := IntToStr(Actual_Web) + '/' + IntToStr(Num_Webs); + + SongExist := false; + + while not (EOF(ScoreFile)) do + begin + ReadLn(ScoreFile, String_Text); + + MD5_Song := Copy(String_Text, 0, 32); + + if (CatSongs.Song[Index_Song].MD5 = MD5_Song) then + begin + SongExist := true; + DataBase.AddSong(CatSongs.Song[Index_Song]); + + Level := StrToInt(Copy(String_Text, 33, 1)) - 1; + Max_Score := Copy(String_Text, 34, 5); + Media_Score := Copy(String_Text, 39, 5); + User_Score := Copy(String_Text, 44, Length(String_Text) - 43); + + DataBase.AddMax_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, StrToInt(Max_Score), Level); + DataBase.AddMedia_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, StrToInt(Media_Score), Level); + DataBase.AddUser_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID, User_Score, Level); + end; + end; + + if not(SongExist) then + begin + Update := DataBase.Delete_Score(CatSongs.Song[Index_Song], DllMan.Websites[Actual_Web - 1].ID); + + if (Update <> 0) then + begin + LogSongUpdate(CatSongs.Song[Index_Song].Artist, CatSongs.Song[Index_Song].Title, DllMan.Websites[Actual_Web - 1].Name); + CountSongsUpdate := CountSongsUpdate + 1; + end; + end; + + Reset(ScoreFile); + end; + + Index_Song := Index_Song + 1; + +end; + +procedure TScreenPopupScoreDownload.ReadMD5FileSong(); +var + I: integer; +begin + + if (Num_Songs = 1) then + begin + Index_Song := ScreenSong.Interaction; + List_MD5Song := CatSongs.Song[ScreenSong.Interaction].MD5; + end + else + begin + for I := 0 to High(CatSongs.Song) do + begin + if not (CatSongs.Song[I].Main) then + List_MD5Song := List_MD5Song + CatSongs.Song[I].MD5; + end; + end; + + ScreenPopupScoreDownload.Download_Phase := 1; +end; + +procedure TScreenPopupScoreDownload.ReceiveListScore(); +begin + + Text_WebSituation := IntToStr(Actual_Web) + '/' + IntToStr(Num_Webs); + Text_SongSituation := Language.Translate('SCORE_DOWNLOAD_RECEIVE_LIST'); + + Receive_List[Actual_Level] := ''; + Receive_List[Actual_Level] := DllMan.WebsiteDownloadScore(List_MD5Song, Actual_Level + 1); + + if (Receive_List[Actual_Level] = '0') then + begin + ScreenPopupError.ShowPopup(Format(Language.Translate('SONG_MENU_REFRESH_SCORES_ERROR_CONNECTION'), [UTF8Encode(DllMan.Websites[Actual_Web -1].Name)])); + Text_SongSituation := Language.Translate('WEBSITE_NO_CONNECTION'); + Actual_Song := Num_Songs; + Actual_Level := 2; + + if (Num_Webs = 1) then + Visible := false + end; + + Actual_Level := Actual_Level + 1; + +end; + +procedure TScreenPopupScoreDownload.OpenFile; +var + Filename: string; +begin + + Filename := WebScoresPath.Append(DataBase.NetworkUser[Actual_Web - 1].Website + ' [Download Scores].txt').ToNative; + + if (FileExists(Filename)) then + begin + AssignFile(ScoreFile, Filename); + Reset(ScoreFile); + end + else + begin + ScreenPopupError.ShowPopup(Format(Language.Translate('SONG_MENU_REFRESH_SCORES_ERROR_FILE'), [UTF8Encode(DllMan.Websites[Actual_Web -1].Name)])); + + Actual_Song := Num_Songs; + Actual_Level := 2; + + if (Num_Webs = 1) then + Visible := false + end; + +end; + +function TScreenPopupScoreDownload.Draw: boolean; +var + I: integer; +begin + inherited Draw; + + Text[0].Text := Text_SongSituation; + Text[1].Text := Text_WebSituation; + + DownloadTimeBarSong(); + + if (Num_Webs > 1) then + DownloadTimeBarWeb(); + + if (Download_Phase = 0) then + begin + + if (OpScoreFile) then + begin + OpenFile; + Download_Phase := 1; + end + else + ReadMD5FileSong(); + + end + else + begin + // ONLINE DOWNLOAD SCORE + if not (OpScoreFile) then + begin + if (Download_Phase = 1) then + begin + if (Actual_Level <= 2) then + begin + DLLMan.LoadWebsite(Actual_Web - 1); + ReceiveListScore(); + end + else + Download_Phase := 2; + end + else + begin + if (Actual_Song < Num_Songs) then + begin + SaveScoreSong(); + end + else + begin + if ((Actual_Web < Num_Webs) and (Num_Webs > 1)) then + begin + for I:= 0 to 2 do + begin + Receive_List[I] := ''; + Position_Receive_List[I] := 1; + end; + + Download_Phase := 1; + Actual_Song := 0; + Index_Song := 0; + Actual_Level := 0; + Actual_Web := Actual_Web + 1; + end + else + begin + Button[0].Text[0].Text := Language.Translate('SCORE_DOWNLOAD_OK'); + if (CountSongsUpdate > 0) then + begin + Visible := false; + ScreenPopupInfo.ShowPopup(Format(Language.Translate('SCORE_DOWNLOAD_SONG_UPDATE'), [CountSongsUpdate])); + end + else + Interaction := 0; + end; + end; + end; + end + else + begin + // FILE DOWNLOAD + if (Actual_Song < Num_Songs) then + begin + FileSaveScoreSong(); + end + else + begin + if ((Actual_Web < Num_Webs) and (Num_Webs > 1)) then + begin + //Download_Phase := 1; + Actual_Song := 0; + Index_Song := 0; + Actual_Level := 0; + Actual_Web := Actual_Web + 1; + OpenFile; + end + else + begin + Button[0].Text[0].Text := Language.Translate('SCORE_DOWNLOAD_OK'); + + if (CountSongsUpdate > 0) then + begin + Visible := false; + ScreenPopupInfo.ShowPopup(Format(Language.Translate('SCORE_DOWNLOAD_SONG_UPDATE'), [CountSongsUpdate])); + end + else + Interaction := 0; + end; + + end; + end; + end; + + Result := true; + +end; + +procedure TScreenPopupScoreDownload.OnShow; +begin + inherited; +end; + +procedure TScreenPopupScoreDownload.DownloadTimeBarSong(); +var + x, y: real; + width, height: real; + Progress: real; + CurProgress: real; +begin + x := Theme.ScoreDownloadPopup.DownloadProgressSong.X; + y := Theme.ScoreDownloadPopup.DownloadProgressSong.Y; + + width := Theme.ScoreDownloadPopup.DownloadProgressSong.W; + height := Theme.ScoreDownloadPopup.DownloadProgressSong.H; + + glColor4f(Theme.ScoreDownloadPopup.DownloadProgressSong.ColR, Theme.ScoreDownloadPopup.DownloadProgressSong.ColG, Theme.ScoreDownloadPopup.DownloadProgressSong.ColB, 1); //Set Color + + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + + glBindTexture(GL_TEXTURE_2D, Texture_ProgressBar.TexNum); + + glBegin(GL_QUADS); + glTexCoord2f(0, 0); + glVertex2f(x, y); + + CurProgress := Actual_Song; + if (CurProgress > 0) then + begin + Progress := CurProgress / Num_Songs; + glTexCoord2f((width * Progress) / 8, 0); + glVertex2f(x + width * Progress, y); + + glTexCoord2f((width * Progress) / 8, 1); + glVertex2f(x + width * Progress, y + height); + end; + + glTexCoord2f(0, 1); + glVertex2f(x, y + height); + glEnd; + + glDisable(GL_TEXTURE_2D); + glDisable(GL_BLEND); + glcolor4f(1, 0, 0, 1); + +end; + +procedure TScreenPopupScoreDownload.DownloadTimeBarWeb(); +var + x, y: real; + width, height: real; + Progress: real; + CurProgress: real; +begin + x := Theme.ScoreDownloadPopup.DownloadProgressWeb.X; + y := Theme.ScoreDownloadPopup.DownloadProgressWeb.Y; + + width := Theme.ScoreDownloadPopup.DownloadProgressWeb.W; + height := Theme.ScoreDownloadPopup.DownloadProgressWeb.H; + + glColor4f(Theme.ScoreDownloadPopup.DownloadProgressWeb.ColR, Theme.ScoreDownloadPopup.DownloadProgressWeb.ColG, Theme.ScoreDownloadPopup.DownloadProgressWeb.ColB, 1); //Set Color + + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + + glBindTexture(GL_TEXTURE_2D, Texture_ProgressBar.TexNum); + + glBegin(GL_QUADS); + glTexCoord2f(0, 0); + glVertex2f(x, y); + + CurProgress := Actual_Song + ((Actual_Web - 1) * Num_Songs); + if (CurProgress > 0) then + begin + Progress := CurProgress / (Num_Songs * Num_Webs); + glTexCoord2f((width * Progress) / 8, 0); + glVertex2f(x + width * Progress, y); + + glTexCoord2f((width * Progress) / 8, 1); + glVertex2f(x + width * Progress, y + height); + end; + + glTexCoord2f(0, 1); + glVertex2f(x, y + height); + glEnd; + + glDisable(GL_TEXTURE_2D); + glDisable(GL_BLEND); + glcolor4f(1, 0, 0, 1); + +end; + +procedure TScreenPopupScoreDownload.ShowPopup(optmode: integer; optsong: integer; optweb: integer); +var + I: integer; +begin + Background.OnShow; + + //reset vars + Actual_Song := 0; + Actual_Web := 1; + Actual_Level := 0; + Index_Song := 0; + Download_Phase := 0; + List_MD5Song := ''; + OpScoreFile := false; + CountSongsUpdate := 0; + + if (optmode = 1) then + OpScoreFile := true; + + for I := 0 to 2 do + begin + Receive_List[I] := ''; + Position_Receive_List[I] := 1; + end; + + Text_SongSituation := Language.Translate('SCORE_DOWNLOAD_CREATE_LIST'); + Text_WebSituation := ''; + + if (optsong = 0) then + Num_Songs := 1 + else + Num_Songs := Songs.SongList.Count; + + if (optweb = 0) then + begin + Num_Webs := High(DataBase.NetworkUser) + 1; + if (Num_Webs > 1) then + begin + Statics[2].Visible := true; + Text[1].Visible := true; + end + else + begin + Text[1].Visible := false; + Statics[2].Visible := false; + end; + end + else + begin + Num_Webs := 1; + Actual_Web := optweb; + Text[1].Visible := false; + Statics[2].Visible := false; + end; + + Visible := true; //Set Visible + Button[0].Visible := true; + Button[0].Text[0].Text := Language.Translate('SCORE_DOWNLOAD_CANCEL'); + + Interaction := -1; + +end; +} + { TScreenPopup } function TScreenPopup.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; -- cgit v1.2.3